【问题标题】:How to implement SSL mutual authentication in iOS where the client certificate is loaded remotely?如何在远程加载客户端证书的 iOS 中实现 SSL 相互认证?
【发布时间】:2014-09-25 10:02:31
【问题描述】:

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

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

所以有人请为此提出一个想法吗?

【问题讨论】:

  • 呃,钥匙串肯定可以从您的应用程序中访问吗?
  • 是的。因为我听说一个应用程序只能访问它自己的钥匙串访问组中的项目。我说的对吗?

标签: ios ssl mutual-authentication


【解决方案1】:

我在我们的内部 iPad 应用中构建了一个这样的系统。

忘记系统偏好设置、配置文件等。以这种方式安装的所有证书都无法访问第三方应用程序,但只能访问系统应用程序,可能是因为已安装到 Apple 钥匙串中。

我探索了这三种加载证书的方法,使用了最后一种:

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

前言

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

解决方案

解决方案 1)

不切实际,因为很难(甚至不可能)生成具有特定证书的不同版本的应用程序。更不用说在用户的每台设备上处理特定版本的分发几乎是不可能的。

解决方案 2)

  • 保存 .p12 文件
  • 将文件扩展名更改为自定义扩展名
  • 注册该扩展程序以使用您的应用程序打开,因此在“打开方式...”中将列出您的应用程序 "Open in" for specific document type

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

解决方案 3)

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

基本上是这些步骤:

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

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

WWDC 2014 #704 - Building Apps for Enterprise and Education ~13:00
Apple Developer - ManagedConfig Sample App

增加了妄想症

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

  • 仅当我们需要配置新设备时,才会激活/停用配置 URL。
    您可以通过多种方式完成此操作,我的 web 应用程序会检查特定文件是否存在,因此我可以执行 touch APP_CERTIFICATES_CONFIG_ENABLED 之类的操作来激活自动配置服务并禁用删除文件的所有操作。
    只是为了确保没有我的监督就没有证书。

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2019-07-04
    相关资源
    最近更新 更多