HTTPS 之原理
HTTPS
和 HTTP
协议相比提供了
- 数据完整性:内容传输经过完整性校验
- 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
- 身份认证:第三方无法伪造服务端(客户端)身份
原理
HTTPS
在传输数据之前需要客户端与服务端之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL
协议是一套加密传输的协议,使用了非对称加密,对称加密以及 HASH
算法。以浏览器和服务器为例,HTTPS
通信过程如下:
-
浏览器发起往服务器的
443
端口发起请求,请求携带了浏览器支持的加密算法和哈希算法。 -
服务器收到请求,选择浏览器支持的加密算法和哈希算法。
-
服务器下将
CA
证书 返回给浏览器。
采用HTTPS
协议的服务器必须要有自己制作或者CA
证书,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用CA
证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。公钥给别人加密使用,私钥给自己解密使用。 -
浏览器解析证书
- 首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应 的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥。
- 用机构的证书公钥解密得到证书的内容和证书签名,内容包括证书的颁发机构,过期时间等。浏览器会先验证证书签名的合法性,签名通过后,会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的公钥了。
- 如果证书没有问题,那么就生成一个随机数
R
,然后用证书对该随机数进行加密。
-
传送加密信息
这部分传送的是用证书加密后的随机数R
,目的就是让服务器得到这个随机数R
,以后浏览器和服务器的通信就可以通过这个随机数R
来进行加密解密了。 -
服务器解密浏览器传过来的加密信息
服务端用私钥解密后,得到了客户端传过来的随机数R
,然后把内容通过随机数R
进行对称加密。 -
服务器以随机数
R
为密钥把传输内容使用对称加密算法加密并传输给浏览器。 -
浏览器以随机数
R
为密钥使用之前约定好的解密算法获取加密内容。
中间人攻击原理
中间人攻击原理针对SSL的中间人攻击方式主要有两类,分别是SSL劫持攻击和SSL剥离攻击,详细请看中间人攻击原理。
预防中间人攻击
解决办法:
HTTPS
双向验证在客户端中内置服务器公钥,在服务器下将 CA
证书给浏览器的时候返回的公钥,服务端要求客户端发送客户端的证书,客户端会将自己的证书发送至服务端。除了验证公钥的有效性之外,再比对公钥是不是和内置的公钥一样,不一样说明被中间者攻击了,就断开链接不在请求了。