简介
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值与其它相关信息生成一段数据,采用协商密钥与算法进行加密,然后发送给服务器用于数据与握手验证。
证书链
证书吊销方式
CRL、OCSP
会话缓存
省去了请求和验证证书的过程,加快建立握手的速度,减少协议带来的性能降低和资源消耗。 会话标识session ID、会话记录session ticket(类似于session与cookie)
重新建连
放弃正在使用的TLS连接,重新进行身份认证和密钥协商的过程,特点是不需要断开当前的数据传输就可以重新身份认证、更新密钥或算法。
服务器重新建连
一般情况是在客户端访问受保护的数据时发生。
客户端重新建连
一般是为了更新通信密钥
性能
- 增加了延时(RTT)
- 非对称加密加解密消耗CPU
优化方式
- CDN提前介入HTTPS。离用户更进
- 会话缓存
- 硬件加速
- 远程解密(术业专攻)
- SPDY/HTTP2