计算机网络第1篇-HTTPS的原理

355 阅读10分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

本文是我在掘金平台发表于2022年4月份的,从发表最初累计第13篇博客,希望大家关注我,我将会持续在后端和大数据等领域进行书写更多的文章。

摘要

本文的标题是《2204-21-HTTPS的原理》,介绍了HTTPS的原理和一些常见的面试问题。

引言

Http是不安全的,因为它是明文传输的,所以存在被截获、解析、伪造、篡改、内容不完整的危险。因此上Https诞生解决了这个问题。

HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol) 协议,而HTTPS 的全称是 Hypertext Transfer Protocol Secure。 HTTPS 中,使用传输层安全性(TLS)或安全套接字层(SSL)对通信协议进行加密。也就是 HTTP + SSL(TLS) = HTTPS。

面试中总爱问HTTPS的原理,那么今天就来解释一下HTTPS相关的内容。

本文的贡献有:

(1)围绕HTTPS整理了一些优秀的文章,附在参考里,并且通过相关工作介绍了它们的核心内容。

(2)整理一下面试经常文档问题,既可以用来应付面试,也可以用来检测自己的掌握程度。

认识 SSL/TLS

TLS(Transport Layer Security)SSL(Secure Socket Layer) 的后续版本,它们是用于在互联网两台计算机之间用于身份验证加密的一种协议。

对称加密

对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES,RC5,3DES等;对称加密主要问题是共享秘钥,即你的计算机(客户端)知道另外一台计算机(服务器)的私钥秘钥,否则无法对通信流进行加密解密。

非对称加密

任何使用公钥加密过的内容,只有私钥才能解开。(用于加密传输)

任何被私钥加密的内容,公钥都可以确认被对应私钥加密过的事实。(用于认证)

1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。

对称加密算法不同,非对称加密算法需要两个密钥公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法

数据的加密和解密过程是通过密码体制和密钥来控制的。密码体制的安全性依赖于密钥的安全性,现代密码学不追求加密算法的保密性,而是追求加密算法的完备,即:使攻击者在不知道密钥的情况下,没有办法从算法找到突破口。根据加解密算法所使用的密钥是否相同,或能否由加(解)密密钥简单地求得解(加)密密钥。密码体制可分为对称密码体制和非对称密码体制。

非对称密码体制也叫公钥加密技术,该技术是针对私钥密码体制(对称加密算法)的缺陷被提出来的。与对称密码体制不同,公钥加密系统中,加密和解密是相对独立的,加密和解密会使用两把不同的密钥,加密密钥(公开密钥)向公众公开,谁都可以使用,解密密钥(秘密密钥)只有解密人自己知道,非法使用者根据公开的加密密钥无法推算出解密密钥,这样就大大加强了信息保护的力度。公钥密码体制不仅解决了密钥分配的问题,它还为签名和认证提供了手段。

非对称密码算法有很多,其中比较典型的是RSA算法,它的数学原理是大素数的分解。

加密和非对称加密结合

公钥-私钥组成的密钥对是非常有用的加密方式,因为公钥是可以公开的,而私钥是完全保密的,由此奠定了非对称加密的基础。

非对称加密就是加密和解密使用的不是相同的密钥:只有同一个公钥-私钥对才能正常加解密。

因此,如果小明要加密一个文件发送给小红,他应该首先向小红索取她的公钥,然后,他用小红的公钥加密,把加密文件发送给小红,此文件只能由小红的私钥解开,因为小红的私钥在她自己手里,所以,除了小红,没有任何人能解开此文件。

非对称加密相比对称加密的显著优点在于,对称加密需要协商密钥,而非对称加密可以安全地公开各自的公钥,在N个人之间通信的时候:使用非对称加密只需要N个密钥对,每个人只管理自己的密钥对。而使用对称加密需要则需要N*(N-1)/2个密钥,因此每个人需要管理N-1个密钥,密钥管理难度大,而且非常容易泄漏。

但是非对称加密的缺点是,效率太低。

所以,在实际应用的时候,非对称加密总是和对称加密一起使用。假设小明需要给小红需要传输加密文件,他俩首先交换了各自的公钥,然后:

  1. 小明生成一个随机的AES口令(对称加密的秘钥),然后用小红的公钥通过RSA加密这个口令,并发给小红;
  2. 小红用自己的RSA私钥解密得到AES口令;
  3. 双方使用这个共享的AES口令用AES加密通信。

可见非对称加密实际上应用在第一步,即加密“AES口令”。这也是我们在浏览器中常用的HTTPS协议的做法,即浏览器和服务器先通过RSA交换AES口令,接下来双方通信实际上采用的是速度较快的AES对称加密,而不是缓慢的RSA非对称加密。

https通信举例

以下例子来自参考[3]中的科普视频。

image.png

要说的是,一个网站需要向https鉴权机构申请认证https服务,才能获得签字认证的证书。拿到这个证书以后,就需要保存在自己的服务器上面。俄乌战争以后,西方国家掌控的https鉴权机构撤销了对俄罗斯网站的https服务认证。欺人太甚啊。俄罗斯的网站就不能被全世界通用的浏览器认可为安全的了。

上图其中包括一个完整的SSL协议握手的全过程。

另外一张图也可以参考,来自参考[5].

image.png

Https服务认证

下面这个例子是如何获得Https服务认证的一个过程,来自参考[3]。

image.png

获取证书(经过CA认证过的公钥)有两种方式

1. 从权威机制购买证书。

  • 安全证书由国际权威的证书机构(CA),如VeriSign和Thawte颁发,图片中的Global Sign就是其中一家,它们保证了证书的可信性。一个安全证书只对一个IP有效,多个IP必需购买多个证书。

2. 创建自我签名的证书。

  • 如果通信双方只关心数据在网络上的可以安全传输,并不需要对方进行身份验证,这种情况下,可以创建自多签名证书。这证书达不到身份认证的目的,但可以用于加密通信。

常见的面试问题

Q: 为什么需要证书?

A: 防止“中间人”攻击,确定会话双方的身份

Q: 使用 HTTPS还会被抓包吗?

A: 可以被抓包,只不过抓包后看不到明文,无法篡改

Q: HTTPS的加密过程是怎么样的?

A: 客户端向服务端索要并验证其公钥,用公钥对TLS握手过程中产生的随机数进行加密生成会话密钥,双方采用会话密钥进行加密通信

Q: HTTPS 握手过程中,客户端如何验证证书的合法性

A: 数字证书包括序列号、用途、颁发者、有效时间、公钥,如果只是简单的将这些信息发送给浏览器,中间人可以很轻易的将公钥改成自己的公钥,解决办法就是使用数字签名。将证书的信息生成摘要,将摘要用CA的私钥进行加密,生成数字签名。服务器将数字证书和数字签名一同发送给浏览器,因为有数字签名,所以数字证书无法被中间人修改(修改后的话会导致摘要变了,数字签名实现了不可否认)。浏览器拿到数字证书,根据“证书链”去验证其可信度。

Q: 介绍下 HTTPS 中间人攻击

A: 在传输过程中截获篡改数据。CA证书可以解决中间人攻击的问题

相关工作

廖雪峰在他的博客里[1]解释了对称加密和非对称加密结合的好处。

程序员cxuan在他的博客[2]里系统详细的介绍了https的对称加密和非对称加密,以及http如何做认证的,介绍了SSL/TLS协议。

Zhengyaing通过他的科普视频[3]通俗易懂、言简意赅的介绍了https加密的全流程。

知乎上的一个问题[4],RSA的公钥和私钥到底哪个才是用来加密和哪个用来解密?网友回答,既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。

zoro-web在他的Github仓库Issue[5]里分享了关于HTTP协议,TCP/IP协议,HTTP工作原理,SSL工作原理,SSL握手。

参考

[1]廖雪峰,非对称加密算法,www.liaoxuefeng.com/wiki/125259…

[2]程序员cxuan,https算法,juejin.cn/post/684490…

[3]Zhengyaing, 3分钟介绍HTTPS, www.bilibili.com/video/BV1j7…

[4]知乎网友张三,RSA的公钥和私钥到底哪个才是用来加密和哪个用来解密?www.zhihu.com/question/25…

[5]zoro-web,SSL的原理,github.com/zoro-web/bl…

[6]百度百科,对称加密算法,baike.baidu.com/item/%E5%AF…

[7]百度百科,非对称加密算法,baike.baidu.com/item/%E9%9D…

[8]miniYM, HTTP详解之HTTPS(含面试题),juejin.cn/post/693918…

[9]LinDaiDai,HTTPS面试,github.com/LinDaiDai/n…

[10]知乎,HTTPS 加密了什么内容?,www.zhihu.com/question/28…