服务器配置了ssl证书,iOS客户端要做什么呢?
用AFN啥都不用配也可以正常使用🤔
--------------------------下面是之前写的,划清界限--------------------------
具体操作步骤如下:
1.别方,
2.搞事情。
(1)证书来源有多种,想和服务器端促进一下感情的话可以和服务器端人员要各种证书相关文件,我们的服务器端给出的是pem文件,
这个是可以直接安装的证书。双击之后,效果如下:
(2).钥匙串选项我选择了系统,选择哪个都一样,点击添加。
在钥匙串访问里搜索服务器的域名即可找到刚刚安装的证书,如图:
(3).右键证书导出cer文件
将cer文件拖进(复制)项目中,并在Build Phases->Copy Bundle Resources中添加文件。
(4).在项目添加相应代码
//配置基地址 很关键 没这句啥都干不了
AFHTTPSessionManager *httpManager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:urlStr]];
NSString *cerPath = [[NSBundle mainBundle]pathForResource:@"xxx" ofType:@"cer"];
NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
NSSet *cerSet = [NSSet setWithObjects:cerData, nil];
// AFSSLPinningModeCertificate 使用证书验证模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
// 如果是需要验证自建证书,需要设置为YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要验证域名,默认为YES;
//假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
//置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
//如置为NO,建议自己添加对应域名的校验逻辑。
securityPolicy.validatesDomainName = NO;
securityPolicy.pinnedCertificates = cerSet;
[manager setSecurityPolicy:securityPolicy];
这样就配置完就可以喽。
前面说了证书来源,这里有第二种方式获取证书。
在浏览器中打开服务器地址,如果是safari如图:
打开链接后,点击🔒图标,弹出如图窗口,显示证书->直接拖拽证书图标至桌面即可使用。
chrome获取证书,打开链接->右键网页内容->检查,如图:
检查
security->view certificate->拖拽图标至桌面即可使用。
网友评论