在 iOS 中使用 AFNetworking 的 SSL Pinning 不起作用
SSL Pinning using AFNetworking in iOS not working
我正在使用 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;
我的捆绑包中有我的有效服务器证书,使用此代码 web 服务工作正常。但是当我尝试使用不正确的示例证书进行相同操作时,那个时候 web 服务也在工作。我什至尝试过捆绑包中没有证书,那一次,网络服务也运行良好。有人可以解释一下吗?
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];
我正在使用 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;
我的捆绑包中有我的有效服务器证书,使用此代码 web 服务工作正常。但是当我尝试使用不正确的示例证书进行相同操作时,那个时候 web 服务也在工作。我什至尝试过捆绑包中没有证书,那一次,网络服务也运行良好。有人可以解释一下吗? 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];