ios - 在 iOS 中使用 AFNetworking 进行 SSL 固定不起作用

标签 ios iphone ssl app-transport-security certificate-pinning

我正在使用 AFnetworking。我的应用程序网络服务器采用 TLS 1.2。我想将证书固定添加到我的 iOS 应用程序中。我的代码如下:

       AFHTTPSessionManager *manager=[[AFHTTPSessionManager manager] initWithBaseURL:serviceURL];

    NSSet *certificates = [AFSecurityPolicy certificatesInBundle:[NSBundle mainBundle]];
    AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:certificates];
    policy.validatesDomainName = YES;
    policy.allowInvalidCertificates = YES;
    opManager.securityPolicy = policy;

我的包中有有效的服务器证书,并且使用此代码,网络服务工作正常。但是,当我使用不正确的示例证书尝试相同的操作时,网络服务也可以正常工作。我什至尝试在捆绑中没有证书的情况下,网络服务也工作正常。有人可以解释一下吗? AppTransportSecurity 在我的应用程序中已打开。

    <key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
</dict>

最佳答案

我找到了解决这个问题的方法。请在下面找到我用来替换现有代码的代码。它正在按预期工作。

        AFHTTPSessionManager *opManager=[[AFHTTPSessionManager manager] initWithBaseURL:baseUrl];
    opManager.requestSerializer = [AFHTTPRequestSerializer serializer];
    opManager.responseSerializer = [AFHTTPResponseSerializer serializer];

    // SSL Pinning
    NSString *certificatePath = [[NSBundle mainBundle] pathForResource:@"xxxxxxxx.com" ofType:@"der"];
    NSData *certificateData = [NSData dataWithContentsOfFile:certificatePath];

    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    [securityPolicy setAllowInvalidCertificates:YES];
    [securityPolicy setPinnedCertificates:@[certificateData]];
    [opManager setSecurityPolicy:securityPolicy];

关于ios - 在 iOS 中使用 AFNetworking 进行 SSL 固定不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47077308/

相关文章:

iphone - MPMoviePlayerViewController 进入后台时变黑

javascript - 在 Javascript 中检测特定的 iPhone/iPod touch 型号

wcf - 客户端计算机上的 SSL 服务器端证书?

ios - 如何根据NSDate计算年龄

ios - Swift - 颜色填充动画

ios - IOS 上的 Hpple XPath 查询问题

iphone - NSURL 到 NSData(Cocoa 错误 256。)

ssl - Google Cloud Load Balancer 使用 Kubernetes Ingress 强制执行 HTTP,而不是 HTTPS

java - 在 Spring Boot 中使用 SSL 身份验证的 SOAP Web 服务

ios - 无法在我的 iOS 设备上播放 firebase 视频