AFNetworking为可信证书提供公钥

时间:2014-07-07 16:15:16

标签: objective-c nsurlconnection afnetworking afnetworking-2

我使用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模式?
(我没有看到setSSLPinningMode

中的AFHTTPRequestOperation方法

如何告诉AFNetworking使用添加的密钥?我在文档中找不到任何示例。

2 个答案:

答案 0 :(得分:13)

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

您不应在应用包中包含密钥,只需要证书。

答案 1 :(得分:4)

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