[英]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.