HTTPS的全称:HTTP Secure/ HTTP over SSL / HTTP over TLS SSL: Secure Socket Layer 安全套接字层,也可以支持FTP SMTP等协议 TLS: Transport Layer Security 传输层安全 等价于 SSL其实是一样的,现在改名为TLS HTTPS就是在HTTP之下增加的一个安全层,在HTTP把数据交给TCP之前,先交给TLS,在TLS对数据加密后再交给TCP传输,以及对外面的接收方,TCP拼接完数据之后先交给TLS进行解密,在传给接收HTTP。用于保障HTTP的加密传输
TLS的实现原理:在客户端和服务器之间用非对称加密协商出一套对称密钥(如果完全使用非对称加密会导致网络请求太慢了),每次发送信息之前将内容加密,收到之后解密,达到内容的加密传输。
HTTPS 连接
- 客户端请求建立TSL连接
- 服务器发回证书
- 客户端验证服务器证书
- 客户端信任服务器后,和服务器协商对称密钥(通过非对称加密)
- 使用对称密钥开始通信
捕获一下HTTPS请求,首先查看建立TSL连接,第一步客户端给服务器发送一个字节Client Hello
如下这是捕获的HTTPS连接,可以看到 Client Hello它是一个字节的,包括TLS版本、客户端随机数、可用的加密套件
第二步,服务器会向客户端发送Server Hello
捕获的信息如下:服务器选中的TLS版本,以及服务器选中的加密套件
第三步:服务器将证书发送到客户端,客户端进行验证证书,其实就是把服务器的公钥
发给客户端了,客户端使用公钥进行消息加密。如下图所示:服务器会向客户端发送证书,首先要对签名进行理解,通过私钥对数据的签名是可以通过公钥对签名进行解码拿到数据的,也就是:
- 服务器证书的签名 + 证书签发机构的公钥 = 数据
- 保证证书的安全性电脑和手机内部有根证书,根证书可以无条件的信任,因为它是厂商进行设置的,还要验证服务器证书是否是根证书机构颁发的:证书签发机构的证书的签名 + 根证书机构的公钥 = 数据
- 同时还要判断服务器主机名是否目标的主机名
电脑和手机内部有根证书,根证书可以无条件的信任,因为它是厂商进行设置的
开始运行中输入certmgr.msc,打开证书管理器
来看拦截的HTTPS连接,如下图:有两个证书,上图的DigiCert 是根证书,它是存在操作系统内部的
可以看到根证书的信息
第四步:Per-master secret
使用服务器公钥加密发送的随机数据,通过客户端随机数、服务端随机数、Per-master secret随机数三个算出Master secret
,然后Master secret
算出对称加密的密钥的信息:
- 客户端加密密钥
- 服务端加密密钥
- 客户端MAC secret
- 服务端MAC secret
客户端向服务端发送消息,通过客户端加密密钥加密,然后服务端通过客户端加密密钥解密,对称加密
如下图:客户端将使用加密通信
服务器将使用加密通信
那么整体的HTTPS连接如下:
HTTPS 连接建立过程中,证书的作用在于:让客户端确信和自己通信的对象确实是自己认为的对象。 HTTPS 的连接建立过程的证书验证的这一步:合法性保证证书不是伪造的;Host 一致性保证证书不是狸猫换太子。