1 定义
HTTPS是HTTP over SSL的简称,即工作在SSL上的HTTP。也就是加密通信的HTTP。
2 工作原理
HTTPS在通信过程中使用的是对称加密,当然,它的密钥是无法直接获取的,因为它的密钥是通过非对称加密进行传输的,中间还有很多复杂的过程,保证密钥是绝对安全的。那么,问题来了,非对称加密那么安全,为什么要多此一举来使用这种复杂的对称加密方式呢,原因很简单。非对称加密的通信过程会影响网络通信的性能。
3 连接建立的过程
1 客户端发送Client Hello,同时发送的,还有两个东西,一个是客户端的随机数,一个是客户端支持的 TLS版本、对称加密算法、非对称加密算法、hash算法。其中,TLS版本,加密算法等,可能不止一个,让服务端选择适合自己的。
2 服务端发送Server Hello,同时,自己也会发送一个随机数给客户端,这个随机数叫服务端的随机数。另外,会从客户端发送的TSL版本,加密算法、hash算法中选定一个。此时,双方确立了TLS的版本,对称加密的算法、非对称加密的算法、hash算法。服务端有两个随机数,服务端自己生成的随机数和客户端发送过来的随机数。客户端也有这两个随机数。
3 服务端发送公钥,这个公钥是为了加密非对称加密的密钥的。但是,这个服务器是需要做验证的,证明你就是我想访问的服务器。所以,服务器发送的不是公钥,而是证书,这个证书包含服务器公钥、服务器地址、证书签名等。
4 为了证明服务器证书是真实有效的,需要用证书机构的公钥来对它进行签名,那么证书机构如何证明自己是真实的呢,证书机构是由根证书机构签的。根证书机构是可以找到可靠来源的,这个可靠来源就是操作系统。任何一个操作系统,包括ios android windows等,都有一个根证书机构的列表。根证书是被操作系统研发方认证的,所以是绝对安全的。
5 客户端生成一个随机数,叫pre-master secret。这个随机数会通过非对称加密发送给服务端,公钥就是之前服务端发送过来的,然后服务端自己有私钥,所以这个随机数理论上是获取不到的。像之前的客户端随机数和服务端随机数都是明文的,而这个是非对称加密后发送的。这个也是HTTPS中唯一的一次非对称加密。
6 这个时候,双方就可以生成对称密钥了。这三个随机数会通过一个算法,得出一个新的master secret。但是这个master secret并不是密钥,密钥是有好几个东西的。它们分别是客户端加密密钥,服务端加密密钥,客户端MAC Secret,服务端MAC Secret。这个MAC Secret就是一个HMAC的Secret。类似于普通的hash算法。但是比hash更安全,因为它会先对原数据做一些操作,再进行hash算法。通过加密密钥和这个MAC Secret,就可以实现数据的加密和验证身份。
7 双方进行一次加密验证,看下这个加密算法能否正常使用。首先,客户端说它要开始加密通信了,然后,客户端把前面的全部信息使用密钥加密和使用HMAC签名,并且发送到服务器端。服务端验证能否解密,能否进行身份验证。如果都可以,服务端就可以对客户端足够信任。
8 客户端验证完后,开始到服务端验证。服务端也是先发送,我要开始加密了。然后,把前面的信息也用服务端的对称密钥进行加密,使用服务端的HMAC进行签名,发送到客户端。客户端能够解密并且验证身份。客户端就可以对服务端也有足够的信任。此时,双方的验证完全结束。
9 最后一步,它们就可以开始使用HTTPS进行加密通信了。