如何在远程加载客户端证书的iOS中实现SSL相互身份验证?

Man*_*ony 4 ssl ios mutual-authentication

我正在尝试在iOS应用中实现SSL相互身份验证.在我看到的大多数示例中,客户端证书与应用程序包捆绑在一起.但在我的情况下,我需要远程加载客户端证书(即,从链接或通过电子邮件).

如果我尝试从外部源(即邮件应用程序)加载证书,它会导航到设置应用程序并将其安装到苹果的钥匙串.因此,我的应用无法访问此证书.

所以有人请为此提出建议吗?

Pun*_*man 7

我在内部的iPad应用程序中构建了一个这样的系统.

忘记系统首选项,配置文件等.以这种方式安装的所有证书都是第三方应用程序无法访问的,但仅限于系统应用程序,可能是因为它们已安装到Apple钥匙串中.

我已经探索了这三种方法来加载证书并使用最后一种:

  1. 捆绑到应用程序,你已经看到是不切实际的
  2. 从另一个应用程序发送文件(例如电子邮件)
  3. 使用链接下载(我做了什么)

前言

  • 我认为你已经构建了你的simil-PKI,带有CA,自动/手动方式来发布/撤销证书等等. 所以问题是交付给设备.
  • 对于所有解决方案,我建议使用强密码以PKCS#12格式保存私钥和证书.
  • 使用MDM管理设备,如果您的应用程序是内部设备并将与公司的设备一起使用,则监督它们添加选项(例如Meraki,是免费的,但不处理ManagedAppConfiguration)

解决方案

解决方案1)

不切实际因为使用特定证书生成不同版本的应用程序非常困难(不可能).更不用说在用户的每个设备上处理特定版本的分发几乎是不可能的.

解决方案2)

  • 保存.p12文件
  • 将文件扩展名更改为自定义扩展名
  • 注册该扩展程序以使用您的应用程序打开,因此在"打开方式..."中将列出您的应用程序 "打开"以获取特定文档类型

最安全的方法应该是用户可以选择密码来加密.p12文件,这样当打开p12时,用户必须输入他的密码,但这导致其他工作使其工作.一种不太安全但有效的方法是使用嵌入在应用程序中的单个强密码,并将其用于所有.p12文件

解决方案3)

与2)类似,但您直接从Web应用程序的特定URI下载文件,这允许一些自动配置,因为应用程序可以识别自己.

基本上这些是步骤:

  • 该应用程序通过HTTPS连接到我们的应用程序的特定URL.
  • 检查服务器证书是否正确(可信来源).
  • 发送一些东西来验证.
    在我们的例子中,我使用我在设备准备期间设置的设备名称,我可以使用MDM远程更改它.
  • 下载包含证书的配置包
    我使用JSON有效负载发送PKCS#12文件base64编码和其他数据来配置应用程序.

如果您的MDM支持ManagedAppConfiguration,您可以更改这些操作以构建更灵活的行为:使用ManagedAppConfiguration,您可以远程在每个应用程序NSUserDefaults中发送特定字符串,这样您就可以使用不同的或临时的URL /令牌来下载配置包和完全使用设备名称进行身份验证.

WWDC 2014#704 - 为企业和教育构建应用程序~13:00
Apple Developer - ManagedConfig示例应用程序

加入PARANOIA

  • 记录一切!应用程序的这一部分所做的一切(失败/错误请求,不存在设备名称请求等)

  • 仅当我们需要配置新设备时,才会激活/停用配置URL.
    您可以通过多种方式完成此操作,我的webapp会检查是否存在特定文件,因此我可以执行某些操作,例如touch APP_CERTIFICATES_CONFIG_ENABLED激活自动配置服务并禁用删除文件的所有内容.
    只是为了确保在没有我监督的情况下不会出现证书.