定义:
在HTTP之下增加一个安全层,用于保障HTTP的加密传输。通常使用TLS协议作为HTTP的安全层。
TLS层工作原理:
在客户端和服务器之间用非对称加密协商出一套对称密钥,完成握手。之后的每次通信都使用该对称密钥对消息进行加密。PS:不直接使用非对称加密是因为非对称加密影响性能。所以在握手阶段使用非对称加密可以保证密钥在不可信网络上的安全性,这样做能同时兼备安全和性能。
HTTPS连接:
大致流程如图1.1:
建立TLS连接:
1、TLS运行在TCP基础之上,这意味着我们必须首先完成TCP 三次握手“ ,这需要一个完整的来回交互(RTT)。
2、TCP连接建立后,客户端发送Client Hello(单字节随机数)并且携带一些协商信息,如TLS协议版本,支持的密码套件的列表,和其他TLS选项。
3、服务器发送Server Hello(单字节随机数)并且挑选TLS协议版本,在加密套件列表中挑选一个密码套件,附带自己的证书,并将响应返回给客户端。可选的,服务器也可以发送对客户端的证书认证请求和其他TLS扩展参数。
4、假设双方协商好一个共同的TLS版本和加密算法,客户端使用服务器提供的证书,生成新的对称密钥,并用服务器的公钥进行加密,并告诉服务器切换到加密通信流程。到现在为止,所有被交换的数据都是以明文方式传输,除了对称密钥外,它采用的是服务器端的公钥加密。ps:对称密钥由客户端随机数+服务端随机数+Pre-master secret 结合生成。Pre-master secret由服务器证书里面的服务器公钥加密发送给服务器。
5、客户端发送“将要使用加密通信的消息”,并却发送加密后的“Finished”
6、服务器用自己的私钥解密客户端发过来的对称密钥,并通过验证MAC检查消息的完整性,并返回给客户端一个加密的“Finished”的消息。
7、客户端采用对称密钥解密消息,并验证MAC,如果一切OK,加密隧道就建立好了。应用程序数据就可以发送了。
证书颁发与撤销
身份验证是建立每个TLS连接一个重要的组成部分。毕竟,TLS可以与任何端通过一个加密的隧道进行通信,包括攻击者,除非我们可以确信和我们通信的对方是可信任的,不然所有的加密工作都是无效的。如何证明某个主机是可信的呢?这就需要用证书,只有具有合法证书的主机才是可信。证书的来源有哪些呢?
证书颁发机构 :证书颁发机构(CA)是一个值得信赖的第三方的机构(所有者),其证书值得信任。
浏览器和操作系统 :每个操作系统和大多数浏览器都包含了知名的证书颁发机构的列表。因此,你也可以信任这个软件的供应商,提供并维护的信任列表。
证书的验证过程:
服务器发送自身的证书,并且发送一个该证书的签名(确保证书内容不被伪造)、同时附带一个该证书的签发机构的证书(确保自身的证书合法性)和签发机构的证书的签名(确保证书内容不被伪造)。客户端本地查找根证书,完成验证。