Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在iOS应用程序上使用自签名证书_Iphone_Ios_Keychain_Self Signed - Fatal编程技术网

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

Iphone 如何在iOS应用程序上使用自签名证书,iphone,ios,keychain,self-signed,Iphone,Ios,Keychain,Self Signed,基本上,我们的iOS应用程序现在需要与具有自签名证书的服务器通信。在我的应用程序中,https失败,服务器证书不可信,这是可以理解的。错误如下所示: Error Domain=NSURLErrorDomain Code=-1202“此服务器的证书无效。您可能正在连接一个冒充“我的主机名”的服务器,这可能会使您的机密信息面临风险。” 因此,我通过电子邮件将自签名证书发送到iOS设备,并导入到配置文件中,希望它能作为根CA的一部分用于https身份验证。令我惊讶的是,事实并非如此,我仍在犯同样的错误

基本上,我们的iOS应用程序现在需要与具有自签名证书的服务器通信。在我的应用程序中,https失败,服务器证书不可信,这是可以理解的。错误如下所示:

Error Domain=NSURLErrorDomain Code=-1202“此服务器的证书无效。您可能正在连接一个冒充“我的主机名”的服务器,这可能会使您的机密信息面临风险。”

因此,我通过电子邮件将自签名证书发送到iOS设备,并导入到配置文件中,希望它能作为根CA的一部分用于https身份验证。令我惊讶的是,事实并非如此,我仍在犯同样的错误。我认为iOS默认使用keychain上的根ca来验证服务器证书,从我读到的信息来看,profiles上导入的证书也在keychain上。因此,我无法理解为什么我导入的自签名证书没有用作根CA

在这一点上,我真的不想通过这样的编码来信任这个自签名证书,或者因为在客户将我们的服务器安装到他们的网络上并且他们可以创建他们自己的自签名证书的情况下,这将不起作用

不知怎的,我并没有从搜索中得到很多关于这个的信息。有人能在这里给我点启示吗?我需要做些什么来调试这个?非常感谢

七月十五日更新:


更多关于这方面的更新。我还尝试使用配置文件在iOS设备上将自签名CA添加到根CA,根据我在6.0 iPad和iPhone上的测试,它也不起作用。所以我不确定这是否只适用于越狱设备。最后,我允许用户将自签名证书导入应用程序。应用程序将加载此类导入的证书,以进行与此类似的证书验证。希望在这种情况下对其他人有所帮助

查看链接到的第一个教程,您应该能够使用该教程或更高级形式的教程,一旦您测试并使其正常工作,那么客户端创建并添加自己的证书所需做的一切就是覆盖/替换应用文件夹中的localhost.cer文件,其中包含文件localhost.cer找到“或您使用的任何名称方案”。有很多方法可以做到这一点,但可以告诉应用程序一个链接,证书在哪里在线下载,一旦下载,然后替换


任何问题我都会尝试进一步帮助,但希望这能帮助您朝正确的方向发展。

谢谢。请记住,自签名证书是由客户生成的,但是应用程序需要众所周知的URL来下载证书。因此,这意味着客户需要将该证书交给我们,以便在该著名网站上发布。我认为目前,这肯定是解决此问题的一种方法,但对于企业部署来说,这并不是一种简单的方法。今天,当我查看Symantec MDM配置指南()时,它还提到“6.5为根CA创建凭据负载”“关于将证书导入iOS根证书存储。所以这意味着它一定在起作用,尽管它对我不起作用。不确定这在iOS 5上是否有效,但在iOS 6上是否有效。对你的问题投了赞成票,希望有人能对此进行更多研究。在我的案例中,我也遇到了同样的问题,证书的“通用名”与我正在使用https的URL的域名不同。。。。修复通用名称解决了这个问题