有时候在浏览一些网站的时候,点进去的时候不是直接显示内容,而是弹出来一个警告的界面,告诉你此网站的安全证书有问题,浏览器是建议你不要再继续访问了,当然你也可以选择继续访问。那么,你还敢继续访问一个”不安全“的网站吗?会不会对你造成什么损失?本文从原理的角度来看看这个过程里究竟是发生了什么以及我们如何去选择?
为什么提示证书有问题?
客户端通过浏览器向服务端发起 HTTPS 请求时,被「假基站」转发到了一个「中间人服务器」,于是客户端是和「中间人服务器」完成了 TLS 握手,然后这个「中间人服务器」再与真正的服务端完成 TLS 握手。
具体过程如下:
1、客户端向服务端发起 HTTPS 建立连接请求时,然后被「假基站」转发到了一个「中间人服务器」,接着中间人向服务端发起 HTTPS 建立连接请求,此时客户端与中间人进行 TLS 握手,中间人与服务端进行 TLS 握手;
2、在客户端与中间人进行 TLS 握手过程中,中间人会发送自己的公钥证书给客户端,客户端验证证书的真伪,然后从证书拿到公钥,并生成一个随机数,用公钥加密随机数发送给中间人,中间人使用私钥解密,得到随机数,此时双方都有随机数,然后通过算法生成对称加密密钥(A),后续客户端与中间人通信就用这个对称加密密钥来加密数据了。
3、在中间人与服务端进行 TLS 握手过程中,服务端会发送从 CA 机构签发的公钥证书给中间人,从证书拿到公钥,并生成一个随机数,用公钥加密随机数发送给服务端,服务端使用私钥解密,得到随机数,此时双方都有随机数,然后通过算法生成对称加密密钥(B),后续中间人与服务端通信就用这个对称加密密钥来加密数据了。
4、后续的通信过程中,中间人用对称加密密钥(A)解密客户端的 HTTPS 请求的数据,然后用对称加密密钥(B)加密 HTTPS 请求后,转发给服务端,接着服务端发送 HTTPS 响应数据给中间人,中间人用对称加密密钥(B)解密 HTTPS 响应数据,然后再用对称加密密钥(A)加密后,转发给客户端。
从客户端的角度看,其实并不知道网络中存在中间人服务器这个角色。
那么中间人就可以解开浏览器发起的 HTTPS 请求里的数据,也可以解开服务端响应给浏览器的 HTTPS 响应数据。相当于,中间人能够 “偷看” 浏览器与服务端之间的 HTTPS 请求和响应的数据。
但是要发生这种场景是有前提的,前提是用户点击接受了中间人服务器的证书。
中间人服务器与客户端在 TLS 握手过程中,实际上发送了自己伪造的证书给浏览器,而这个伪造的证书是能被浏览器(客户端)识别出是非法的,于是就会提醒用户该证书存在问题。
证书有问题还能访问吗?
如果用户执意点击「继续浏览此网站」,相当于用户接受了中间人伪造的证书,那么后续整个 HTTPS 通信都能被中间人监听了。
所以,这其实并不能说 HTTPS 不够安全,毕竟浏览器都已经提示证书有问题了,如果用户坚决要访问,那不能怪 HTTPS ,得怪自己手贱。那么问题来了,我还能访问吗?
答案是可以!SSL证书(或者说HTTPS)不是网站访问的必须品,仍然有相当多的网站都没有装SSL。很多高校和政务网站就没有,依然可以很好的访问。只是会提示不安全而已。
为什么好多政务网站以及高校网站没有安装SSL证书开启https?其实有免费专属SSL证书可用
不过为了安全起见,对于陌生的网站,如果显示不安全,还是不要在访问。就算坚持访问,也千万不要输入敏感信息,例如账号、密码等。
HTTPS 一定安全可靠吗?
HTTPS 协议本身到目前为止还是没有任何漏洞的,即使你成功进行中间人攻击,本质上是利用了客户端的漏洞(用户点击继续访问或者被恶意导入伪造的根证书),并不是 HTTPS 不够安全。
如果你的电脑中毒了,被恶意导入了中间人的根证书,那么在验证中间人的证书的时候,由于你操作系统信任了中间人的根证书,那么等同于中间人的证书是合法的。
这种情况下,浏览器是不会弹出证书存在问题的风险提醒的。
这其实也不关 HTTPS 的事情,是你电脑中毒了才导致 HTTPS 数据被中间人劫持的。
如何解决安全证书问题?
那当然是安装正经安全可靠的SSL证书了。
还是选择随大流,开启全站的https吧。提示个不安全,直接让网站的流量收到很大损失!
免费的SSL证书现在市面上品牌有很多。但是付费的和免费的多少在安全上、服务上还是有点差距的。付费SSL证书和免费SSL证书简单对比及个人博客选购SSL建议将其进行了简单的对比。我的观点也很明确,对于企业而言,购买付费的SSL证书是非常有必要的。
我个人还是推荐一款国内公司营销的SSL证书商家——JoySSL,主要是价格比较便宜,有90天免费使用(实际上可以一直免费续签,类似证书Let’s Encrypt吧),付费版也很划算,几十块钱一年,在付费版证书里也已经算非常便宜的了。 JoySSL品牌提供90天免费证书,包括单域名、多域名、通配符等所有适配范围。
注册时输入注册码230912即可获取。
设备完美兼容,兼容99.9%以上浏览器和智能终端设备。根据我的亲测,在主流浏览器上是完美支持的!