HTTPS 解决什么问题?而其背后的密码学
当很多人提到HTTPS时,他们的第一反应就是安全。对于普通用户来说,这已经足够了;
对于程序员来说,有必要了解HTTP有哪些问题? HTTPS 是如何处理的?背后有哪些解决方案和方法?
让我们坐下来简单描述一下。 HTTPS系统非常复杂,我无法做非常详细和准确的分析。
性能
HTTP 有几个典型的问题。首先是性能。 HTTP是基于TCP的,所以网络层就不提了(HTTP不存在速度问题)。
更严重的问题是HTTP头无法压缩,每次需要传输很大的数据包。而且HTTP请求模型是每个连接只能支持一个请求,所以速度会很慢。
那么 HTTPS 解决了这些问题吗?
不,实际上HTTPS在HTTP协议的基础上又增加了一层,速度会比较慢。相信未来会逐步得到解决。同时,HTTPS使用了很多加密算法,它们的执行也会影响速度。
为什么说HTTPS可以提高性能?因为只有支持HTTPS,才能部署HTTP/2。 HTTP/2协议会提高速度,有效减轻客户端和服务器的压力,加快响应速度。 HTTP/2 我以后会写一篇关于这方面的文章,但是知道一件事:HTTP/2 能够变得更快的主要原因是多路复用,同一个连接可以并行发送和接收多个请求。
安全
当用户在浏览器中输入 URL 并在地址栏中看到一个小锁图标时,他们会感到舒服并下意识地相信他们的在线行为是安全的。当然,对于初学者来说,可能还不太懂,但是以后会慢慢完善的(万事开头难)。
那么HTTP有哪些安全问题呢?让我们看一些例子:
(1)由于互联网流量可以被拦截,如果您的互联网访问方式被他人控制(没有绝对的安全),攻击者就会知道您的任何行为和信息。例如,如果我们在您上网时连接到匿名WIFI网络,您输入的网站密码可能会被泄露。
(2)当我们在上一页时,莫名其妙地弹出了一个广告(该广告不是本页的)。原因是访问的页面可能被运营商强行修改(添加了自己的内容,比如广告)。
HTTP最大的问题是数据没有加密,通信双方无法进行身份验证(保密和认证)。由于数据没有加密,如果数据包被攻击者劫持,信息就会泄露。
认证是指服务器不知道客户端连接的是谁,客户端也不确定自己连接的服务器是自己要连接的服务器,也没有办法确认彼此之间的身份两方。
HTTPS背后的密码学
为了解决HTTP的两个基本问题,HTTPS出现了。 HTTPS 包含几个基本部分:TLS 协议、OpenSSL 和证书。
什么是 OpenSSL?它实现了世界上许多重要且数量众多的密码算法,而密码学是解决问题最重要的部分。
关于 TLS 最重要的是握手的方式。认证体系也非常广泛,但它们都是基于相同的密码学。
(1) 由于 HTTP 不加密数据,因此我们对其进行加密。对称加密算法发挥作用。该算法使用相同的密钥进行加密和解密。通信双方都必须知道该密钥(或始终协商一个密钥)。 )。事实上,这种方法不太可能实现。它涉及到保密性和密钥分发的问题。一旦攻击者知道了密钥,传输的数据就相当于未加密。
![]()
(2) 这时候非对称加密算法就发挥作用了。公钥和私钥是分开的。客户端存储公钥,服务器存储私钥(不会公开)。这次看来问题可以完美解决了。
但实际上有两个问题。一是非对称加密算法速度很慢,二是会遇到中间人攻击。
首先我们来说说中间人攻击问题。如果使用非对称加密算法,客户端获得的公钥可能不是实际服务器的公钥,因为客户端上网时可能没有仔细区分某些密钥。公钥与某个公司绑定。如果攻击者的公钥被错误获取,那么攻击者劫持了攻击者发送的数据包后,就可以使用自己的私钥来解密。
(5)如何进一步解决公钥认证问题?将显示证书。该证书经过CA机构认证,得到客户的充分信任。它可以证明你获得的公钥属于特定组织,然后可以使用非对称加密算法对其进行加密。
证书是如何加密的?其实它也是采用非对称加密算法,但不同的是证书是用私钥加密,用公钥解密。
CA将使用自己的私钥来加密服务器用户的公钥,而客户端将使用CA的公钥来解密服务器的公钥。听起来有点眼花缭乱,仔细尝试一下。
(6) 如上所述,非对称加密算法的加密和解密非常耗时。对于像HTTP这样的大数据包,速度就更低了。在这种情况下,可以使用对称加密算法。该密钥在客户端和服务器之间共享。由客户端协商并通过服务器的公钥加密传输,因此不存在安全问题。
(7) 另外,客户端获得证书后,验证证书的正确性。验证方法是使用哈希摘要算法。 CA通过哈希算法计算出证书信息,然后用私钥进行加密。客户端使用CA解出公钥后,计算出证书的哈希摘要值。如果两者一致,则身份验证成功。
(8)HTTPS解决的第三个问题是完整性问题,即信息是否没有被操纵(信息可以撤消)。使用HMAC算法。该算法与散列法类似,但需要输入密码。密钥,这个密钥是客户端和服务器双方约定的。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
