我正在尝试使用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设备上的配置文件存在问题。

10-05 18:17