1

我正在尝试使用 AFNetworking 3 库实现 SSL 固定。

我浏览了 AFSecurityPolicy 的文档,但没有使用AFSSLPinningModePublicKey获得有关 ssl pinning 的任何信息。这是我正在使用的代码片段

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];

输出 :

在调试模式下运行时,我可以看到从捆绑包中提取的证书,但随后

我收到错误:

错误:错误域=NSURLErrorDomain 代码=-999 “已取消”

调查 :

  1. validateCertificateChain : AFNetworking 版本 3+ 的参数不再存在。这是否意味着我必须固定我的证书链的所有证书?

我可能错误地创建了我的证书 (.cer)。你能告诉我如何从 url 中提取 .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
4

1 回答 1

0

我们能够解决这个问题。我正在制作安全政策的双重实例。这就是一个实例覆盖另一个实例的原因。

请注意:AFNetworking 3.0 可用于固定中间证书。它不会验证整个链条。:)

于 2018-04-09T22:16:26.873 回答