我正在尝试使用 AFNetworking 2.5.4(使用 Comodo 证书)制作固定 SSL。我从服务器获取我的证书 (CER)。
openssl s_client -connect example.com:443 -showcerts
获取第一个 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 之间的输出并将其保存到 example.pem
从 PEM 转换为 CER (DER):
openssl x509 -outform der -in example.pem -out example.cer
然后,我将 example.cer 添加到我的 Xcode 项目并将其添加到“复制捆绑资源”构建阶段。我的 SecurityPolicy 是:
let securityPolicy = AFSecurityPolicy(pinningMode: AFSSLPinningMode.PublicKey)
let certificatePath = NSBundle.mainBundle().pathForResource("example", ofType: "cer")!
let certificateData = NSData(contentsOfFile: certificatePath)!
securityPolicy.pinnedCertificates = [certificateData];
securityPolicy.validatesDomainName = true
securityPolicy.allowInvalidCertificates = false
securityPolicy.validatesCertificateChain = false
manager.securityPolicy = securityPolicy
有了这个 SSL Pininning 就可以工作,但我不仅要验证我更改的叶证书
securityPolicy.validatesCertificateChain = true
但是使用该配置会抛出以下错误:
Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)
我读过如果 securityPolicy.validatesCertificateChain = true 我必须输入整个 SSL 证书链,但我不知道如何生成它。
我尝试了以下代码但没有成功(我得到了同样的错误):
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | openssl x509 -outform DER > example.cer
如何获取整个 SSL 证书链以添加到 Xcode?
您还必须将所有中间 CA 证书添加到 securityPolicy.pinnedCertificates 以验证整个链。
我是一名优秀的程序员,十分优秀!