网址有个https前缀为什么会让你更安全

老婆上网剁手发现,她常去的那些猫狗的网站基本都是全站https的。最近她问我为什么有个https会让她浏览网站的行为更安全,作为好男人的我必须得挖压箱底给她这类型的小白解答一下。

在正式开始解释之前,必须了解并接受一个前提:计算机安全是一个相对的概念,它的存在基于信任,即绝对的安全是一个伪命题。(毕竟计算机无法模拟一切)

其次,本文将要讨论的内容实质上是解释https的两个重要作用:

  1. 如何保证我访问的网站是真正提供服务的网站(如何不被钓鱼)
  2. 如何保证我访问网站时的数据不被其他机器知悉(如何保密)

下面详细普及基础知识,解释这两点内容。

假设你访问一个普通的HTTP网站。你在浏览器输入网址按下回车开始,浏览器就发出了很多请求,并最后把这些请求收到的数据计算并渲染成你看到的网页。

实际上,浏览器最早做的一个动作是根据你输入的网址找到对应的服务器。这个过程浏览器会把网址发给DNS服务器,由它把网址翻译成IP地址。只有这个IP才能让数据送到到网络中的一台机器。

这里有个安全隐患——我们的安全保障依赖于DNS服务器了。我们知道DNS要么由我们自己配置;要么从网络提供商获取。如果这个DNS服务器是坏人提供的,它故意把你的域名解析成某个IP。恭喜,你被钓鱼了。

网址翻译成IP后,浏览器开始给IP对应的目标服务器发出请求。一个请求在电脑看来是一些按某种规律排列的01数据序列。这些数据从浏览器堆积到网卡,从网卡传到你家的路由器,从路由器传经网络提供商的设备,最后达到服务器。同样在一般情况下,服务器计算好结果后会把结果数据通过相反的路径返回给浏览器。

这里涉及到第二个安全问题——所有设备都能知道流经它的数据。那你的银行账号、密码自然也不能例外。

HTTPS使用证书来克服上述这两个问题。提到证书就必须提到一个叫CA机构的证书颁发商。这个CA机构在这里扮演着一个类似公正的裁判者的角色。正规网站向CA机构提供它的身份信息和域名所有证明,用于表示自己合法拥有网址。CA机构于是给网站颁发一个起证明作用的证书。浏览器访问HTTPS的网址时,会下载网站的证书,并使用证书管理器验证证书的合法性。

简单说明验证的过程:要知道CA机构是分级别的,其所颁发的证书也是分级别的。这里有个最重要的根证书颁发商,姑且称为根CA机构。它的证书是预装在系统里的。其它由根CA机构证明身份的证书颁发商称为中级CA机构。如果网站向根CA机构申请了证书,则浏览器直接与系统预装的证书对比即可区分验证是否通过;如果网站向某个合法的CA机构申请了证书,则浏览器拿到网站的证书查阅到它的颁发商的信息,然后获取颁发商的证书继续做同样的验证,直到证明这个证书是从根CA机构间接颁发的。

这个验证证书的过程实际上就是CA机构告诉浏览器正在访问的网站是不是一个正规拥有网址的网站。这样就可以防止钓鱼了。

证书

另外证书里面携带着一把公开的钥匙(公钥),网站也有一把秘密的钥匙(秘钥)。公钥用于加密数据,秘钥用于解密数据。以现在的科学条件可以认为这个加密方法是足够安全的。但是这个加密的过程是非对称的,也就是只有浏览器能加密,网站能解密。

这不能应用于通信内容的加密,因为浏览器也必须要能解密网站返回的数据。于是这里引入了另外一种被证明足够安全的对称加密算法,如DES算法。这类型的算法只要知道密码就能够解密数据。

浏览器访问HTTPS网站的时候,先生成一个临时的密码;然后使用公钥秘钥算法把密码发送给网站。这样网站与浏览器之间相当于约定了密码进行通信。之后,根据对称加密算法,发送方发送的数据使用这个密码进行加密,接收方也用这个密码解密数据。如此达到整个过程的内容都是保密的。

ChardLau

继续阅读此作者的更多文章