我正在尝试使用TLS 1.2将我的应用程序连接到服务器。服务器使用的证书已由设备上已安装的自签名CA证书签名(我通过电子邮件将CA证书通过电子邮件发送给自己,点击了它。现在它显示在“设置”->“常规”->“配置文件”下)。这以前在我的应用程序中有效,但是我们更改了正在使用的CA证书,因此我也更新了服务器的证书。现在我遇到SSL失败。
我看到的错误是我在客户端上对errSSLXCertChainInvalid
的调用中的SSLHandshake
。据我所知,服务器证书应该是有效的。 openssl verify -CAfile ca-cert.pem server-cert.pem
返回OK
,并且ca-cert.pem是我在设备上安装的同一CA证书。
有任何想法吗?谢谢!
最佳答案
苹果的documentation中有一些有关此错误的信息:
errSSLXCertChainInvalid
—对等方具有无效的证书链;例如,链中的签名验证失败,或者未找到证书。
如果您使用SSLSetPeerDomainName
:
您可以使用此功能来验证对等方证书中的通用名称字段。如果调用此函数,并且证书中的公用名与peerName参数中指定的值不匹配,则握手失败并返回errSSLXCertChainInvalid。
建议您卸载设备配置配置文件,然后创建一个新的配置文件。
同样,最好检查一下是否可以从Web浏览器访问服务器而不会出现错误。这将显示证书是否存在问题,或者仅是iOS设备上的配置文件存在问题。