gpt4 book ai didi

ios - 远程加载客户端证书的iOS如何实现SSL相互认证?

转载 作者:可可西里 更新时间:2023-11-01 05:21:05 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

  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/ token 来下载配置包并完全放弃使用设备名称进行身份验证。

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

添加偏执狂

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

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

关于ios - 远程加载客户端证书的iOS如何实现SSL相互认证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com