一、HTTPS简介
HTTPS:http+ssl(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
如上图所示 HTTPS 相比 HTTP 多了一层 SSL/TLS
SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。
CA机构:证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。
基本上所有https网站都是向CA中心申请的证书。证书可以使用自己生成,也可以向专门的https证书提供商进行购买。这两种的区别是自己生成的证书是不被浏览器信任的,浏览器获取到之后无法进行验证是否可信,所以就给出不安全的提示,需要点击信任之后才能继续访问;而因为浏览器中预置了一些https证书提供商的证书,在浏览器获取到服务器的https证书进行验证的时候就知道这个https证书是可信的。
二、HTTPS工作流程
流程图(图片来自网络)
2.1 准备工作
向CA机构申请证书。
- 服务器自己生成一对非对称加密的公钥s.pub和私钥s.pri,将公钥发给CA机构申请证书;
- CA机构获取到服务器的私钥s.pub之后,生成公私钥C.pub、c.pri,并使用C.pri对服务器的S.pub签名生成CA证书;
- CA将证书交给服务器;
- 浏览器内置CA根证书CA公钥C.pub。
2.2 工作流程
- 客户端(通常是浏览器)先向服务器发出加密通信的请求;
- 服务器收到请求,然后响应 (server Hello),将证书发送给客户端;
- 客户端收到证书后使用CA机构的内置根证书校验服务端返回的证书是否有效;有效则继续往下执行,无效则HTTPS传输就无法继续。
- 如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。
- 客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
- 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
- 然后服务器将加密后的密文发送给客户端。
- 客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。
总结:
准备工作:完成申请证书等准备工作
第一次:http传输,返回证书
第二次:客户端向服务器发送使用服务器公钥加密的对称私钥给服务端;
第三次:使用客户端生成的对称私钥进行加密传输数据。