HTTPS 协议
概念
超文本传输安全协议(Hypertext Transfer Protocol Secure,简称:HTTPS) 是一种通过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,利用 TLS/SSL 来加密数据包。
HTTPS 的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
HTTP 与 HTTPS 的对比
- HTTP 协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险
- TLS/SSL 具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生
- 安全层的主要职责,就是对发起的 HTTP 请求的数据进行加密操作和对接收到的 HTTP 的内容进行解密操作
TLS/SSL 的工作原理
TLS/SSL 简介
TLS/SSL 全称安全传输层协议(Transport Layer Security), 是介于 TCP 和 HTTP 之间的一层安全协议,不影响原有的 TCP 协议和 HTTP 协议。其中 TLS 是 SSL 的继任者,是介于 TCP 和 HTTP 之间的一层安全协议。
核心算法
TLS/SSL 的功能实现主要依赖三类基本算法:
- 散列函数(hash)
- 对称加密
- 非对称加密
这三类算法的作用如下:
- 基于散列函数验证信息的完整性
- 对称加密算法采用协商的密钥对数据加密
- 非对称加密实现身份认证和密钥协商
散列函数
常见的散列函数有 MD5、SHA1、SHA256。
特点:单向不可逆,对输入数据非常敏感,输出的长度固定,任何数据的修改都会改变散列函数的结果,可以用于防止信息篡改并验证数据的完整性。
缺点:在信息传输过程中,散列函数不能单独实现信息防篡改,由于传输是明文传输,中间人可以修改信息后重新计算信息的摘要,所以需要对传输的信息和信息摘要进行加密。
对称加密
常见的对称加密算法有 AES-CBC、DES、3DES、AES-GCM 等。
对称加密的方法是,双方使用同一个密钥对数据进行加密和解密。
特点:对称加密的优势就是信息传输使用一对一,需要共享相同的密码,密钥的安全是保证信息安全的基础,服务器和 N 个客户端通信,需要维持 N 个密码记录且不能修改密码。
缺点:不能保证密钥传输的安全性。因为密钥还是会通过网络传输的,一旦密钥被其他人获取到,那么整个加密过程就毫无作用了。这就要用到非对称加密的方法。
非对称加密
常见的非对称加密算法有 RSA、ECC、DH 等。
非对称加密的方法是,我们拥有两个密钥,一个公钥一个私钥,公钥是公开的,私钥是保密的,用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密。我们可以将公钥公布出去,任何想和我们通信的客户,都可以使用我们提供的公钥对数据进行加密,这样我们就可以使用私钥进行解密,这样就能保证数据的安全了。
密钥成对出现,一般称为公钥(公开)和私钥(保密)。公钥加密的信息只有私钥可以解开,私钥加密的信息只能公钥解开,因此掌握公钥的不同客户端之间不能相互解密信息,只能和服务器进行加密通信,服务器可以实现一对多的的通信,客户端也可以用来验证掌握私钥的服务器的身份。
特点:非对称加密的特点就是信息一对多,服务器只需要维持一个私钥就可以和多个客户端进行通信。
缺点:服务器发出的信息能够被所有的客户端解密,且该算法的计算复杂,加密的速度慢,因此如果每次通信都使用非对称加密的方式的话,反而会造成等待时间过长的问题。
TLS/SSL 工作方式
综合上述算法特点,TLS/SSL 的工作方式就是:
- 客户端使用非对称加密与服务器进行通信实现身份的验证
- 协商对称加密使用的对称密钥
- 双方使用协商好的对称密钥对实际传输的数据进行加密
- 同时利用散列函数保证数据的完整性
对称加密算法采用协商密钥对信息以及信息摘要进行加密通信,不同节点之间采用的对称密钥不同,从而保证信息只能通信双方获取,这样就解决了算法各自存在的问题:
- 非对称加密,只用在握手阶段,数据量小,安全地完成密钥交换,解决了它慢、不适合大量数据、不适用于每次通信的问题。
- 对称加密,借助非对称加密的“公钥加密”特性,把对称密钥安全地传过去,解决了它不能安全传输密钥的问题,保证了传输效率。
- 散列函数,通过非对称加密和对称加密,解决了它明文容易被篡改的问题,确保了数据的真实性和完整性。
HTTPS 通信(握手)过程
- 客户端向服务器发起请求,请求中包含使用的协议版本号、生成的一个随机数、以及客户端支持的加密方法。
- 服务器端接收到请求后,确认双方使用的加密方法,并给出服务器的证书以及生成的一个随机数。
- 客户端确认服务器证书有效后,生成一个新的随机数并使用数字证书中的公钥加密这个随机数,并且还会提供一个前面所有内容的 hash 的值用来供服务器检验。
- 服务器使用自己的私钥,来解密客户端发送过来的随机数。
- 客户端和服务器端根据约定的加密方法,使用前面的三个随机数生成对话密钥,以后的对话过程都使用这个密钥来加密信息。
HTTPS 的特点
优点
- 使用 HTTPS 协议可以认证用户和服务器,确保数据发送到正确的客户端和服务器。
- 使用 HTTPS 协议可以进行加密传输、身份认证,通信更加安全,防止数据在传输过程中被窃取、修改,确保数据安全性。
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对的安全,但是大幅增加了中间人攻击的成本。
缺点
- HTTPS 需要做服务器和客户端双方的加密和解密处理,耗费更多服务器资源,过程复杂。
- HTTPS 协议握手阶段比较费时,增加页面的加载时间。
- SSL 证书是收费的,功能越强大的证书费用越高。
- HTTPS 连接服务器端资源占用高很多,访客稍多的网站需要投入更大的成本。
HTTPS 是如何保证安全的?
核心加密技术
HTTPS 的安全性依靠以下两个概念:
对称加密
即通信的双方都使用同一个密钥进行加解密。
对称加密虽然很简单性能也好,但是无法解决首次把密钥发给对方的问题,很容易被黑客拦截密钥。
非对称加密
- 私钥 + 公钥 = 密钥对
- 即用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密
- 因为通信双方的手里都有一套自己的密钥对,通信之前双方会先把自己的公钥都先发给对方
- 然后对方再拿着这个公钥来加密数据响应给对方,等到了对方那里,对方再用自己的私钥进行解密
非对称加密虽然安全性更高,但是带来的问题就是速度很慢,影响性能。
解决方案
结合两种加密方式,HTTPS 将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
此时又带来一个问题——中间人问题。如果此时在客户端和服务器之间存在一个中间人,这个中间人只需要把原本双方通信互发的公钥,换成自己的公钥,这样中间人就可以轻松解密通信双方所发送的所有数据。所以这个时候需要一个安全的第三方颁发证书(CA),证明双方的身份,防止被中间人攻击。证书中包括签发者、证书用途、使用者公钥、使用者的 Hash 算法、证书到期时间等。CA 给服务器发一个数字证书,里面写着这个服务器是谁、它的公钥是什么、证书有效期等;客户端收到证书后,就知道这个公钥真的是目标服务器的,而不是中间人的。
但是问题又来了,如果中间人篡改了证书(比如换了公钥),那么身份证明就无效了。这个时候需要一个新的技术——数字签名。数字签名就是用 CA 自带的 Hash 算法对证书的内容进行 Hash 得到一个摘要,再用 CA 的私钥加密,最终组成数字签名。客户端拿到证书后,用同样的算法算一遍证书内容,得到一个新摘要,用 CA 的公钥解密签名,得到原始摘要,对比两个摘要就知道中间有没有被人篡改了。这个时候就能最大程度保证通信的安全了。
数字证书是什么?
数字证书的作用
现在的方法也不一定是安全的,因为没有办法确定得到的公钥就一定是安全的公钥。可能存在一个中间人,截取了对方发给我们的公钥,然后将他自己的公钥发送给我们,当我们使用他的公钥加密后发送的信息,就可以被他用自己的私钥解密。然后他伪装成我们以同样的方法向对方发送信息,这样我们的信息就被窃取了,然而自己还不知道。为了解决这样的问题,可以使用数字证书。
数字证书的制作过程
- 首先,使用一种 Hash 算法来对公钥和其他信息进行加密,生成一个信息摘要。
- 然后,让有公信力的认证中心(简称 CA)用它的私钥对消息摘要加密,形成签名。
- 最后,将原始的信息和签名合在一起,称为数字证书。
当接收方收到数字证书的时候,先根据原始信息使用同样的 Hash 算法生成一个摘要,然后使用 CA 的公钥来对数字证书中的摘要进行解密,最后将解密的摘要和生成的摘要进行对比,就能发现得到的信息是否被更改了。
这个方法最要的是认证中心的可靠性,一般浏览器里会内置一些顶层的认证中心的证书,相当于我们自动信任了他们,只有这样才能保证数据的安全。
HTTPS 作为现代网络通信的安全标准,通过结合 TLS/SSL 协议,有效解决了 HTTP 明文传输的安全隐患。它利用对称加密和非对称加密的结合,既保证了数据传输的安全性,又兼顾了传输效率。
核心要点包括:
- 安全机制:通过握手过程建立安全连接,使用数字证书和数字签名确保身份认证和数据完整性
- 技术原理:融合散列函数、对称加密和非对称加密的优势,形成完整的安全体系
- 实际应用:虽然增加了服务器负担和成本,但为用户提供了更安全的浏览体验,已成为现代网站的标配