我正在尝试使用 AFNetworking 3 库实现 SSL 固定。
我浏览了AFSecurityPolicy的文档,但没有通过使用AFSSLPinningModePublicKey获得有关SSL固定的任何信息。这是我正在使用的代码片段
AFHTTPSessionManager * manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:url]];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];
sessionManager.securityPolicy = securityPolicy;
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"my-certificate" ofType:@"cer"];
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
sessionManager.securityPolicy.pinnedCertificates = @[certData];
输出:
在调试模式下运行时,我可以看到从捆绑包中获取的证书,但是随后
我收到错误为:
错误:错误域 = NSURLError域代码=-999"已取消">
调查:
- 验证证书链:参数不再存在 版本 3+ 在 AFNetworking .这是否意味着我将不得不 固定证书链的所有证书?
我可能错误地创建了我的证书(.cer)。你能告诉我如何从网址中提取.cer吗?
我在Mac终端中使用了以下命令
echo "Get HTTP/1.0" | openssl s_client -showcerts -connect www.xxxx.xx:443 > mycertificateinpem.pem
openssl x509 -inform PEM -in mycertificateinpem.pem -outform DER -out my-certificate.cer
我们能够解决问题。我正在制作双重安全政策实例.这就是一个实例覆盖另一个实例的原因。
请注意:AFNetwork 3.0 可用于固定中间证书。它不验证整个链。:)