欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

HTTPS工作原理

程序员文章站 2022-10-04 16:27:17
本文目标 读完本文,能够明白 什么是HTTPS、TLS(SSL),TLS和HTTPS的关系 什么是数字证书及认证过程 摘要、数字签名 对称、非对称加密算法 HTTPS概述 HTTPS,也称作HTTP over TLS。就是在安全的传输层上发送的HTTP。HTTPS经由HTTP进行通信,但利用SSL/ ......

本文目标

读完本文,能够明白

  • 什么是HTTPS、TLS(SSL),TLS和HTTPS的关系
  • 什么是数字证书及认证过程
  • 摘要、数字签名
  • 对称、非对称加密算法

HTTPS概述

HTTPS,也称作HTTP over TLS。就是在安全的传输层上发送的HTTP。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

HTTPS方案

安全的HTTP是可选的。因此,对于Web服务器发起请求时,我们需要有一种方式来告知Web服务器去执行HTTP的安全协议版本。这是在URL的方案中实现的。
请求一个客户端对某个Web资源执行某事务,它会去检查URL的方案。

  • 如果URL的方案是HTTP,客户端就会打开一条到服务器端口80(默认)的连接,并发送老的HTTP指令。
  • 如果URL方案是HTTPS,客户端就会打开一条到服务器端口443(默认)的连接,然后与服务器握手,以二进制格式与服务器交换一些SSL安全参数,附上加密的HTTP命令。

安全传输过程

在HTTPS中,客户端首先会打开一条到Web服务器端口443的连接。一旦建立TCP连接,客户端和服务器就会初始化SSL层,对加密参数进行沟通,并交换密钥。握手完成后,SSL初始化就完成了,客户端就可以把请求报文发送给安全层了。在将这些报文发送给TCP之前,要先对其加密。

SSL握手过程

在发送已加密的HTTP报文之前,客户端和服务器需要进行一次SSL握手,在这个握手的过程中,主要完成以下工作:

  • 交换协议版本号
  • 选择一个两端都了解的加密方式
  • 对两端身份进行认证
  • 生成临时的会话密钥,以便加密信道

HTTPS工作原理

  1. [明文] 客户端发送随机数client_random和支持的加密方式列表
  2. [明文] 服务器返回随机数server_random ,选择的加密方式和服务器证书链
  3. [RSA] 客户端验证服务器证书,使用证书中的公钥加密premaster secret 发送给服务端
  4. 服务端使用私钥解密premaster secret
  5. 两端分别通过client_random,server_random 和premaster secret 生成master secret,用于对称加密后续通信内容

数字证书

在访问HTTPS的网站中会看到地址栏左侧会有绿色的小锁头,点击打开可以看到这其实是网站的数字证书。

什么是数字证书

数字证书简称CA,它由权威机构给某网站颁发的一种认可凭证,这个凭证是被大家(浏览器)所认可的。以数字证书为核心的加密技术(加密传输、数字签名、数字信封等安全技术)可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的机密性、完整性及交易的不可抵赖性。使用了数字证书,即使您发送的信息在网上被他人截获,甚至您丢失了个人的账户、密码等信息,仍可以保证您的账户、资金安全。(百度百科)

为什么需要数字证书

互联网有太多的服务需要使用证书来验证身份,以至于客户端(操作系统或浏览器等)无法内置所有证书,需要通过服务端将证书发送给客户端。

客户端为什么需要验证数字证书

通过中间人攻击将请求拦截伪造证书等手段来欺骗客户端,存在安全风险。

如何验证数字证书的合法性

需要通过数字签名来验证数字证书等合法性。

HTTPS工作原理

数字签名

证书是一个站点的身份证,但是身份证也可以被伪造,为了保证这个证书是真的我们需要数字签名。我们会将证书内容用签名算法生成一个值,我们称之为“摘要”。然后将该摘要用主机的私钥加密,加密后的内容就是我们的数字签名。
当客户端收到附带数字签名的数字证书时,会通过数字证书中的证书签名算法将该证书生成一个摘要,在用服务器众所周知的公钥解密数字签名,看得到的摘要是否相同,相同那就说明证书是真的。
如果公钥解密后得到的摘要与生成的摘要不符那么可能有两种情况

  • 发送方身份不是目的主机
  • 目的主机发送的证书被篡改

对称和非对称加密算法

对称加密又称私钥加密,是一种混淆算法,能够在非安全信道上进行安全通信。
非对称加密又称公钥加密,它是另一种方法,使用两个密钥,而不是一个;其中一个密钥是私密的,另一个是公开的。顾名思义,一个密钥用于私人,另一个密钥会被所有人共享。这个两个密钥之间存在一些特殊的数学关系。RSA是目前普遍部署的非对称加密算法。

参考