如何在iOS应用程序中使用自签名证书

10
基本上,我们的iOS应用需要与一个目前拥有自签名证书的服务器进行通信。在我的应用中,https连接失败,并出现了不受信任的服务器证书错误,这是可以理解的。错误信息如下所示:
错误域=NSURLErrorDomain 错误码=-1202 错误描述=此服务器的证书无效。您可能正在连接到一个假冒“主机名”的服务器,这可能会危及您的机密信息。
因此,我通过电子邮件将自签名证书发送到iOS设备并导入到配置文件中,希望它将作为根CA的一部分用于https身份验证。令我惊讶的是,并没有成功,我仍然收到相同的错误。我认为iOS默认使用钥匙串中的根CA来验证服务器证书,而从我所读的内容来看,配置文件中导入的证书也存储在钥匙串中。因此,我无法理解为什么我的自签名证书未被用作根CA。
目前,我不想通过类似iOS authenticate HTTPS with self-signed certificateIn iOS, how to connect to a server using https with self-signed certificate on the server? 这样的编码方式来信任此自签名证书,因为这在客户情况下不起作用,他们将在其网络上安装我们的服务器,并且可以创建自己的自签名证书。
目前我还没有从搜索中获取到有关此问题的详细信息。是否有人能提供一些提示并告诉我需要做什么才能进行调试?非常感谢。
7月15日更新:

关于此事还有更多更新。我也尝试使用配置文件,根据在iOS中添加可信的根证书颁发机构,将自签名CA添加到iOS设备的根CA中。 根据我的测试,在6.0版的iPad和iPhone上,它也无法正常工作。所以不确定它是否只适用于越狱设备。最终,我允许用户将自签名证书导入应用程序中。 应用程序会加载这样导入的证书以进行类似于在iOS中如何使用服务器上的自签名证书连接到https? 的证书验证。希望这可以帮助其他人解决此问题。


在我的情况下,我遇到了同样的问题,“证书的通用名称”与我进行https的URL的域名不同...修复通用名称解决了这个问题。 - Durai Amuthan.H
1个回答

2
看了你提供的第一个教程,你应该能够使用它或更高级的形式。一旦测试并使其正常工作,客户端只需覆盖/替换位于应用程序文件夹中 localhost.cer 文件(或任何名称方案你使用)即可创建和添加自己的证书。有很多方法可以做到这一点,但其中之一可能是告诉应用程序一个链接,以便下载证书,一旦下载完成,就可以进行替换。如果有任何问题,我会尽力提供帮助,希望这能帮助你朝着正确的方向前进。

请注意,自签名证书是由客户生成的,但应用程序需要知名网址来下载证书。这意味着客户需要将该证书提供给我们,以发布在该知名网站上。我认为这绝对是解决此问题的一种方法,但对于企业部署而言并不简单。 - windfly2006
今天,当我查看Symantec MDM配置指南(http://www.symantec.com/connect/sites/default/files/SMM%207.1%20Best%20Practices%20Guide%20vs2.pdf)时,它还提到了“6.5为根CA创建凭证负载”,用于将证书导入iOS根证书存储。这意味着它必须能够工作,尽管对我来说并没有起作用。不确定这是否适用于iOS 5,但在iOS 6上无法正常工作。 - windfly2006
我给你的问题点了个赞,希望有人能更深入地研究一下。 - rezand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接