HTTPS是什么?
HTTPS在原来的HTTP协议的基础上多了一个安全嵌套层,简单的说就是在TCP三次握手完成之后会多加一个SSL/TLS的握手(SSL和TLS可以被认为是同一个东西),来验明网站的正身并保证后续报文传输的安全。接下来会展开讲一讲HTTPS是如何保证这2点的。
CA证书保证网站的可信
黑客可以用DNS被劫持/污染等手段,让我们通过域名的访问到他们伪造的网站,从而窃取用户的重要信息。对于这种伪造网站,我们无法完全通过技术手段来排查,于是引进了有公信力的第三方。域名真实的拥有者通过像第三方申请,由第三方对身份进行验证后颁发证书(就像我们通过公证处公证后获得了公证文件),客户端通过认证证书就能验证网站是否被伪造。
这里可能会产生一个问题,黑客如果伪造一个证书是不是就可以骗过客户端了?实际上只有通过WebTrust认证的机构颁发的证书才会进入到主流客户端的受信任证书列表,简单的说就是客户端维护着一份受信任的颁发机构,这些机构是通过了WebTrust的认证,之后这些机构颁发的证书才被客户端所信任。所以自签名的证书是不会受到保护的!
报文传输加密的安全
再保证网站本身不会被伪造后,还需要保证报文在传输过程中的安全。黑客可以通过中间代理等手段截取客户端与服务端之间的通信数据.
如何保证通信数据的安全呢?当然是加密啦!
HTTPS协议在这里使用了两种加密方式:
1. 非对称加密
优点:
安全性高,加密算法复杂
缺点:
性能稍差(相对于对称加密),公钥容易被黑客利用
2. 对称加密
优点:
算法公开、加密速度快、加密效率高
缺点:
需要妥善管理秘钥
首先我们要知道,签发的CA证书里包含公钥,而私钥是需要自己保管的不能公开,当客户端第一次访问服务端时,服务端会把证书返回给客户端,客户端验证过证书后,会用公钥将对称算法的秘钥进行加密,再发送给服务端,服务端用私钥解密后拿到对称算法的秘钥,这样后续便可以使用对称加密算法进行通讯了,详细过程如下图
可以再聊聊,为什么这里要用两种加密方式?
只用对称加密肯定是会被man-in-middle攻击的,那只用非对称加密可以吗?
答案是不可以
- 非对称加密的公钥是公开的,攻击者可以拿到公钥解密出服务端返回的报文
- 非对称加密的性能不如对称加密,拖累了传输速度
这个和三次握手什么关系?