HTTPS
和 HTTP
协议相比提供了
HTTPS
在传输数据之前需要客户端与服务端之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL
协议是一套加密传输的协议,使用了非对称加密,对称加密以及 HASH
算法。以浏览器和服务器为例,HTTPS
通信过程如下:
image
443
端口发起请求,请求携带了浏览器支持的加密算法和哈希算法。CA
证书 返回给浏览器。
采用 HTTPS
协议的服务器必须要有自己制作或者 CA
证书,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用 CA
证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。公钥给别人加密使用,私钥给自己解密使用。R
,然后用证书对该随机数进行加密。R
,目的就是让服务器得到这个随机数 R
,以后浏览器和服务器的通信就可以通过这个随机数 R
来进行加密解密了。R
,然后把内容通过随机数 R
进行对称加密。R
为密钥把传输内容使用对称加密算法加密并传输给浏览器。R
为密钥使用之前约定好的解密算法获取加密内容。中间人攻击原理
针对SSL的中间人攻击方式主要有两类,分别是SSL劫持攻击和SSL剥离攻击,详细请看中间人攻击原理。
解决办法:
HTTPS
双向验证在客户端中内置服务器公钥,在服务器下将 CA
证书给浏览器的时候返回的公钥,服务端要求客户端发送客户端的证书,客户端会将自己的证书发送至服务端。除了验证公钥的有效性之外,再比对公钥是不是和内置的公钥一样,不一样说明被中间者攻击了,就断开链接不在请求了。