AFNetworking 受信任证书的 pin 公钥

Posted

技术标签:

【中文标题】AFNetworking 受信任证书的 pin 公钥【英文标题】:AFNetworking pin public key for a trusted certificate 【发布时间】:2014-07-07 16:15:16 【问题描述】:

我使用 AFNetworking 2.3.1,我有一个受信任的证书,我想为其固定公钥。

我有 crtkeypfx 文件,所以我想我必须将它们添加到我的包中。

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 模式? (我没有看到AFHTTPRequestOperationsetSSLPinningMode 方法)

我如何告诉 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 公钥的主要内容,如果未能解决你的问题,请参考以下文章

Xcode SSL pinning 信任锚证书

iOS SSL Pinning 没有使用 AFNetworking 的证书?

AFNetworking2.0源码解析<三>

如何允许用户在 iOS 中使用 AFNetworking 信任和固定自签名 SSL 证书

ios 如何去掉 ssl pinning

如何将SSL证书设置成受信任的证书