跳到主要内容

3.4-HTTPS

Create by fall on 03 Jan 2021 Recently revised in 01 Dec 2023

HTTPS

HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer)

HTTPS 以 HTTP 为基础,提供 ssl 加密传输协议额外验证,具有安全性,即,HTTP + Secure,作用主要分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

  • http 协议的默认端口为 80
  • https 的默认端口为 43

HTTP 的缺陷是无法保证数据安全。

HTTP 协议传输的数据都是明文传输的,因此使用 HTTP 协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了 SSL(Secure Sockets Layer)协议用于对 HTTP 协议传输的数据进行加密,从而就诞生了 HTTPS。简单来说,HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

请求过程

浏览器向服务器发出请求,询问对方支持的对称加密算法和非对称加密算法;服务器回应自己支持的算法。

浏览器选择双方都支持的加密算法,并请求服务器出示自己的证书;服务器回应自己的证书。

浏览器随机生成一个用于本次会话的对称加密的钥匙,并使用服务器证书中附带的公钥对该钥匙进行加密后传递给服务器;服务器为本次会话保持该对称加密的钥匙。第三方不知道服务器的私钥,即使截获了数据也无法解密。

非对称加密让任何浏览器都可以与服务器进行加密会话。

浏览器使用对称加密的钥匙对请求消息加密后传送给服务器,服务器使用该对称加密的钥匙进行解密;服务器使用对称加密的钥匙对响应消息加密后传送给浏览器,浏览器使用该对称加密的钥匙进行解密。

第三方不知道对称加密的钥匙,即使截获了数据也无法解密。对称加密提高了加密速度 。

客户端请求时,会先发送

  • 所访问的网站
  • 所支持的算法
  • 生成的随机数

相应时,会采用以下答复

  • 所给出的算法中,选出一种算法
  • 也会生成一个随机数
  • 网站的证书

数字证书

证书可以证明你拥有了一个可以确定真实性的证明,一般免费证书较少,因而需要一定费用。

数字证书

  • 包含证书的使用者,颁发给了那个网站或者是使用者
  • 证书的有效期
  • 一个公钥
  • 证书的颁发者

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在 Internet 上验证通信实体身份的方式,是具有权威的机构,给出的权威认证。

它是由权威机构——CA 机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。

数字证书绑定了公钥及其持有者的真实身份,它类似于现实生活中的居民身份证,所不同的是数字证书不再是纸质的证照,而是一段含有证书持有者身份信息并经过认证中心审核签发的电子数据,广泛用在电子商务和移动互联网中。

数字签名

数字签名是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH 函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。

如果相同,则说明收到的信息是完整的,在传输过程中没有被修改; 否则说明信息被修改过,因此数字签名能够验证信息的完整性。 如果中途数据被纂改或者丢失。那么对方就可以根据数字签名来辨别是否是来自对方的第一手信息数据。

数字签名是个加密的过程,数字签名验证是个解密的过程。

数字签名用来,保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。

非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。

https://letsencrypt.org

A nonprofit Certificate Authority providing TLS certificates to 363 million websites.

加密算法

对称加密

在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的。也就是说,加密和解密都是使用的同一个密钥。

用秘钥 A 进行加密,同时用秘钥 A 进行解密

  • 要求提供一条安全的渠道使通讯双方在首次通讯时协商一个共同的密钥。直接的面对面协商可能是不现实而且难于实施的,所以双方可能需要借助于邮件和电话等其它相对不够安全的手段来进行协商;
  • 密钥的数目难于管理。因为对于每一个合作者都需要使用不同的密钥,很难适应开放社会中大量的信息交流
  • 对称加密算法一般不能提供信息完整性的鉴别。它无法验证发送者和接受者的身份
  • 对称密钥的管理和分发工作是一件具有潜在危险的和烦琐的过程。对称加密是基于共同保守秘密来实现的,采用对称加密技术的贸易双方必须保证采用的是相同的密钥,保证彼此密钥的交换是安全可靠的,同时还要设定防止密钥泄密和更改密钥的程序。

非对称加密

指加密和解密使用不同密钥的加密算法。非对称加密算法需要两个密钥:公钥(publickey)私钥(privatekey)。

例如:用 A(私钥)进行加密,必须用 B(公钥)进行解密,用 B(公钥)进行加密,必须用 A(私钥)进行解密。

首先将网络分为三部分,内容提供,内容传输,内容使用。

非对称加密,表示用 A 作为锁,用 B 才能打开,用 B 作为锁,用 A 才能打开。同时拥有两个内容才能保证能修改,能读取。

A 和 B 可以理解为,想要发生核聚变(掌控数据加密和解密),必须同时使用铀235238 才可以。

|       内容提供       |                内容传输                      |     用户         |
| 发送钥匙 A 和内容 | 只有 A,没有 B,可以获取内容,但是无法加密 | 使用 A 解锁内容 |
| | 使用 A 进行加密修改内容, | |
| | 用户没有 B,导致无法读取内容 | |
内容使用者返回数据的时候
| 使用 B 进行解密 | 没有 B 没办法解密(用户) | 使用 A 再加密内容 |
可知,返回的数据,只有我们两个能够读取到,所以,如果用户,再创造出非对称加密的钥匙,就可以在传输方无法解密情况下,完全保密。

这样做就可以保证内容不会被篡改——篡改后用户无法读取内容,保证在所有聊天记录都被偷看的情况下,交换了密钥。

返回内容的时候,传输方无法解密,就保证了保密的内容传输

还有一种可能被篡改,传输方假装自己是用户,然后它生成非对称加密,和内容提供方通信,与此同时,它和用户的通信篡改内容,我就只和内容传输方通信了。

复杂度

算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。

对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥,所以保证其安全性就是保证密钥的安全。而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。

假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。

如果企业中有n个用户,企业需要生成n对密钥,并分发n个公钥。由于公钥是可以公开的,用户只要保管好自己的私钥即可,因此加密密钥的分发将变得 十分简单。同时,由于每个用户的私钥是唯一的,其他用户除了可以通过"信息发送者的公钥"来验证信息的来源是否真实,还可以确保发送者无法否认曾发送过该信息。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000 倍。

非对称的好处显而易见,非对称加密体系不要求通信双方事先传递密钥或有任何约定就能完成保密通信,并且密钥管理方便,可实现防止假冒和抵赖,因此,更适合网络通信中的保密通信要求。

混合使用

初次使用非对称加密,浏览器生成随机秘钥后,传输给后端,使用生成的秘钥进行对称加密,兼顾时间和安全

数据传输更安全

  • 在 TCP 和 HTTP 之间插入一个安全层,所有经过安全层的数据都会被加密或者解密;
  • 对称加密:浏览器发送加密套件列表和一个随机数 client-random,服务器会从加密套件中选取一个加密套件,然后生成一个随机数 service-random,返回给浏览器。这样浏览器和服务器都有相同 client-random 和 service-random,再用相同的方法将两者混合生成一个密钥 master secret,双方就可以进行数据加密传输了;
  • 对称加密缺点:client-random 和 service-random 的过程都是明文,黑客可以拿到协商的加密套件和双方随机数,生成密钥,数据可以被破解;
  • 非对称加密:浏览器发送加密套件列表给服务器,服务器选择一个加密套件,返回加密套件和公钥,浏览器用公钥加密数据,服务器用私钥解密;
  • 非对称加密缺点:加密效率太低,不能保证服务器发送给浏览器的数据安全,黑客可以获取公钥;
  • 对称加密结合非对称加密:浏览器发送对称加密套件列表、非对称加密列表和随机数 client-random 给服务器,服务器生成随机数 service-random,选择加密套件和公钥返回给浏览器,浏览器利用 client-random 和 service-random 计算出 pre-master,然后利用公钥给 pre-master 加密,向服务器发送加密后的数据,服务器用私钥解密出 pre-master 数据,结合 client-random 和 service-random 生成对称密钥,使用对称密钥传输加密数据;
  • 引入数字证书是为了证明“我就是我”,防止 DNS 被劫持,伪造服务器;
  • 证书的作用:一个是向浏览器证明服务器的身份,另一个是包含服务器公钥;
  • 数字签名过程:CA 使用 Hash 函数技术明文信息,得出信息摘要,然后 CA 使用私钥对信息摘要进行加密,加密后的秘文就是数字签名;
  • 验证数字签名:读取证书明文信息,使用相同 Hash 函数计算得到信息摘要 A,再利用 CA 的公钥解密得到 B,对比 A 和 B,如果一致,则确认证书合法;

完整的非对称加密过程

​ 假如现在 你向支付宝 转账(术语数据信息),为了保证信息传送的保密性、真实性、完整性和不可否认性,需要对传送的信息进行数字加密和签名,其传送过程为:

  1. 首先你要确认是否是支付宝的数字证书,如果确认为支付宝身份后,则对方真实可信。可以向对方传送信息
  2. 你准备好要传送的数字信息(明文)计算要转的多少钱,对方支付宝账号等;
  3. 你对数字信息进行哈希运算,得到一个信息摘要(客户端主要职责);
  4. 你用自己的私钥对信息摘要进行加密得到 你 的数字签名,并将其附在数字信息上;
  5. 你随机产生一个加密密钥,并用此密码对要发送的信息进行加密(密文);
  6. 你用支付宝的公钥对刚才随机产生的加密密钥进行加密,将加密后的 DES 密钥连同密文一起传送给支付宝
  7. 支付宝收到你传送来的密文和加密过的 DES 密钥,先用自己的私钥对加密的 DES 密钥进行解密,得到 你随机产生的加密密钥;
  8. 支付宝然后用随机密钥对收到的密文进行解密,得到明文的数字信息,然后将随机密钥抛弃;
  9. 支付宝用你的公钥对你的的数字签名进行解密,得到信息摘要;
  10. 支付宝用相同的哈希算法对收到的明文再进行一次哈希运算,得到一个新的信息摘要;
  11. 支付宝将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过;
  12. 确定收到信息,然后进行向对方进行付款交易,一次非对称密过程结束。

参考文章

作者文章名称
闪客sunHTTPS 加密了什么内容?