这篇文章上次修改于 268 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

HTTPS

为什么需要HTTPS?

HTTP的通信是以明文的方式传输的,传输的内容很容易被劫持,所以并不能保证双方的的身份都是真实地,这时我们在通信前需要先建立一个安全通道来保证们的信息传输的安全,不被第三方劫持,使用户与服务器数据交互更可靠,所以HTTP加上了TLS/SSL 协议(构建可进行加密传输、身份认证的网络协议),亦称HTTPS协议。

浏览器怎么知道是当前是HTTPS协议,而不是HTTP协议呢?

当用户访问一个域名时,浏览器是先进行HTTP通信的,服务端收到用户的请求,会在响应头中告诉浏览器服务端支持HTTPS协议,然后两者进行协议协商(将HTTP升级为HTTPS),待协商完成后,浏览器才能使用HTTPS,并且浏览器会记住这个服务端的域名是支持HTTPS协议的,再次请求时便都使用HTTPS进行通信。

HTTPS的那些事

1、概念

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),在HTTP协议的基础上添加了TLS/SSL协议,也可以说是基于TLS/SSLHTTP协议。HTTPS协议安全是由SSL协议实现的。

TLS与SSL的关系

SSLTLS的前身,TLSSSL的后续版本。

2、特点

  • 数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么 。
  • 数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收 。
  • 身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方 。

3、HTTPS涉及的密码学

密码学的处理对象是数字和字符串

散列是一种数据一旦转换为其他形式将永远无法恢复的加密技术。

加密:对称加密(AES、DES、3DES),非对称加密(RSA

对称加密:指双方共用一个密钥进行加解密,速度快

  • 要考虑在通信安全的前提下协商出一个密钥,自己并不能保证安全性,所以密钥很容易被第三方截取,伪造通信。
  • 与不同的用户通信,都要为每一个用户生成一个共同的密钥,所以密钥太多会成为双方的负担。

非对称加密(RSA):一对密钥由公钥和私钥组成(可以使用很多对密钥)。私钥解密公钥加密数据,公钥解密私钥加密数据(私钥公钥可以互相加密解密)。

  • 私钥由一方保管,公钥可给任何用户
  • 缺点:安全速度较慢

混合加密:用非对称加密算法加密对称密钥。

  • 用对称密码加密消息
  • 通过伪随机数生成器生成对称密码加密中使用的会话密钥
  • 用公钥密码加密会话密钥
  • 从混合密码系统外部富裕公钥密码加密时使用的密钥。

密钥交换算法: Diffie-Hellman算法是一种著名的密钥协商算法,这种算法可以使得信息交换的双方通过公开的非安 全的网络协商生成安全的共享密钥。

  • AliceBob确定两个大素数ng,这两个数不用保密
  • Alice选择另一个大随机数x,并计算A如下:A=gx mod n
  • AliceA发给Bob
  • Bob选择另一个大随机数y,并计算B如下:B=gy mod n
  • BobB发给Alice
  • 计算秘密密钥K1如下:K1=Bx mod n
  • 计算秘密密钥K2如下:K2=Ay mod n K1=K2,因此AliceBob可以用其进行加解密

4、CA(证书签发机构)

通过CA发放的证书完成密钥的交换,实际上是利用非对称的加密算法完成数据加密密钥的安全交换,然后再利用数据加密密钥完成数据的安全交换。

数字证书:数字证书是互联网通信中标识双方身份信息的数字文件,由CA签发。

CA(certification authority):数字证书的签发机构。作为权威机构,其审核申请 者身份后签发数字证书,这样我们只需要校验数字证书即可确定对方的真实身份。

CA的工作流程

  • 首先服务器向CA请求TLS证书,并将自己的公钥上传给CA
  • CA创建证书,证书将包含必要的数据,例如服务器名称, 服务器的公钥等。
  • 浏览器和操作系统自带Digicert等权威机构的公钥。
  • .当浏览器收到服务签名证书时,它将使用公钥从签名生成哈希值,它还将使用证书中指定的散列算法生成数据(证书)的散列,如果两个哈希值匹配,则签名验证成 功并且证书是可信的。
  • 现在浏览器可以使用证书中指定的服务器公钥继续进行身份验证过程。

浏览器如何验证服务器证书的有效性

证书颁发机构是为服务器创建并签署证书,很少有组织从事这项工 作,即Digicert,Geotrust,Comodo等。如果他们正在为所有服务器 签署证书,则必须为所有签名使用相同的私钥,如果它被盗,那么所 有的信任都会丢失。为了解决这个问题并增加更多的平均信息量,引入了中间CA(intermediate CA)的概念。

服务器使用中级证书颁发机构的签名,因此,在与浏览器通信时,服 务器将共享两个证书:

  • 包含服务器的公钥,即实际的服务器证书;
  • Root CA 颁发的 intermediate CA 证书。

在签名验证期间,浏览器首先使用已经存储在浏览器中的Root CA的 公钥来验证中间证书的数字签名,如果成功,浏览器现在可以信任中 间证书及其公钥。现在使用此公钥,浏览器将验证原始服务器证书的 签名,该组织可以注册为intermediate CA,以便为其域签署证书。

5、SSL/TLS协议

ransport Layer Security - TLS(传输层安全协议),及其前身安全套接层(Secure Sockets Layer - SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。

TLS/SSL 其实就是通过非对称加密,生成对称加密的秘钥过程

特点:SSL/TLS协议是一种记录协议,扩展性良好,可以很方便的添加子协议

HTTPS协议的安全性由SSL协议实现,当前使用的TLS协议 1.2 版本包含了四个核心子协 议:握手协议、密钥配置切换协议、应用数据协议及报警协议

  • TLS适用于对称密钥
  • 对称密钥可以通过安全密钥交换算法共享
  • 如果请求被截获,密钥交换可能会被欺骗
  • 使用数字签名进行身份验证
  • 证书颁发机构和信任链。

6、HTTPS的通信过程

  • ClientHello:客户端发送所支持的 SSL/TLS 最高协议版本号和所支持的加密算法集合及压缩方法集合等信息给服务器端。
  • ServerHello:服务器端收到客户端信息后,选定双方都能够支持的 SSL/TLS 协议版本和加密方法及压缩方法,返回给客户端。
  • SendCertificate(可选):服务器端发送服务端证书给客户端,让客户端验证自己的身份。
  • RequestCertificate(可选):如果选择双向验证,服务器端向客户端请求客户端证书。
  • ServerHelloDone:服务器端通知客户端初始协商结束。
  • ResponseCertificate(可选):如果选择双向验证,客户端向服务器端发送客户端证书,让服务端验证自己的身份。
  • ClientKeyExchange:客户端使用服务器端的公钥,对客户端公钥和密钥种子进行加密,再发送给服务器端。
  • CertificateVerify(可选):如果选择双向验证,客户端用本地私钥生成数字签名,并发送给服务器端,让其通 过收到的客户端公钥进行身份验证。
  • CreateSecretKey:通讯双方基于密钥种子等信息生成通讯密钥。
  • ChangeCipherSpec:客户端通知服务器端已将通讯方式切换到加密模式。
  • Finished:客户端做好加密通讯的准备。
  • ChangeCipherSpec:服务器端通知客户端已将通讯方式切换到加密模式。
  • Finished:服务器做好加密通讯的准备。
  • Encrypted/DecryptedData:双方使用客户端密钥,通过对称加密算法对通讯内容进行加密。
  • ClosedConnection:通讯结束后,任何一方发出断开 SSL 连接的消息。

总结

HTTPS的核心是在TLS握手过程中,怎么验证对方身份的真实性和怎么在安全的前提下生成双方通信所依赖的对称密钥。CA数字签名解决双方身份验证,混合加密方式解决了在安全的前提下生成对称密钥。