基础概念
HTTPS 全称 HTTP over SSL / TLS,
本质还是用http通信,但是用SSL / TLS层进行数据加密。
不加https的后果
容易被窃听(因为通信明文传送)
传输的数据容易被篡改(比如早期的网络欠费通知)
假冒网站
SEO容易受损
加密协议SSL / TLS
TLS:全称Transport Layer Security
SSL:全称Secure Socket Layers
它们都是加密协议,可以在英特网安全传输数据。
TLS是SSL的升级版本,具体可以看下它们的发布时间,有个概念即可。
https如何加密网站传输
对称加密(一把钥匙)
加密套件列表(浏览器支持加密方法的列表)
下面是浏览器与服务端一个基础的安全协商过程:
之后通信就是用随机数混合成秘钥,来进行双方的通信。也就是对称加密。
但是因为握手的时候,全都是明文的,秘钥也就可以在攻击者那里合成,所以容易被破解。
非对称加密(两把钥匙,公钥和私钥)
一把钥匙加密,另一把钥匙可以打开。但不可以用同一把钥匙对数据进行加密和解密。
所以可以把公钥给别人,自己保留私钥。
浏览器可以用公钥对数据进行加密,再发送给服务端,服务器可以用私钥打开。
这样即使攻击者拿到了公钥和数据,也无法进行解密。
它们的流程是这样的:
但非对称加密也不是那么完美,这样虽然对浏览器传过来的数据做了加密,但是服务端返回的数据还是容易泄露,因为公钥都可以获取到,则都可以看到服务端返回的数据。另外非对称加密性能不行,效率比较低。
混合模式
为了解决上面的问题,有人就想出可以把上面的两种方法结合使用,用非对称加密传输对称加密的秘钥,这样就有了混合模式。
流程是这样的:
(最后是通过三个随机数公共创建一个新的秘钥来进行通信)
看似完美,但是依然无法阻止中间人攻击:
这个时候就需要找个第三方,证明服务端是好的服务端,这个第三方就是CA(全称:Certificate Authority)
数字证书
证书包含,服务端身份以及服务端的公钥。
这样就可以在混合加密的基础上,服务端通过证书来自证清白。
流程是这样的:
证书申请的过程
服务器生成公钥和私钥,然后给CA机构提供公钥、相关信息(公司及站点信息),或许还要一些money,然后CA机构会审核,通过后会颁发证书。
证书会包含:CA信息,CA签名,有效期,公钥,组织信息等信息,证书内容是明文的。
CA签名:用来验证证书有效性,哈希函数计算服务端的明文信息,得出信息摘要,然后用CA的私钥,对信息进行加密,加密后就变成了数字签名。
浏览器上验证CA证书的过程:
第一步,读取证书信息,然后用CA机构的哈希函数,计算得出信息摘要1,
第二步,读取数字签名,然后用内置的CA公钥,计算得出信息摘要2,
比对两份摘要,如果一致则证明证书有效。