加密与认证 - https

1. https 与 http

https (Hyper text transfer protocol over secure socket layer), 带安全套接层(SSL)的 http. 能够建立一个信息安全通道, 保证数据传输安全, 可以通过 CA 证书来查询网站认证后的真实信息.可以理解为: HTTP+SSL/TLS

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

    HTTPS和HTTP的区别主要为以下四点:

一、https协议需要到ca申请证书,一般免费证书很少,需要交费。

二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。


    SSL(Secure Sockets Layer 安全套接层), 及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

    SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

SSL协议提供的服务主要有哪些

1)认证用户和服务器,确保数据发送到正确的客户机和服务器 (冒充风险)

2)加密数据以防止数据中途被窃取 ( 窃听风险)

3)维护数据的完整性,确保数据在传输过程中不被改变 (篡改风险)。

SSL协议的工作流程服务器认证阶段:

1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;

2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;

3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;

4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

用户认证阶段

在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

    SSL证书种类CFCA,GlobalSign,VeriSign ,Geotrust ,Thawte 。

域名型 https 证书(DVSSL):信任等级一般,只需验证网站的真实性便可颁发证书保护网站;

企业型 https 证书(OVSSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;

增强型 https 证书(EVSSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏。

2. 配置证书

2.1 将. cer 证书导入项目;

可以在钥匙串内,找到你导入的证书,单击右键,导出项目,就可以导出.cer文件的证书了

2.2 设置 plist 中 transportSecurity

NSAppTransportSecurity

     

        NSAllowsArbitraryLoads

         

     


2.3 配置 AFN

支持https(校验证书,不可以抓包):

// 1.初始化 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.securityPolicy.SSLPinningMode = AFSSLPinningModeCertificate;

// 2.设置证书模式

NSString * cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];

NSData * cerData = [NSData dataWithContentsOfFile:cerPath];

manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSSet alloc] initWithObjects:cerData, nil]];

// 客户端是否信任非法证书

mgr.securityPolicy.allowInvalidCertificates = YES;

// 是否在证书域字段中验证域名

[mgr.securityPolicy setValidatesDomainName:NO];


支持https(不校验证书,可以抓包查看):

// 1.初始化 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

// 2.设置非校验证书模式 manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; manager.securityPolicy.allowInvalidCertificates = YES;

[manager.securityPolicy setValidatesDomainName:NO];

你可能感兴趣的:(加密与认证 - https)