HTTPS 通信过程
与 SSL 组合应用的 HTTP 被称为 HTTPS 或 HTTP over SSL。HTTPS 用来解决 HTTP 不平安传输的问题,HTTP 之所以不平安,是因为:
1. 传输的内容都是明文,可能会被窃听;2. 不会验证通信单方的身份;3. 传输内容可能被篡改。
SSL 提供了加密、认证以及摘要的性能,应用 HTTPS 能够无效避免以上问题:
1. HTTPS 会对传输的内容进行加密,加密采纳的是对称加密的形式,但对称加密的密钥应用了服务器证书进行了非对称加密;2. HTTPS 能够在通信前查明对方的证书,从而确认对方的身份;3. HTTPS 提供了证书验证性能,确保证书来自于指标服务器且未被篡改。
HTTPS 握手
握手过程如下:
-
客户端与服务器协商 SSL 的版本和加密组件(加密算法、密钥长度);
- 客户端发送 Client Hello 报文,报文中蕴含客户端反对的 SSL 版本及加密组件;
- 服务端返回 Server Hello 报文,报文中蕴含服务器反对的 SSL 版本及加密组件;
- Client Hello 和 Server Hello 报文中还别离蕴含客户端 random 和服务器 random(通信单方各自生成的随机数)。
-
服务端发送 Certificate 报文,报文中蕴含服务器证书,证书中又蕴含了服务器公钥;
- 客户端进行证书验证,验证通过后生成一个随机数 pre-master secret,并应用客户端 random、服务器 random 以及 pre-master secret 生成 master secret,master secret 为会话密钥,之后的数据传输应用会话密钥进行加密 / 解密。
- 服务端发送 Server Hello Done 报文,告诉客户端最后阶段的 SSL 握手协商局部完结;
-
客户端发送 Client Key Exchange 报文进行回应,报文中蕴含应用了服务器公钥进行加密的 pre-master secret;
- 服务器收到报文后生成 master secret(生成形式与客户端雷同)。
- 客户端发送 Change Cipher Spec 报文,提醒服务器之后的通信采纳 pre-master secret 密钥加密;
- 客户端发送 Finished 报文,该报文蕴含连贯至今全副报文的整体校验值(采纳 pre-master secret 加密),若服务器可能正确解密该报文,则此次握手协商胜利;
- 服务器发送 Change Cipher Spec 报文;
- 服务器发送 Finished 报文;
- SSL 连贯建设实现,客户端和服务端应用会话密钥(master secret)对通信的数据进行加密 / 解密。
证书验证
证书由受信赖的第三方认证机构颁发,且少数浏览器零碎已植入了认证机构的机构公钥。
证书(局部)内容包含:
1. 证书的无效工夫、域名;2. 服务器公钥;3. 指纹算法(哈希算法,用来生成指纹,指纹是一个哈希值);4. 数字签名(服务器私钥对指纹进行加密失去数字签名)。
证书颁发过程:
- 服务器向认证机构申请证书;
- 认证机构应用指纹算法对证书(局部)内容进行哈希运算失去指纹,并应用机构私钥对指纹进行加密失去数字签名,而后将该签名和服务器公钥存入证书,并向服务器颁发证书。
浏览器证书验证过程:
- 首先验证证书是否过期以及证书的域名是否与申请的域名雷同,不雷同则验证不通过;
- 获取证书的颁发机构,而后从浏览器零碎中查问该机构的机构公钥;
- 应用机构公钥解密证书上的数字签名,失去一个哈希值 H1;
- 浏览器应用指纹算法对证书(局部)内容进行哈希运算,失去另一个哈希值 H2;
- 比拟 H1 和 H2 是否雷同,不雷同阐明证书被篡改过。
欢送批评指正!!!