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