HTTPS来到这个世界只为三件事!安全,安全,还是TMD安全!
这样的世界太不安全了
- 要通过互联网完成任何一件事情,你都需要发起一系列
http
请求,最终送到千里之外的某台服务器。 - 然而在
http
时代通过Wireshark
等各种各样的抓包软件就可以把所有的通信包记录下来并分析其中的数据,你会发现你的帐号,密码,绝大部分信息以明文的信息在互联网上流动!这样的世界太不安全了!
-
可能你的访问链接可能被篡改,你的页面上可能充斥着中间服务商恶意嵌入的广告,你在访问钓鱼页面时已经泄露了你的银行卡账号和密码……
- 假如用聊天来模拟大概长这样:
> hi掘金,我的帐号是czkm,今天有没有人找我? > 掘金: czkm你好,已确认你的身份。小红找你,内容是「今天周五,早点下班」。
- 真要是这样也许还好,但是我们中间还有一个第三者,就像是写信✉️,不是由你直接把信交给别人,而是通过邮差。
-
你发起的
http
请求也是通过一层层的路由来传递。中间经过一层层的网点转发,它就是我们的邮差,最终才把信✉️送到服务器那儿。服务器的答复也是如此。由此暴露缺点至少3点。可能被窃听
因为传输的是明文,所有第三者都可以看到。好了现在邮差都知道你叫czkm了而且知道了小红给你的消息。认证问题
收到了一个答复,但是真的是掘金发给你吗。有没有可能是那个邮差并没有收到掘金的消息而是故意告诉你一个错误的时间?可能被篡改
你收到的内容是完整的吗。现在你收到的数据是「今天周五,早点下班」但是可能有某个喜欢恶作剧的邮差在后面补了一些,就变成了「今天周五,但是得加班!」原本的意思就被改变了。
一个新技术的出现必定是为了解决某种问题的
- 我们的「救世主」HTTPS来了!它来到这主要做了3件事
数据加密
, HTTPS 通过对数据加密来使其免受窃听者对数据的监听,这就意味着当用户在浏览网站时,没有人能够监听他和网站之间的信息交换,或者跟踪用户的活动,访问记录等,从而窃取用户信息。数据一致性
,数据在传输的过程中不会被窃听者所修改,用户发送的数据会完整
的传输到服务端,保证用户发的是什么,服务器接收的就是什么。身份认证
,是指确认对方的真实身份,它可以防止中间人攻击并建立用户信任。- HTTPS 就是身披了一层 SSL 的 HTTP SSL 即
安全套接字层
后来改名叫了 TLS 大概长这样TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
由密钥交换算法 - 签名算法 - 对称加密算法 - 摘要算法组成
- HTTPS 就是身披了一层 SSL 的 HTTP SSL 即
- 我们还是用聊天来模拟,大概长这样:
> hi掘金,我的帐号是czkm,今天有没有人找我?我会使用 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 算法、 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 算法,...... 你选一个;然后我还生成了一个随机数,1234 (Client random)
包含了(所需访问的网站,我所支持的算法,我生成的随机数)
> 掘金: 那干脆用TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256算法吧, 然后我也有个随机数5678(Server random), 然后给你网站的证书你要的东西我都放在里面了
包含了(双方约定一种算法,所需网站的证书,网站生成的随机数)
- 通过这次交流你已经有了一张证书,里面装满了各种文件,里面还有各种细节,你可以在浏览器里直接查看。
其实这张证书概括起来只有4个内容:
- 证书颁给了哪个或哪些网站
- 证书的有效期的起止时间
- 一个公钥
- 颁发者 那么我们又是怎么判断他是可信的证书呢?
第一项 使用者,*.juejin.cn
,一个通配符域名,意思就是对所有 juejin.cn
的域名都有效。我们现在访问的确实是juejin.cn
下的域名,可信。
第二项 有效期,也很容易。你在自己的电脑上查了一下时间,2021 年 9 月1日,而过期时间是在2022年8月24日内,好的,可信。
第三项 公钥,把公钥存起来。
第四项 颁发者,你只知道了这张证书是由一个叫做 RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1
的人颁发的。那么我们又怎么确定他是可信的呢?
- 我们可以看到证书其实是有3部分组成。
RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1
保证了*.juejin.cn
的证书是有效的DigiCert Global Root CA
保证了RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1
的证书是有效的- 浏览器充分信任
DigiCert Global Root CA
这样套娃下来才能保证每一个证书的有效性。
加密初体验
第一次与掘金的交流你获取了证书中的公钥,只要你掌握了方法,那么就只有证书拥有者使用私钥才可以打开,也就是说你现在发送给掘金的数据都被加密了,那么他是怎么做到的呢?
- 在你确认了证书有效之后,你会先生成一个新的随机数
(Premaster secret)
,并使用数字证书中的公钥,加密这个随机数,然后将它发送出去。 - 现在,你在网络上发布的请求,就不再是一张纸了,它被套上一个信封。网络上的其他人看不到里面的内容;如果掘金成功收到了这封信,并使用掘金自己的私钥解密了信封。那么
Premaster secret
便成功送达。 - 我和掘金根据我们说好的
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
加密方法,使用前面的三个随机数,生成”对话密钥”(session key),之后加密接下来的整个对话过程。在所有聊天内容公开透明的情况下,你们成功交换了密码。
- 之后掘金返回的数据都会用对话密钥(session key)在互相通信的过程中其他人则无法破解。
HTTPS解决了前面3个问题
可能被窃听
通信使用对话密钥来加密,不再是明文所以通信过程其他人根本不知道你的内容。认证问题
证书的信任链保证了证书中「公钥」的可信度,而公钥和私钥的匹配也证明了掘金的身份。可能被篡改
通信使用对话密钥来加密,如果无法读取那么便无法篡改写入。
HTTPS已随处可见
- 对于支持
HTTPS
的网站,大都对HTTP
进行了跳转。访问掘金时,如果直接在浏览器中输入http://juejin.cn/
,那么浏览器会自动跳转到https://juejin.cn/
通常会返回301让我们重定向到https的网址
教练我也要用HTTPS
如果我是一个个人开发者那么我让我自己的网站拥有属于自己的证书呢?
- 首先SSL证书没有所谓的“品质”和“等级”之分,只有三种不同的类型都需要向CA(证书证书认证机构)申请
- 域名型SSL证书(DV SSL):信任等级普通,只需验证网站的真实性
- 企业型SSL证书(OV SSL):信任等级强,须要验证企业的身份,安全性更高
- 增强型SSL证书(EV SSL):信任等级最高,一般用于银行证券等金融机构,安全性最高,同时可以激活绿色网址栏。
- 对于个人开发者比如blog之类的可以使用 Let’s Encrypt 提供的免费证书。
安全总是相对的
HTTPS
的安全是相对安全,不要因为HTTPS
的存在就认为自己的信息绝对不会泄漏,互联网中没有绝对安全的数据,安全永远都是相对的。HTTPS
足够安全,是建立在CA
是可信的基础上,很多CA机构并没有很好的管理他们的加密密钥,导致密钥被黑客获取,这时候黑客就可以很轻松的对数据进行解密。SSL
证书只加密传输中的数据,不加密其他数据,例如cookie
和session
等存储数据,SSL
证书是不对其进行加密的。比如网站录页使用了HTTPS
,但是登录以后,其他页面使用HTTP
。这时HTTPS
环境下建立的cookie
里的session
,却在HTTP
环境下传输,就造成了泄漏的可能。