我正在尝试使用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 Pinning可以工作,但我想不仅验证叶证书,所以我进行了更改
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?