计网-HTTPS
本文最后更新于:14 天前
⚡什么是HTTPS?
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer): 一般理解为 HTTP+SSL/TLS = HTTPS,通过 SSL 证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密
SSL:Secure Socket Layer,安全套接字层
TLS(Transport Layer Security,传输层安全): 其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0) 由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本.SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到.TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是 TLS 1.1、TLS 1.2
⚡浏览器在使用 HTTPS 传输数据的流程是什么? (六点)
-
首先客户端通过 URL 访问服务器建立 SSL 连接,客户端会将生成一个随机数(client random),以及客户端支持的加密方法发送给服务端
-
服务端收到客户端请求后,会将网站支持的证书信息(证书中包含服务端的公钥)还有一个随机数(server random)传送一份给客户端
-
客户端的服务器开始协商 SSL 连接的安全等级,也就是信息加密的等级
-
客户端的浏览器根据双方同意的安全等级,生新成一个随机数(Premaster secret),然后利用服务端的公钥将生成的新随机数加密,并传送给服务端
-
服务器利用自己的私钥解密得到新随机数(Premaster secret),用(client random,server random,Premaster secret)生成对话密钥(session key)
-
服务器利用会话密钥加密与客户端之间的通信
⚡为什么要用https? (三点)
-
参数明文传输,不安全
-
数据的完整性未校验,容易被篡改
-
没有验证对方身份,存在冒充危险
⚡HTTPS 的缺点?(三点)
-
HTTPS 协议多次握手,导致页面的加载时间延长近50%
-
HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗
-
SSL 涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大
⚡HTTPS 和 HTTP 的区别?(三点)
-
HTTPS 是 HTTP 协议的安全版本,HTTP 协议的数据传输是明文的,是不安全的,HTTPS 使用了 SSL/TLS 协议进行了加密处理
-
HTTP 和 HTTPS 使用连接方式不同,默认端口也不一样,HTTP 是80,HTTPS 是443
-
HTTP 属于应用层, HTTPS 由于加了 SSL,是应用层和传输层的结合
⚡对称加密和非对称加密?
加密和解密同用一个密钥的方式称为共享密钥加密,也被叫做对称密钥加密
共享加密方式加密时必须将密钥也发给对方
在互联网上转发密钥时,如果通信被监听那么密钥就会落入攻击者之手,同时也就失去了加密的意义
公开密钥加密方式很好地解决了共享密钥加密的困难:
公开密钥加密使用一对非对称的密钥:一把叫做私有密钥,另一把叫做公开密钥
使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密
利用这种方式,不需要发送用来解密的私有密钥,也不用担心密钥被攻击者窃听而盗走
HTTPS采用共享秘钥加密和公开秘钥加密两者并用的混合加密机制
若密钥能够实现安全交换,那么有可能会考虑仅适用公开密钥加密来通信
但是公开密钥加密和共享密钥加密相比,处理速度要慢
公开密钥加密方式还是存在一些问题的,那就是无法证明公开密钥本身就是货真价实的公开密钥
例如当服务器发送公钥时被截取,然后替换了公钥,那么就会出现问题,所以解决办法是:数字证书认证机构 CA 颁发的公开密钥证书 [1]
⚡为什么 HTTPS 要同时使用对称加密和非对称加密两种加密方式的混合模式?
因为对称加密速度比较快,但是对称加密无法保证加密密钥的安全传输,所以使用非对称密钥来将生成的对称密钥安全传输到双方,此后使用更快的对称加密密钥。
⚡为什么对称加密速度比较快?
对称加密主要的运算是位运算,速度是非常快的,例如 DES 算法(置换,位移,异或,迭代)。如果使用硬件速度会更快。
非对称加密计算一般都比较复杂,例如 RSA,它里面涉及到大数乘法、大数取模运算等等。
而幂运算的本质是乘法,乘法的基础单位是加法,也就是我们最常见的整数加。而在电路上实现加法比异或(XOR)要麻烦的多,况且后面还有一个模运算。因此非对称加密的速度自然而然是比不过对称加密的。
另外还有一个原因是,某些对称加密算法,例如 DES 算法中有些模式,如 ECB 模式等等,中间计算过程是可以并行计算的,更进一步提高加密解密的速度。
⚡如何保证 server 的公钥传到客户端时不被篡改呢?
答: 1. 可信的第三方 CA 机构 2. 非对称加密
HTTPS 中 RSA 非对称加密的两种模式:
-
加密模式,保证数据传输方的数据安全性(不可被其他人读)
加密模式:私钥解密,公钥加密
-
认证模式,保证数据接受方的数据完整性(不可被其他人篡改)
认证模式: 私钥签名(加密),公钥认证(解密)
CA 机构使用 CA 自己的私钥对 server 的公钥和 server 的一些信息统一加密/签名是,生成数字证书.
当 client 请求 server 时,server 将信息正文,有信息正文生成的数字签名[2]和数字证书[1:1]一起发送给 client.
这样,client 在接收时会根据浏览器内置的受信任的 CA 机构列表判断发来的签发证书的机构是否有效,如果有效,那么使用对应 CA 机构内置的 CA 的公钥解密/认证 CA 发送的证书,从中得到 server 的公钥,并且,使用 server 的公钥解密/认证数字签名,如果得到的结果和信息正文散列后的摘要一致,那么说明 server 的公钥是安全的,且信息正文没有被篡改.
因为,1. 如果 server 向 client 发送的信息中,server 的公钥被恶意第三方篡改,但是第三方无法拿到 CA 的私钥对数字证书重新加密认证;2. 而如果使用第三方自己的私钥加密认证,client 会提示这是不受信任的机构;3. 如果是只修改了信息正文,那么数字签名会不对应;4. 如果修改了信息正文并想重新生成对应的数字签名也是不可能的,因为加密摘要要使用 server 的私钥,第三方拿不到
-
如果只是 server 自己签发数字签名和公钥以及信息正文,没有第三方 CA 机构:
server 的公钥散列生成摘要,并使用自己的公钥对公钥和 server 的一些信息统一加密/认证,生成数字证书发送给 client
但是中途还是有可能被第三方拦截,如果替换了 server 公钥还是无法察觉
-
如果只是颁发数字证书,没有数字签名,信息正文可能会被篡改
本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 。转载请注明出处!