HTTPS 原理

当我们进行网购的时候,要确保网站的地址栏左侧一定要有个小锁头的标志,这意味着我们是通过 HTTPS 来访问网站的。那么什么是 HTTPS ,它的工作原理是什么呢?

什么是 HTTPS ?

HTTPS 的 S 代表 Secure 也就是安全,使用 HTTPS 意味着服务器和客户端之间通信是加密的。如果我们在网站上提交了信用卡信息,当然是不希望这些信息在网络上以明文的形式传递的。

来看一下例子,看看访问 https://google.com 的基本过程。首先,我在自己浏览器的地址栏中输入网址,然后回车。这样浏览器就会向谷歌服务器发出一个 HTTPS 的请求。服务器收到请求,会返回一个公钥,也就是非对称加密的公钥,和一个 SSL 证书。证书是由第三方的发证机构,也就是 CA 颁发的。当浏览器收到证书和公钥之后,由于浏览器中本来就下载了很多知名 CA 的信息,所以可以去验证证书的有效性,而证书中明确注明了公钥的所有人是谁,所以浏览器可以确定公钥是可信的,是没有被黑客掉包过的。接下来,浏览器会生成一个对称加密的秘钥,并通过服务器的公钥加密后发送给服务器。服务器收到后,用自己的私钥解密信息,就可以拿到对称加密的秘钥了。以后服务器跟浏览器的所有通信内容都会用这个秘钥加密了。

这就是 HTTPS 工作的基本方式了。HTTPS 有意思的地方就是,它同时使用了对称加密和非对称加密两种加密形式。首先通过非对称加密来传递对称加密的秘钥,然后主体的通信内容,其实都是用对称加密的方式来互相传递的。

SSL 证书

HTTPS 有两个作用:加密和认证。加密的作用好理解,就是防止中间人看到浏览器和服务器之间的对话内容。但是其实对话过程中,同样重要的是另外一个事情,那就是确保浏览器访问的网站的确是自己声称的那个网站,而不是其他人。

实现认证主要要依赖于 SSL 证书。证书需要从发证机构 CA 去购买,然后安装到服务器上。例如到 google.com 网站上,点一下地址栏小锁头,就可以看到”证书“一项,点开证书可以查看证书的发证机构是哪一家,以及到期时间等信息。SSL 证书,相当于服务器的数字证件,证明自己的确是自己。

证书也是分不同类型的。对于比较便宜的证书,发证机构只保证你的确是这个域名的所有者。申请这类证书的时候,一般发证机构会要求你做一下 DNS 操作,证明你的确拥有这个域名,这样证书立刻就可以发放了。贵一些的证书,发证机构验证的内容就多了。你需要给发证机构提交材料,不仅仅要证明你是拥有这个域名,而且要证明自己的身份,这类证书的审批过程有可能需要几天。提供这类的证书的域名,地址栏中不仅仅显示一把小锁,而且会有一个显示你身份的长条。例如打开 https://www.bankofamerica.com/ 可以看到地址栏左侧显示了机构名称和注册地等信息。

有了第三方签发的 SSL 证书,就可以确定服务器的身份了。所以说,证书的作用是构建浏览器和服务器之间的信任。

SSL 和 TSL

作为一种加密方式 SSL 其实已经过期了,目前主流 HTTPS 网站都在使用 TSL 。

TLS 和 SSL 区别不大。TLS 可以认为是 SSL 的新版本,安全性更好,但是上面提到的运行原理都是一样的。当前人们口中的 SSL 证书指的就是 SSL/TLS 证书,但是因为名字太长,所以一般简称为 SSL 证书。

如果想要详细了解 TLS 的工作细节,可以访问 https://tls.ulfheim.net/ 这个网站。上面可以看到一次 TLS 操作的完整过程。其中可以看到服务器如何发送给客户端证书和公钥,客户端如何生成对称加密的秘钥并把秘钥发送给服务器端。过程中用到了 RSA 和椭圆曲线密码学,所以还是比我们之前介绍的要复杂一些。

总结

这就是对 HTTPS 的基本介绍了。要记住的是 HTTPS 不仅实现了加密,而且实现了认证。过程中 CA 颁发的 SSL 证书对通信安全发挥着核心作用。

参考: