对于HTTPS和HTTP的对比,就不再作讲解,因为网上有大量的对比,简单的来说,HTTPS相对于HTTP更安全,更安全的原因就来自于多出来这个S----SSL证书
https有单向认证和双向认证两种方式
- 单向认证
只要求服务端部署了ssl证书就行,任何用户都可以去访问(IP被限制除外等),只是服务端提供了身份认证,客户端不需要进行任何操作,更加灵活,而且这个SSL证书是有过期时间的,如果过期了,只需要服务器端修改证书即可,不会出现突然有一天莫名其妙app打不开了的问题。
在使用AFN请求数据的时候 需要如下配置
//在单向认证时,前端不放证书,服务器去验证
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
// 如果是需要服务端验证证书,需要设置为YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要验证域名,默认为YES;
securityPolicy.validatesDomainName = NO;
//设置验证模式
session.securityPolicy = securityPolicy;
在使用SDWebImage 加载图片的时候 需要加上后面的options:SDWebImageAllowInvalidSSLCertificates]
如下
[image sd_setImageWithURL:[NSURL URLWithString:IMGURL(string)] placeholderImage:nil options:SDWebImageAllowInvalidSSLCertificates];
在单向认证中,这样也能加载出数据跟图片,但是程序在请求数据的时候就会打印
NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
这是因为后台配置SSL没有根证书,如果后台不给你解决这个问题,我们可以这样
在appdeleage.m中添加如下代码
@implementation NSURLRequest(DataController)
- (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
这样就可以了
具体参考苹果官方文档
https://developer.apple.com/library/content/technotes/tn2232/_index.html#//apple_ref/doc/uid/DTS40012884-CH1-SECINTRODUCTION
- 双向认证
需要是服务端需要客户端提供身份认证,只能是服务端允许的客户能去访问,安全性相对于要高一些,开发成本也就高了
目前我们公司是单向认证的,只研究了一下单向认证,双向认证的用到的时候再研究哈,不过应该不难