继上篇深入HTTPS系列二(加密&证书)后,
该篇主要讲HTTPS通信过程。
** HTTPS的通信过程**
1、客户端发起HTTPS请求
用户在浏览器里输入一个https网址,然后连接到server的443端口。
2、服务器的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过(即需要自己在网络验证接口写验证代码),才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。
这套数字证书是一对公钥和私钥,即不对称的加密方式。
3、服务器传送证书
服务器接受到请求,向客户端传送证书。这个证书其实就是公钥及数字签名,只是包含了很多信息,如证书的颁发机构,过期时间等等。
4、客户端解析证书
客户端会验证数字签名是否有效(CA证书会客户端内置CA公钥自动验证,自定义证书需要自己代码验证),比如颁发机构,过期时间等等。如果发现异常,则会弹出一个警告框,提示证书存在问题。
如果证书没有问题,那么就产生一个hash值,然后对该hash值用公钥进行加密。
5、服务端解密信息
HTTPS协议继而传送的是用证书加密后的hash值给服务器。服务器通过私钥解密获得hash值。这个hash值就是秘钥。以后客户端和服务端的通信就通过秘钥进行对称加密。现在客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
** HTTPS的优缺点**
总结:
- HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击。
2.当你使用第三方不安全WIFI的时候,也很容易受中间人攻击。 - HTTPS仍是现行架构下最安全的解决方案。
- 申请SSL证书还需要资金的支持。
- HTTPS协议由于需要验证,加密解密数据。会降低机器的性能,相关测试数据表明使用HTTPS协议只有使用HTTP协议传输效率的十分之一。
关于“客户端证书”
前面介绍的过程仅仅使用了“服务端证书”——通过服务端证书来确保服务器不是假冒的。
除了“服务端证书”,在某些场合中还会涉及到“客户端证书”。所谓的“客户端证书”就是用来证明客户端(浏览器端)访问者的身份。
比如在某些金融公司的内网,你的电脑上必须部署“客户端证书”,才能打开重要服务器的页面。
客户端证书的验证类似服务端证书验证,一般大多数场景是不需要验证访问者身份的,毕竟你的产品就是给别人使用的。
此外额外再验证客户端,会使性能进一步下降。
此文到此结束!
请继续关注下文,深入HTTPS系列四(中间人攻击)