一、什么是https
https是基于http协议,通过SSL或者TLS保证数据传输的安全;使用数字证书、加密算法和非对称密钥等技术完成数据传输的加密和身份认证;相比较于http,主要是改进了:数据的保密性、数据的完整性以及身份验证。
数据的保密性:https通信过程中的数据均为加密数据,通过第三方手段截获数据包查看到的都是密文;
数据的完整性:由于是通过双方协商好的加密算法进行加解密,因此客户端和服务端之间能轻松的判断数据是否丢失或者被篡改;
身份验证:https支持单向认证和双向认证,单向认证是服务端发送数字证书给客户端进行身份验证;双向认证两端互发证书验证;一般的Web应用采用的是单向认证;
二、https加密原理
在解释https加密前,先简单解释几个词语:对称加密,非对称加密,签名、验签、数字证书。
对称加密:使用一个密钥完成数据的加密和解密,主要优点是速度快;缺点是密钥管理比较麻烦。
非对称加密:使用一对公私钥进行数据的加解密,公钥加密,私钥解密;优点是安全性高,去除密钥协商过程;缺点是速度慢;适合少量数据的加密解密。
签名、验签:同样使用一对公私钥,私钥签名,公钥验签;通过公钥验证签名可以验证签名者的身份;
数字证书:包含签名、公钥、上级颁发者等信息,通过证书可以验证身份;
https通信过程中的数据主要是通过对称加密算法实现对传输数据的加密;因此在发送数据前,客户端和服务端需要协商一个只有两端才知道的对称密钥;https通过数字证书和非对称加密算法实现了对称密钥的安全获取以及两端的身份验证;
如图所示:
第一步:客户端向服务端发起请求
客户端生成随机数R1,并将自己的SSL/TLS版本信息、支持的加密套件等信息以明文数据发送给服务端;
版本信息:支持的最高SSL或TLS协议版本,SSL基本已被弃用;
加密套件:认证算法 Au (身份验证)、密钥交换算法 KeyExchange(密钥协商)、对称加密算法 Enc (信息加密)和信息摘要 Mac(完整性校验);
随机数R1:用于生成会话密钥,会话密钥就是两端进行数据加密的对称密钥;
第二步:服务端返回协商结果和数字证书
服务端生成随机数R2,将协商结果以及数字证书发送给客户端进行验证,并请求客户端的证书(双向认证);协商结果包括选择的协议版本、选择的加密套件和会话秘钥生成算法;
数字证书:用于身份校验和密钥交换;
随机数R2:用于生成会话密钥;
会话秘钥生成算法:随机数生成会话密钥使用的算法;
第三步:客户端验证服务端数字证书
客户端通过服务端证书验证服务端的身份,验证通过后,生成随机数R3,根据会话密钥算法使用随机数R1、R2、R3生成会话秘钥,并将随机数R3使用服务端公钥加密发送给服务端;发送客户端证书给服务端;(双向认证)
验证证书可靠性:通过系统内置的根证书对服务端证书进行验证;
验证证书有效性:包括证书是否吊销、是否到期、域名是否匹配等;
随机数R3:与之前的随机数R1和R2通过会话密钥算法生成会话密钥;
第四步:服务端解密随机数生成会话密钥
服务端验证客户端证书(双向认证);通过私钥解密出随机数R3,根据会话密钥算法使用R1、R2、R3生成会话密钥;
会话密钥:服务端和客户端根据相同的会话密钥算法使用R1、R2、R3生成了一致的会话密钥;
第四步:客户端与服务端进行数据的加密传输
客户端使用会话密钥加密数据发送给服务端,服务端使用相同会话密钥进行解密;
服务端使用会话密钥加密数据发送给客户端,客户端使用相同会话密钥进行解密;