关于https,一些常用第三方的配置

对于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

  • 双向认证
    需要是服务端需要客户端提供身份认证,只能是服务端允许的客户能去访问,安全性相对于要高一些,开发成本也就高了

目前我们公司是单向认证的,只研究了一下单向认证,双向认证的用到的时候再研究哈,不过应该不难

你可能感兴趣的:(关于https,一些常用第三方的配置)