AFNetworking 受信任证书的 pin 公钥
Posted
技术标签:
【中文标题】AFNetworking 受信任证书的 pin 公钥【英文标题】:AFNetworking pin public key for a trusted certificate 【发布时间】:2014-07-07 16:15:16 【问题描述】:我使用 AFNetworking 2.3.1,我有一个受信任的证书,我想为其固定公钥。
我有 crt
、key
、pfx
文件,所以我想我必须将它们添加到我的包中。
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]
initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation,
id responseObject)
NSLog(@"Success");
failure:^(AFHTTPRequestOperation *operation, NSError *error)
return [self processError:[operation response]];
];
[operation start];
现在如何告诉 AFNetworking 使用AFSSLPinningModePublicKey
模式?
(我没有看到AFHTTPRequestOperation
的setSSLPinningMode
方法)
我如何告诉 AFNetworking 使用添加的密钥?我在文档中找不到任何示例。
【问题讨论】:
【参考方案1】:AFNetworking 有一个 AFSecurityPolicy 对象,它具有安全功能的值,包括 SSL 固定模式。
您可以在 AFHTTPRequestOperation 上设置 securityPolicy:
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];
operation.securityPolicy = securityPolicy;
您的证书必须具有扩展名 cer
而不是 crt
,并且应该是 DER 格式。将其添加到您的捆绑包中。您可以在终端中使用以下命令将其转换为正确的格式:
openssl x509 -in domain.crt -out domain.cer -outform der
您不应该在您的应用程序包中包含密钥,只需要证书。
【讨论】:
我明白了。但是我看到人们告诉我们应该使用公钥,因为证书可以更改...... 通过使用AFSSLPinningModePublicKey
pinning 模式,AFNetworking 将从证书中提取公钥。然后它将这个公钥与服务器发送的证书中的密钥进行比较。这允许您在服务器上生成新证书,并且您的应用的现有版本将继续工作。
明白。我要试试。谢谢
如果无法提取公钥会怎样?那是编码问题吗? @DavidCaunt
在尝试查看固定证书时出现错误:*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: allowedCertificate'
。我用 .cer 文件尝试了所有类型的格式都无济于事......【参考方案2】:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
/**** SSL Pinning ****/
AFSecurityPolicy *securityPolicy = [[self alloc] init];
securityPolicy.SSLPinningMode = AFSSLPinningModePublicKey;
[manager setSecurityPolicy:securityPolicy];
/**** SSL Pinning ****/
[manager GET:WEBSITE_URL parameters:params
success:^(AFHTTPRequestOperation *operation, NSDictionary* responseObject)
//..... beautiful code here
failure:^(AFHTTPRequestOperation *operation, NSError *error)
//..... beautiful code here
];
希望有帮助
查看链接here: 另外,请参考AFNetworking Documents
【讨论】:
谢谢你,这很有帮助。您的链接显示了如何固定证书,但我应该对“固定”公钥做同样的事情吗?以上是关于AFNetworking 受信任证书的 pin 公钥的主要内容,如果未能解决你的问题,请参考以下文章
iOS SSL Pinning 没有使用 AFNetworking 的证书?