https
是在http
的基础上添加了SSL/TLS
,相比较http
来说更加安全可靠。这里详细记录一下https
的具体过程。
相关概念
对称加密与非对称
- 对称加密 指加密解密都使用一个秘钥。 优点是简单,速度快。缺点就是密钥的管理与分配,也就是说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。
- 非对称加密 指加密使用一个密钥,解密使用另一个密钥。这一对密钥被称为“公钥”和“私钥”。别人用公钥对要发给自己的信息进行加密,然后自己使用私钥进行解密。 非对称加密的优点是只需要把公钥告诉别人,私钥保存在自己这里,就没有了被黑客拦截的风险。而缺点就是解密的运算复杂,时间长。
SSL/TLS
SSL(Secure Socket Layer, 安全套接层)和 TLS(Transport Layer Security, 传输层安全协议)可以理解为同一个协议的不同阶段,都是为了安全传输信息而对信息进行加密。其基本过程是这样的:
1. 客户端向服务器端索要并验证公钥
2. 双方协商生成“对话秘钥”
3. 双方采用“对话秘钥”进行加密通信。
HTTPS
整个过程如下:
- 客户端发起https请求
如果用户直接输入了
https:www.baidu.com
,就会直接访问服务器的443端口。 如果用户没有输入https
,但是服务器设置了使用https
协议进行通信,服务器会自动重定向到443端口,从而使用https
协议。如果客户端不支持使用https
,最终还是会使用http
协议来通信。 在这个过程中,客户端会生成一个随机数1,并将其发送给服务器。 - 服务器返回数字证书。
服务器接收到
随机数1
之后,就把他保存下来,并生成一个随机数2
。连同数字证书,一同发送回客户端。 这里的数字证书是服务器身份的验证信息,用来表明服务器的身份。证书里面包含了很多东西,其中有一个公钥,也就是用了加密信息的密钥。 - 客户端验证数字证书
客户端收到服务器发送的数字证书后,会对证书进行验证。
如果证书有问题,客户端就会显示一个警告,由用户选择是否还要继续通信。
如果证书没有问题,客户端就会从证书中取出服务器的公钥,然后生成一个
随机数3
,并使用公钥对其加密。 - 客户端传送随机数
客户端将使用公钥加密后的
随机数3
发送给服务器,同时,告诉服务器,接下来的通信就使用约定好的加密方法。 - 服务器得到了加密后的
随机数3
,然后使用自己保存的私钥对其解密,就得到了这个随机数3
。 此时,客户端和服务器端都保存了3个随机数。双方会使用这3个随机数,生成一个相同的密钥。 然后,双方就开始使用这个密钥对传输的信息进行加密。
参考自这里