简介
1、HTTPS是使用TLS/SSL加密的HTTP协议。
2、HTTP采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险。而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能。
3、TLS的基本工作方式是,客户端使用非对称加密与服务器通信,实现身份验证并协商对称密钥,之后采用协商密钥对信息以及信息摘要进行对称加密。
4、解决身份验证问题的关键是确保获取的服务器公钥是合法的,能够验证服务器的身份信息,为此需要引入权威的第三方机构CA。CA负责核实公钥的拥有者的信息,并颁发认证"证书",同时能够为使用者提供证书验证服务,即PKI体系。
5、CA负责对关键信息利用私钥进行"签名",公开对应的公钥,客户端可以利用公钥(CA的公钥)验证签名。
6、验证证书的过程:客户端C向服务器S发出请求时,S返回证书文件。客户端C读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法。其中还需验证证书相关的域名信息、有效时间等信息。
7、签名:使用散列函数计算公开的明文信息的信息摘要,然后,采用CA的私钥对信息摘要进行加密。
HTTPS握手过程
证书校验步骤:
证书链的可信性(如上所述)、证书是否吊销、有效期、域名校验。
计算协商密钥需要的信息:两个明文随机数random_C和random_S与自己计算产生的Pre-master,计算得到协商密钥
enc_key=Fuc(random_C, random_S, Pre-Master)。
change_cipher_spec:客户端通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信。
encrypted_handshake_message:结合之前所有通信参数的hash值与其它相关信息生成一段数据,采用协商密钥与算法进行加密,然后发送给服务器用于数据与握手验证。
另一种解答
- 客户端发送一个ClientHello消息,消息里面会生成一个随机数,同时告诉服务端自己支持的SSL版本,加密算法等信息。
- 服务端接收到客户端的ClientHello消息之后也会生成一个随机数,然后选择SSL版本,加密算法等参数,把这些内容放到ServerHello消息里面发送给客户端。
- 服务端接着把自己的证书发送给客户端,证书里面包括服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容,这个阶段叫做Certificate。
- ServerKeyExchange是一个可选的过程,如果在ServerHello的时候服务端选择了RSA加密作为密钥交换的话就没有这个过程,如果服务端选择的密钥的交换方式是DHE或者ECDHE等双方共同计算出来的密钥的话(而不是通过RSA加密后传输的话),那么这个阶段就是双方进行协商的阶段,服务端会提供他希望使用的p、g参数以及使用服务端自己计算出来的Ys,当然自己会留一个私有的参数(这几个参数的意思参考前面说的Diffie-Hellman)。
- ServerHelloDone表示服务端完成了它这一块的协商过程。
- ClientKeyExchange这个阶段用户会首先认证服务端的证书是否合法(使用CA的公钥对之前CA颁发的数字签名进行验证),验证通过之后就去计算Pre-Master Key,然后使用服务端证书对Pre-Master Key加密后传输给服务端(如果是DH的话就是协商的p、g以及客户端自己计算出来的Yc,并且根据之前服务端提供的Ys数据计算出Pre-Master Key);服务端收到这个内容后使用自己的私钥进行解密得到Pre-Master Key(如果是DH的话就是通过p、g、Yc以及自己的一个随机数计算出Pre-MasterKey),最终双方都能拿到或者计算出Pre-Master Key,通过Pre-Master Key我们会生成MasterKey,最终在生成对称密钥。
- ChangeCipherSpec阶段表示发送完密钥信息之后客户端就进入了加密模式并且通知服务端我已经进入加密模式了
- 客户端然后会对client finished加密后发送给服务端。
- 服务端收到加密后的client finished消息之后使用之前计算出来的MasterKey进行解密,如果解密成功那么同样也进入ChangeCipherSpec阶段,通知客户端我也进入加密模式了
- 然后服务端也会发送一个server finished消息,如果客户端能够成功解密,表示双方的密钥协商已经全部完成,之后就可以将数据使用对称密钥加密后进行传输了。特别注意的一点是在Finished消息中会带上一个verify_data字段,这个字段会对整个Handshake进行hash,为的是防止我们在协商过程中的数据被人篡改了
证书链
证书吊销方式
CRL、OCSP
会话缓存
省去了请求和验证证书的过程,加快建立握手的速度,减少协议带来的性能降低和资源消耗。
会话标识session ID、会话记录session ticket(类似于session与cookie)
重新建连
放弃正在使用的TLS连接,重新进行身份认证和密钥协商的过程,特点是不需要断开当前的数据传输就可以重新身份认证、更新密钥或算法。
服务器重新建连
一般情况是在客户端访问受保护的数据时发生。
客户端重新建连
一般是为了更新通信密钥
性能
1、增加了延时(RTT)
2、非对称加密加解密消耗CPU
优化方式
1、CDN提前介入HTTPS。离用户更进
2、会话缓存
3、硬件加速
4、远程解密(术业专攻)
5、SPDY/HTTP2