一、生成cer证书
1.使用openssl工具,操作步骤如下(推荐使用):
(1).终端输入openssl进入工具。
(2).`先转p12证书`
pkcs12 -export -out test.p12 -in test.pem -inkey test.key
(3).`转成crt证书`
pkcs12 -in test.p12 -out test.crt -nokeys -clcerts
(4).`转成cer证书`
x509 -inform pem -in test.crt -outform der -out test.cer
2.双击.pem文件然后在电脑钥匙串中找到证书然后直接导出.cer证书。
二、AFNetworking中配置
_sessionManager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:ServerPath]];
// 设置请求的超时时间
_sessionManager.requestSerializer.timeoutInterval = 30.f;
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"cer"];//证书的路径
NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
// 使用证书验证模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// 如果需要验证自建证书(无效证书),需要设置为YES
securityPolicy.allowInvalidCertificates = YES;
// 是否需要验证域名,默认为YES;
securityPolicy.validatesDomainName = validatesDomainName;
securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:cerData, nil];
[_sessionManager setSecurityPolicy:securityPolicy];
三、注意事项
AFHTTPSessionManager注意一定要 initWithBaseURL 添加baseurl,直接[AFHTTPSessionManager manager]会报错:
A security policy configured with `AFSSLPinningModeCertificate` can only be applied on a manager with a secure base URL (i.e. https)。闪退
四、如果前后端都配置好了https,那么ios端需要在info.plist
中配置一下以几项配置:
1.删除以下配置。
NSAllowsArbitraryLoads #如果只是支持https的话把这个配置删除,
#但是如果没有配置好的话就先不要删除否则会崩溃的。