HTTPS 到底是什么?CA 证书又是指什么?
https 相信很多人已经不陌生了,那么 https 到底是怎么一回事?我们通常说用 https 就要证书,那么证书和 CA 又是什么关系了?
HTTPS 出现的背景
我们通常习惯于使用 http 进行数据通信,可以说如果这个世界是个和谐的世界,那么应该就没 http 的事了。不过林子大了,什么鸟都会有。我们在使用 http 的时候镜像面对的一个问题就是安全性。http 的报文传送都是已明文的方式传送,那么问题来了?我怎么知道这个到底是不是原始数据?如果有个中间人截获了然后篡改消息怎么办?基于这个问题,Netscape(开发 Firefox 的公司)搞了一个 SSL 协议。后来 SSL 发展到 v3 版本时,被标准化,这个时候就改名了,叫 TLS。于是乎,在 http 上 加了 SSL/TLS 就变成了我们都知道的 HTTPS。
HTTPS 优势和劣势是什么?
HTTPS 出现了之后,安全协议在 OSI 的分层中属于在 HTTP 之下,传输层之上。
HTTPS 带来的的优势有下面几点:
- 数据加密与安全保护;
- 认证用户和服务器,可以确保数据正确发送到 客户机和服务器;
- SEO 倾斜;
HTTPS 的劣势也比较明显:
- HTTPS协议握手阶段比较费时,会使页面的加载时间延长
- 加解密会在服务端增加 CPU 的消耗
- 证书费用
- 相对意义上的安全(拥有 CA 根证书,也是可以攻击的)
这个技术适用的场景
https 适用于所有的网站。但是如果在一些不需要特别注意安全性,又需要快速访问的话,比如博客网站,静态资源这些,我们可以直接使用 http 而不用 https。在下面的一些场景中,最好还是使用 https:
- 企业应用
- 政务信息
- 支付应用
- API接口
这个技术的组成部分和关键点(核心思想,核心组件)
https 的关键在于对信息的加密。在传统的 http 的过程我们 AB 两点间的通信是这样的。

A 直接发送数据给 B。好了。这个时候有个 C 出来了搞事情了:

看原来好好的一个打招呼,变成了一个莫名其妙~~
那 AB 之间假设要防止 C 的截获并且篡改消息,怎么办?生活中也有这种场景,比如谍战片里面,卧底和接头人约定一个密码串,然后 A 用密码串加密,B 用密码串解密。

这样只要 AB 都有一个密码本,那就可以加解密了。这也就是我们常说的“对称加密”。但是假如你们之间的这个密码本被 C 获取了呢? C 获取了你们的密码本,它也不告诉 AB,那就跟我们上图一样了。它先解密 A 的数据,然后再篡改数据加密后再发给 B。你看这就危险了吧。
那这个时候我们又要想办法了。B 说这样不安全,这样吧,我用两个密码本,一个公开给你(公钥),一个我自己单独留着(私钥)。你发过来的消息用我的公钥加下密码,我用我的私钥解下密。A 说好,拿着 B 的公钥加密数据后发给了 B。这样一看,嗯,很不错,A 发给 B 的消息再也不会泄漏了。因为就算 C 获取了消息,它没有私钥也没法解密消息啊。A 也这样想,也是,但是你回给我的消息还是可能被截取到,那我这个 A 也搞个公钥和私钥,你发给我的消息,用我的公钥加密下。这样一看,很不错啊。A B 之间发送的消息再也不用担心被第三方知道了,因为 C 无法界面消息啊!

如果 C 是个好人,那就到此了。可是如果 C 不甘心了?C 想,既然 A 的实际数据我不知道,那我就假装 B 来跟 A 套取数据。比如下面,毕竟 A 是无法判断到底谁是 B 的。如果想不明白,想想谍战片,你说你是好人,你就是好人吗?怎么证明?:

那好吧。大家一看,不行啊。这的搞个中间人来确认 A 是 A,B 是 B,就像确认你是你妈的儿子一样!!那怎么搞了?你想想,你想要知道你们市的公安局合不合法,那肯定是省公安局说了算。你想要知道省公安局合不合法,那肯定是是国家公安局说了算。所以你只要信任国家公安局,那就可以信任国家公安局认可的下一级公安局,那就可以认可它下面的工具认可的下面的公安局… 中间人也一样,不过我们在通信中引入了一个专用术语 CA(Certificate Authority)证书认证机构。