今天公司弄到了HTTPS证书 我在工程里配置 试了很多遍都报错
想问问大神错误在哪里
代码如下,以为是网络请求封装的不对,特意写了个简单的
NSDictionary *params = @{
@"mobile" : self.loginName,
@"password" : [RSA rsaPassword:self.password]
};
// 1.获得请求管理者
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
// 2.申明返回的结果是text/html类型
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
// /先导入证书
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"fullway" ofType:@"cer"];//证书的路径
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
// AFSSLPinningModeCertificate 使用证书验证模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
// 如果是需要验证自建证书,需要设置为YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要验证域名,默认为YES;
//假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
//置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是<a href="\"http://www.google.com\"" target="\"_blank\"" onclick="\"return" checkurl(this)\"="" id="\"url_1\"">www.google.com</a>,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
//如置为NO,建议自己添加对应域名的校验逻辑。
securityPolicy.validatesDomainName = NO;
securityPolicy.pinnedCertificates = [NSSet setWithObject:certData];
// 加上这行代码,https ssl 验证。
[mgr setSecurityPolicy:securityPolicy];
// 3.发送POST请求
[mgr POST:[NSString stringWithFormat:@"%@%@",[WDGlobal global].BASE_URL,USER_LOGIN] parameters:params progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"请求成功 ---- %@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"\nerror--------------------->\n%@\n----------------------->>\nerror.code---\n%ld\n----------------------->>\nerror.localizedDescription\n%@",error,error.code,error.localizedDescription);
}];
这里是服务器返回的错误log
error--------------------->
Error Domain=NSURLErrorDomain Code=-1200 "发生了 SSL 错误,无法建立与该服务器的安全连接。" UserInfo={_kCFStreamErrorCodeKey=-9824, NSLocalizedRecoverySuggestion=您仍要连接此服务器吗?, NSUnderlyingError=0x174445580 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9824, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9824}}, NSLocalizedDescription=发生了 SSL 错误,无法建立与该服务器的安全连接。, NSErrorFailingURLKey=https://139.224.186.36:8443/p... NSErrorFailingURLStringKey=https://139.224.186.36:8443/p... _kCFStreamErrorDomainKey=3}
----------------------->>
error.code---
-1200
----------------------->>
error.localizedDescription
发生了 SSL 错误,无法建立与该服务器的安全连接。
安卓的同事可以访问
不知道哪里配置除了问题 一脸萌比
백엔드에서 인증서를 직접 받았나요? 다음 방법을 시도하면 며칠 전에 완료했는데 errorCode가 동일한지 잊어버렸습니다.
AFNetworking은 base64에서 인증서를 처리하지 않기 때문에 백그라운드에서 직접 제공하는 인증서를 사용할 수 없습니다.
openssl s_client -connect www.mywebsite.com:443 </dev/null 2>/dev/null | openssl x509 -outform DER > myWebsite.cer
URL을 자신의 것으로 변경하면 가져오는 .cer 파일이 직접 제공됩니다. AFNetworking에서 사용할 수 있습니다.저도 오늘 이 문제에 직면했습니다. 서버에 구성된 인증서가 잘못된 것으로 나타났습니다. Apple에서는 TLS1.2를 요구하고 서버 구성은 TLS1.0입니다. 큰 구멍