我正在尝试在 iOS 应用程序中实现 SSL 相互身份验证。在我看到的大多数示例中,客户端证书与应用程序包捆绑在一起。但就我而言,我需要远程加载客户端证书(即,通过链接或通过电子邮件)。
如果我尝试从外部源(即邮件应用程序)加载证书,它会导航到设置应用程序并将其安装到苹果的钥匙串中。因此,我的应用程序无法访问此证书。
所以有人请为此提出一个想法吗?
我正在尝试在 iOS 应用程序中实现 SSL 相互身份验证。在我看到的大多数示例中,客户端证书与应用程序包捆绑在一起。但就我而言,我需要远程加载客户端证书(即,通过链接或通过电子邮件)。
如果我尝试从外部源(即邮件应用程序)加载证书,它会导航到设置应用程序并将其安装到苹果的钥匙串中。因此,我的应用程序无法访问此证书。
所以有人请为此提出一个想法吗?
我在我们内部的 iPad 应用程序中构建了一个这样的系统。
忘记系统首选项、配置文件等。以这种方式安装的所有证书都无法访问第三方应用程序,但只能访问系统应用程序,可能是因为已安装到 Apple 钥匙串中。
我探索了这三种加载证书的方法,并使用了最后一种:
不切实际,因为很难(甚至不可能)生成具有特定证书的不同版本的应用程序。更不用说在用户的每台设备上处理特定版本的分发几乎是不可能的。
最安全的方法应该是用户可以选择密码来加密 .p12 文件,这样当打开 p12 时,用户必须输入他的密码,但这会导致其他工作使其工作。一种不太安全但可行的方法是使用嵌入在应用程序中的单个强密码并将其用于所有 .p12 文件
与 2) 类似,但您直接从 Web 应用程序的特定 URI 下载文件,这允许一些自动配置,因为应用程序可以识别自己。
基本上这些是步骤:
如果您的 MDM 支持 ManagedAppConfiguration,您可以稍微更改这些操作以构建更灵活的行为:使用 ManagedAppConfiguration,您可以远程在每个应用程序 NSUserDefaults 中发送特定字符串,因此您可以使用不同的或临时的 URL/令牌来下载配置包和完全放弃使用设备名称进行身份验证。
WWDC 2014 #704 - 为企业和教育构建应用程序 ~13:00
Apple Developer - ManagedConfig 示例应用程序
记录一切!这部分应用程序所做的一切(失败/错误请求、不存在的设备名称请求等)
仅当我们需要配置新设备时,才会激活/停用配置 URL。
您可以通过多种方式完成此操作,我的 web 应用程序检查特定文件的存在,因此我可以执行诸如touch APP_CERTIFICATES_CONFIG_ENABLED
激活自动配置服务并禁用所有删除文件的操作。
只是为了确保没有我的监督,任何证书都不会流通。