繁体   English   中英

iOS:我的iPhone应用程序可以访问iPhone设备/设备的信任存储区的受信任CA证书吗?

[英]iOS: Can my iPhone app access trusted CA certificates of the iPhone device / device's trust store?

我的iPhone应用程序想要访问iphone的CA信任库,以验证用于TLS连接的服务器证书。 是否可以访问存储了所有已知的受信任CA证书的设备密钥链/信任存储?

谢谢,bms

=================================

感谢您的回复。 让我提供有关我的设置的详细信息。 我使用openssl创建了服务器证书,该证书已安装在tomcat服务器上的https连接中。 另外,我已经使用自己的CA签署了此服务器证书,并通过Safari(http url)将此CA / Root证书安装到了我的iPhone中。 现在,在我的应用程序中,我想针对安装在iPhone设备配置文件中的CA证书验证服务器证书(由tomcat提供)。

在iOS(编程)中可以进行这种服务器验证吗?

如果服务器证书由公共CA签名,则secTrustEvaluate返回成功的返回码。 但是,对于自定义CA签名的证书,它将返回“ kSecTrustResultRecoverableTrustFailure”。

谢谢,bms

您的问题不够具体。 有一个非常有用的示例,用于访问钥匙串以存储证书:

https://github.com/kuapay/iOS-Certificate--Key--and-Trust-Sample-Project

我认为您必须使用以下功能添加您的证书(cer格式):

SecCertificateRef certificate =  SecCertificateCreateWithData(NULL, (CFDataRef) certificateData);

如果成功,您可以将其设置为网络模块的根证书...

如果您要评估它:

        CFArrayRef rootCerts = (CFArrayRef)[client.additionalRootCertificates allObjects];
        SecTrustResultType result;
        OSStatus returnCode;

        if (rootCerts && CFArrayGetCount(rootCerts)) {
            // this could fail, but the trust evaluation will proceed (it's likely to fail, of course)
            SecTrustSetAnchorCertificates(trust, rootCerts);
        }

        returnCode = SecTrustEvaluate(trust, &result);

        if (returnCode == errSecSuccess) {
            proceed = (result == kSecTrustResultProceed || result == kSecTrustResultConfirm || result == kSecTrustResultUnspecified);
            if (result == kSecTrustResultRecoverableTrustFailure) {
                // TODO: should try to recover here
                // call SecTrustGetCssmResult() for more information about the failure
            }
        }

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM