Java 面试题:HTTPS与HTTP区别以及HTTPS如何建立连接保证安全性--xunznux

HTTPS与HTTP区别以及HTTPS如何建立连接保证安全性

HTTPS是什么

1. 特点

  • 信息加密:采⽤对称加密+非对称加密的混合加密的方式,对传输的数据加密,实现信息的机密性,解决了窃听的⻛险。
  • 校验机制:用摘要算法为数据生成独一无二的「指纹」校验码,指纹用来校验数据的完整性,解决了被篡改的风险。
  • 身份证书:将服务端的公钥放入到CA数字证书中,解决了服务端被冒充的风险。

2. SSL/TSL 是什么

SSL:Secure Socket Layer 安全套接字
TSL:Transport Layer Security 安全传输层协议
HTTPS(HyperText Transfer Protocol Secure)是基于TLS/SSL的安全版本的HTTP协议
SSL和TLS协议通过以下方式确保安全通信:

  • 加密: 使用加密算法对传输的数据进行加密,防止第三方截取和读取敏感信息。
  • 身份验证: 使用数字证书验证通信双方的身份,确保数据传输的可信性。
  • 数据完整性: 通过使用消息摘要算法,确保传输的数据在传输过程中没有被篡改或损坏。

3. HTTP与HTTPS 区别

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加⼊了 SSL/TLS 安全协议,使得报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报问传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • 两者的默认端口不⼀样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

4. 什么是对称加密和非对称加密

4.1 对称加密

对称加密也称为私钥加密,使用相同的密钥来进行加密和解密。

  • 在加密过程中,明文数据通过应用特定的算法和密钥进行加密,生成密文数据。解密过程则是将密文数据应用 同样的算法和密钥进行解密,恢复为明文数据。
  • 由于加密和解密都使用相同的密钥,因此对称加密算法的速度通常较快,但密钥的安全性很重要。如果密钥泄 漏,攻击者可以轻易地解密数据。
4.2 非对称加密
  • 非对称加密也称为公钥加密,使用一对不同但相关的密钥:公钥和私钥。
  • 公钥用于加密数据,私钥用于解密数据。如果使用公钥加密数据,只有拥有相应私钥的人才能解密数据;如果 使用私钥加密数据,可以使用相应公钥解密。
  • 除了加密和解密,非对称加密还用于【数字签名】,可以验证消息的来源和完整性。
4.3 总结:
  • 公钥加密,私钥解密。这个目的是为了保证内容传输的安全,因为被公钥加密的内容,其他人是无法解密的,只有持有私钥的人,才能解密出实际的内容;
  • 私钥加密,公钥解密。这个目的是为了保证消息不会被冒充,因为私钥是不可泄露的,如果公钥能正常解密出私钥加密的内容,就能证明这个消息是来源于持有私钥身份的人发送的。
  • HTTPS采用对称加密和非对称加密结合的【混合加密】方式,保证信息的机密性,解决了窃听的风险。

5. 混合加密

通信建立前:
采用非对称加密的方式交换【会话密钥】,后续不再使用非对称加密;
通信过程中:
全部使用对称加密的【会话密钥】方式,加密明文数据。
采用「混合加密」的方式的原因:
对称加密:只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换;
非对称加密:使用两个密钥,公钥可以任意分发而私钥保密,解决密钥交换问题,但速度慢。

6. 为什么HTTPS使用混合加密

HTTPS 使用混合加密的主要原因是为了兼顾加密速度和安全性,从而实现安全的通信。混合加密结合了对称加密和非对称加密的优点,解决了两者各自的缺点:

  1. 对称加密:
  • 优点: 对称加密算法速度快,适合加密大量数据。
  • 缺点: 需要安全地共享密钥,但在没有安全通道的情况下共享密钥可能会被窃听。
  1. 非对称加密:
  • 优点: 非对称加密使用公钥和私钥配对,无需直接共享私钥,密钥交换更安全。
  • 缺点: 计算复杂度高,速度慢,不适合加密大量数据。
  1. 混合加密的实现:
    在 HTTPS 中,混合加密的工作流程如下:
  2. 握手阶段: 客户端(浏览器)与服务器通过非对称加密算法(如 RSA)交换加密的会话密钥。这保证了在不安全的网络环境中,攻击者无法窃取或篡改密钥,从而确保密钥的安全性。
  3. 数据传输阶段: 一旦会话密钥(对称密钥)安全地传输到客户端和服务器,它们就使用这个对称密钥来加密和解密后续的所有数据传输。这种方式利用对称加密的高效率来处理大量数据,保证通信的速度和性能。
    总结:
  • 安全性: 非对称加密用于安全地传输对称加密的会话密钥,解决了密钥交换的安全问题。
  • 效率: 对称加密用于数据传输,利用其快速加密和解密的特性提高通信效率。

7. 摘要算法+数字签名

为了保证传输的内容不被修改,可以将传输的内容计算出⼀个【指纹】,对方收到后,也把接收的内容计算出⼀个
【指纹】,然后进行对比,如果【指纹】相同,则说明内容没有被篡改,常常会使用摘要算法(哈希函数)来计算
出内容的哈希值,通过摘要算法可以生成数据的唯⼀标识,从而验证数据的完整性。
但是摘要算法只能保证内容不被修改,不能保证发送者的身份(可能内容和哈希值都被改了),为了避免这种情况,计算机里会用非对称加密算法 来解决,共有两个密钥:公钥用于验证签名,私钥用于生成签名。私钥是由服务端保管,然后服务端会向客户端颁 发对应的公钥。如果客户端收到的信息,能被公钥解密,就说明该消息是由服务器发送的。(公钥可能被冒充,因此引入CA证书)

  1. 生成数字签名:
  • 发送者使用私钥对消息的摘要(通常是通过哈希函数计算得到)进行加密,生成数字签名。
  • 数字签名是消息的哈希值经过私钥加密的结果。
  1. 发送消息和数字签名:
  • 发送者将原始消息和生成的数字签名一起发送给接收者。
  1. 验证数字签名:
  • 接收者收到消息和数字签名后,使用发送者的公钥对数字签名进行解密,得到摘要值。
  • 接收者再次计算收到的消息的摘要(使用相同的哈希函数),将其与解密得到的摘要值进行比较。
  • 如果两个摘要值相同,说明消息未被篡改过,数字签名有效,消息来源可信。

8. 数字证书

根据上面的介绍,我们已经知道可以通过摘要算法保证内容不被修改,以及通过私钥和公钥保证消息来源的可靠
性,但是却缺少身份验证的环节,如果此时在客户端和服务器之间有一个中间⼈,中间人把原本双方通信的公钥篡
改成自己的公钥,这又该怎么办呢?这就需要使用到数字证书。

  1. 密钥生成:
    ⾸先,实体(例如服务器、个人或组织)需要生成一对密钥:公钥和私钥。
    公钥是用于加密和验证的,可以被公开分享。
    私钥用于解密和签名,必须保密,只有持有者知道。
  2. 证书请求(CSR - Certificate Signing Request):
    实体生成一个证书请求,其中包含公钥、实体信息(如名称、电子邮件等)和签名。
    使用CA颁发的公钥加密,只有CA能解开,不怕在传输过程被替换,保证传输安全。
    CSR是一个包含有关实体信息的文本块,可以被发送到数字证书颁发机构(CA) 以获取数字证书。
  3. 证书颁发:
    实体将证书请求发送给数字证书颁发机构(CA)。
    CA会验证请求者的身份,然后使用自己的私钥对请求中的信息进行签名,生成数字证书。
    数字证书包括公钥、实体信息、CA的信息和签名等内容。
  4. 证书验证:
    当实体收到数字证书时,它可以使用CA的公钥验证证书的签名,确保证书未被篡改且由合法的CA签发。
    接收者可以检查证书中的实体信息以及CA的信息,确保证书的合法性。
  5. 数字证书使用:
    接收者可以使用数字证书中的公钥来加密数据,然后发送给证书的持有者。
    持有者使用私钥解密数据,保护数据的机密性。
    持有者还可以使用私钥生成数字签名,接收者使用公钥验证签名,验证数据的来源和完整性。

至此,HTTPS中,服务器将自己的公钥注册到CA(数字证书认证机构),CA会使用自己的私钥将服务器注册的公钥、个人信息和数字签名打包成一个数字证书,客户端拿到数字证书后,可以通过CA的公钥确定这个证书的来源是CA,是可靠的,那么如果验证这个证书合法后,里面的公钥就可以确定是服务器发出的,就不担心被中间人篡改公钥了。那么客户端就收到正确无误的公钥了,服务器拥有私钥,两者使用这个传输对称加密的私钥就是安全的。

9. 什么是CA数字证书?

数字证书可以看作是网络世界中的“身份证”,用来验证服务器或个人的身份,并确保通信的安全性。它主要解决了以下问题:如何确认对方的身份,以及如何防止“中间人攻击”(即中间人冒充某一方篡改通信内容)。
通俗解释:

  1. 密钥生成:想象你有一把独特的锁(公钥),任何人都可以用这把锁来加密信息并发送给你。你还有一个与这把锁配对的钥匙(私钥),这把钥匙是唯一能解开这把锁的东西,而且你必须把它藏得好好的,只有你自己知道它的存在。
  2. 证书请求(CSR):你想让别人相信这把锁(公钥)真的属于你,于是你写了一封“证明信”(证书请求),里面包含你的锁和你的基本信息,比如你的名字和地址。为了确保这封“证明信”在传送中不被篡改,你用一个可靠机构(CA)的公钥加密了它。【公钥加密私钥解密,确保信息安全不被篡改】
  3. 证书颁发:你把“证明信”寄给一个可信赖的“公证人”(CA)。这个公证人检查了你的身份后,用他的私人印章(私钥)在信上盖了章,并颁发了一张带有你信息的“身份证”(数字证书)。【私钥加密公钥解密,确保信息来源是正确的】
  4. 证书验证:当其他人收到你的“身份证”(数字证书)时,他们会用公证人(CA)的公钥来检查上面的印章,确认这张证书确实是公证人发的,而且没有被篡改。
  5. 数字证书使用:现在,当别人想要给你发一条秘密消息时,他们会用你的“身份证”(数字证书)中的锁(公钥)来加密信息,然后你用自己独有的钥匙(私钥)来解开锁,读取信息。同时,你也可以用自己的钥匙(私钥)在消息上盖章(签名),让对方知道这条消息确实是你发的,确保信息的真实性和完整性。
    总结:
    在HTTPS中,服务器把它的锁(公钥)交给一个可靠的公证人(CA),公证人用自己的印章(私钥)做了个“身份证”(数字证书),客户端通过验证这个“身份证”来确认服务器的身份,从而安全地交换信息。通过这种方式,即使有人试图冒充服务器或者篡改通信内容,客户端也能识别并拒绝不合法的连接。

HTTPS是怎么建立连接的(三次握手)

1. SSL/TLS 协议基本流程:

  • 客户端向服务器索要并验证服务器的公钥。
  • 双方协商生产「会话秘钥」。
  • 双方采用「会话秘钥」进行加密通信。
    在这里插入图片描述

2. 具体流程如下:

  1. 首先,客户端向服务器端发送加密通信请求,也就是 ClientHello 请求,请求与服务端建立连接。
  2. 服务端产生一对公私钥,然后将自己的公钥发送给CA机构,CA机构也有一对公私钥,然后CA机构使用自己的
    私钥将服务端发送过来的公钥进行加密,产生一个CA数字证书。
  3. 服务端响应客户端的请求,也就是 SeverHello , 将CA机构生成的数字证书发送给客户端。
  4. 客户端将服务端发送过来的数字证书进行解析(因为浏览器产商跟CA机构有合作,所以浏览器中已经保存了大
    部分CA机构的公钥密钥,用于对服务端发送过来的数字证书进行解密),验证这个CA数字证书是否合法,如果不合
    法,会发送一个警告。如果合法,从数字证书中取出服务端生成的公钥。
  5. 客户端取出公钥并生成一个随机码key(预主密钥),使用三个随机数生成对称密钥。
  6. 客户端将加密后的随机码key发送给服务端,作为接下来的对称加密的密钥的一部分。
  7. 服务端接收到随机码key后,使用自己的私钥对它进行解密,然后获得到随机码key,使用三个随机数生成对称密钥。
  8. 服务端使用对称密钥对传输的数据进行加密,再传输加密后的内容给客户端。
  9. 客户端使用对称密钥解密服务端发送过来的数据,之后,客户端和服务端通过对称加密传输数据,对称密钥随机码Key作为传输的密钥。(对称加密算法如AES)

HTTPS握手过程中的随机数包括两个Client Random和一个Server Random。

  1. Client Random:客户端生成的随机数,用于在握手过程中生成对称密钥、初始化向量等。
  2. Server Random:服务器生成的随机数,也用于在握手过程中生成对称密钥、初始化向量等。
    这两个随机数的作用是为了确保每个HTTPS会话的密钥都是唯一的,从而增加安全性。
    此外,还有一个Pre-Master Secret(预主密钥)的随机数,它是由客户端生成,并通过公钥加密后发送给服务器。服务器使用私钥解密后,可以生成主密钥。

3. 为什么需要三个随机数

"不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。对于RSA密钥交换算法来说,pre-master secret本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。pre-master secret的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre-master secret就有可能被猜出来,那么仅使用pre-master secret作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre-master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。
HTTPS在建立连接时使用非对称加密生成对称密钥的过程中,使用三个随机数(客户端随机数、服务器随机数和预主密钥)而不是直接使用预主密钥的原因主要是为了增强安全性,防止攻击,并且确保生成的对称密钥足够随机和独特。

具体来说,以下是使用三个随机数的原因:

  1. 增强随机性和安全性:
  • 预主密钥是通过非对称加密传输的,它本身是随机生成的,但为了确保最终生成的对称密钥(会话密钥)具有更高的随机性和不可预测性,客户端和服务器各自生成的随机数也会参与密钥的生成。
  • 这些随机数的引入可以进一步防止生成的密钥被推测或重现,即使预主密钥可能被攻击者破解,也无法轻易预测出对称密钥。
  1. 防止重放攻击:
    如果只使用预主密钥生成对称密钥,那么在相同的预主密钥下,生成的对称密钥将是相同的,这可能会被攻击者利用进行重放攻击。通过引入客户端和服务器各自的随机数,即使预主密钥相同,每次生成的对称密钥也是不同的,从而有效防止重放攻击。
  2. 兼顾前向安全性:
    使用多个随机数能够确保即使某个密钥在未来被泄露,也无法用它来推导出过去会话中的密钥,这一特性称为前向安全性(Forward Secrecy)。通过多个随机数参与密钥生成,HTTPS能够更好地实现前向安全性,保护历史通信内容的安全。
  3. 防止中间人攻击:
    如果只依赖预主密钥,中间人可能会尝试通过攻击非对称加密算法来获取预主密钥。而加入随机数后,密钥生成的过程变得更加复杂,攻击者即使得到预主密钥,也无法生成正确的对称密钥。
    综上所述,HTTPS使用三个随机数生成对称密钥而非直接使用预主密钥,是为了在建立安全连接的过程中,进一步提升安全性、随机性,并抵御各种潜在的攻击。
  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值