理解HTTPS

为什么要有https

原因就是HTTP是不安全的,HTTP因为传输明文的特点,整个传输过程完全透明,中间人在传输链路中可以修改或者伪造请求 / 响应报文,数据不具有可信性。用户敏感信息随时会泄漏。因为HTTP不安全所以才有了后来的HTTPSHTTPS也叫HTTP + SSL/TLS,它保证了数据传输的

  • 机密性
  • 完整性
  • 身份认证
  • 不可否认

HTTP 传输过程

image.png

你可能会说前端把敏感信息通过 MD5 加盐加密传输不就行了吗?MD5 准确讲不叫加密算法,它是一种摘要算法,是不可逆的压缩算法,如果你用 MD5 把加密后 hash 串给到服务端,因为它不可逆向推算出原文,服务端也只是把这个字符串直接存到表里,因此黑客劫持了这个字符串一样可以绕过前端的登录认证。

常用的摘要算法: MD5、SHA-1、SHA-2, TLS禁止使用 MD5、SHA-1。
SHA-2 实际上是一系列摘要算法的统称,总共有 6 种,常用的有 SHA224、SHA256、SHA384,分别能够生成 28 字节、32 字节、48 字节的摘要。

HTTPS

HTTPS就是在原来的四层网络模型,TCP传输层之上多了安全传输层协议(TLS)或者安全套接层(SSL), 因此 HTTPS 也常指 HTTP over TLSHTTP over SSL

image.png

1、SSL(Secure Sockets Layer) 发展到v3阶段时,互联网工程组把它改名为 TLS(传输层安全,Transport Layer Security),正式标准化,SSL 是 TLS 前身。
2、计算机科学领域里的任何问题,都可以通过引入一个中间层来解决, 因此为了解决传输安全,出现了 SSL/TLS

怎么让数据传输是安全的呢?你可能想到就是使用加密算法。因为加密算法是可以使用钥匙来加密原文和解密还原成原文,那么只要保证钥匙是机密的不会被恶意获取,而 HTTPS 就是依靠下层的 SSL/TLS 使用混合加密(对称加密和非对称加密)保证数据传输安全。

对称加密

加密原文和解密成原文都使用一个秘钥,秘钥就是一段很长的字符串,密钥长度可以是 128、192 或 256。目前常用的只有 AES 和 ChaCha20。AES 性能很好,计算速度快,安全强度很高,是使用最广发的对称加密算法

image.png

被加密的数据在传输过程中是无规则的乱码,即便被第三方截获,在没有密钥的情况下也无法解密数据,也就保证了数据的安全。但是有个问题,秘钥如何安全传给对方,保证不会被第三方截取呢,因此对称加密有个很大的问题就是不能保证秘钥交换安全,安全性得不到保证,所以就出现了非对称加密(也叫公钥加密算法)。

非对称加密

它有两个秘钥,一个叫公钥,一个叫做私钥。两个秘钥是不对称的,如果使用公钥加密原文,那么就必须使用私钥解密,反之如此。它有以下特点

  • 公钥公开,所有人都能看到
  • 安全性十分可靠,按照现在的算力,即使最强配置的计算机,也要几十万年才能破解
  • 计算量相比对称加密指数级增加,加密和解密速度相比对称加密慢很多
  • 私钥保存在服务器,无需向客户端传输

由于不存在秘钥交换,安全性得以保证。 RSA 是最常用非对称加密算法,它的安全性基于 整数分解 的数学难题,使用两个超大素数的乘积作为生成密钥的材料,想要从公钥推算出私钥是非常困难的。当使用 SSH 作为身份认证时,也会下发公钥私钥

-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBALRafyXmEY9wBw/lvedQIjP8ZYPEY45S9pqOGYNyQoXAOVEQIMSv5eo2
rgWFREdp2tw25PDjL6+KF3D7sAPUI1j/Nyxq17xcUrFHskKyNnMKJpxHTDrrZmFD
GDj2oWw4kwRL9+m8mhpcFB0qkkJ66q3eb9bqJA7frZxsCRPDW52VAgMBAAE=
-----END RSA PUBLIC KEY-----

-----BEGIN RSA PRIVATE KEY-----
MIICXwIBAAKBgQC0Wn8l5hGPcAcP5b3nUCIz/GWDxGOOUvaajhmDckKFwDlRECDE
r+XqNq4FhURHadrcNuTw4y+vihdw+7AD1CNY/zcsate8XFKxR7JCsjZzCiacR0w6
62ZhQxg49qFsOJMES/fpvJoaXBQdKpJCeuqt3m/W6iQO362cbAkTw1udlQIDAQAB
AoGBAKpzuSWlakVJWLNSq4dZeenuCjddvcW+bSknUb+klnB4evM9LesWX1JbeV7o
U962kc186CUuYlwiRANZLEKCFSCqQ50KxotT3lZWdcvcQTh625hIPQAPJ5L3UGjx
I1er83KmDeoxk07wNAjmYrTnYXrRxaknJd6/65ke4XeQarBBAkEA3YJ5zvI+sJTp
JrkKnm9U/kZRMcM0QRQLw2iMR58vXmgl+xSOHdtaHs3fylq/xhCh5HlEUeqOrYmN
G6Ci6p+IMQJBANBvgiN1rHKT7M140rEvwIKJf2W+wU2Sf/VkJS6OE+eGb0tzZTYD
s4g3QLFnqPQrUsZ94NGFi8tQ8fJKbsOWtqUCQQDL0pNi6WTl9x/SkdJDlw4OK4Xq
1EPw3hE07a6m+MMNi6fnMTLUJlL2pVmXSYnNJuDQ6wUCm2JOLJO7KETAv6sBAkEA
orUZGsMmHb8ZkH/rwMMs/PmGiI8y6HIfDxjg6YmhQg+wW262KEcVY5T2HEZ2Hjyf
fjEPSZ99M/Z5GBFAi8/fvQJBAIMGwpXeDRi2GPhxdql1YEh8fanCq0Rz4teee6+m
emH+NTGnX6plyikqghnE8RAoR9TMsXR9Eg/KWvblxXS8/V4=
-----END RSA PRIVATE KEY-----
复制代码

非对称加密传输过程:

image.png

之前说多 SSL/TLS 使用的是混合加密,虽然非对称加密没有秘钥交换问题,但是因为计算量巨大,运算速度要比对称加密低两个指数级,如果数据载体巨大的时候,非对称加密通信速度宛如龟速。


// 秘钥是128位的AES对称加密速度
aes_128_cbc enc/dec 1000 times : 0.97ms, 13.11MB/s
// 秘钥是1024位的RSA非对称加密速度
rsa_1024 enc/dec 1000 times : 138.59ms, 93.80KB/s
rsa_1024/aes ratio = 143.17 // 速度慢了143倍
// 秘钥是2048位的RSA非对称加密速度
rsa_2048 enc/dec 1000 times : 840.35ms, 15.47KB/s
rsa_2048/aes ratio = 868.13  // 速度差了三个指数级
复制代码

从上图可以看出,非对称加密算法只存在,交换加密后的 KEY过程中,数据载体的传输使用的是对称加密,因此 HTTPS 使用的是混合加密。

公钥信任问题

上面的传输过程,客户端只需要一个公钥。这就存在一个信任问题,黑客也可以伪造和发布公钥,怎么判断你这个公钥就是掘金网站下发的公钥的呢。因此需要借助第三方机构CA(Certificate Authority,证书认证机构),它就像网络上的公安局,可信度是不容质疑的,由它来给各个公钥签名,用自身的信誉来保证公钥无法伪造,是可信的,你也必须相信,不然这个信任链走不下去了,当然如果CA都被攻击了,那么信任也无从说起。比如点击掘金地址栏上面的小锁头,他就是由权威CA机构 DigiCert 颁发的

image.png

这个数字证书只存在HTTPS的网站, 如果你打开的是 HTTP,就会有安全警告

image.png

在首次访问网站的时候,服务端会把数字证书返回给客户端,总的原理图如下

image.png

HTTP 和 HTTPS

最后总结下两者区别

  • HTTP 明文传输,安全性差。HTTPS 对数据传输加密,安全性得以保证
  • HTTPS 需要申请CA证书,要花钱,还要备案
  • HTTPS 因为多了一层 SSL/ TLS ,传输速度比 HTTP 慢,连接过程也更加复杂, 也消耗更多的连接带宽,因为还多了 TLS 握手过程
  • HTTP 默认端口80, HTTPS 默认端口 443

最后

参考

Guess you like

Origin juejin.im/post/7062173229032439839