【发布时间】:2017-10-07 12:20:05
【问题描述】:
TL;DR 版本:有没有什么方法可以将服务器证书传递给 iOS 客户端,而不涉及传递服务器的私钥?
我编写了一个与我的 macOS 服务器应用程序通信的 iOS 客户端应用程序(因此我可以控制两端)。我已经使用自签名证书实现了证书固定,以使事情更安全。为了在开发过程中实现这一点,我将服务器证书硬编码到 iOS 客户端应用程序中,并告诉客户端只连接到在 TLS 握手期间为您提供确切证书的服务器。一切都很好。
但是,在现实世界中,我将此系统作为一组销售(1 个服务器,每个客户有多个客户端),因此我无法将服务器证书硬编码到 iOS 客户端中。我的计划是将服务器证书带外(通过电子邮件)传递给 iOS 客户端,如下所述:Making Certificates and Keys Available To Your App:
应用只能访问其自己的钥匙串访问组中的钥匙串项。
要在您自己的应用中使用数字身份,您需要编写代码来导入它们。这通常意味着读取 PKCS#12 格式的 blob,然后使用函数
SecPKCS12Import将 blob 的内容导入应用的钥匙串中提供身份的一种方法是通过电子邮件。当您配置设备时,向关联用户发送一封电子邮件,并附上他们的客户端身份作为 PKCS#12 文件。
我的问题是 .p12 文件包含证书和服务器的私钥 - 传递私钥似乎也是非常错误的。
有没有其他方法可以将服务器证书传递给 iOS 客户端,而不涉及传递服务器的私钥?
谢谢!!!
【问题讨论】: