HTTP学习笔记:HTTPS

HTTPS是最常见的HTTP安全版本。HTTPS将HTTP协议与一组强大的对称、非对称和基于证书的加密技术结合在一起,使得HTTPS不仅很安全,而且很灵活,很容易在处于无序状态的、分散的全球互联网上进行管理,因此得到很广泛的应用。

目前它得到很广泛的应用,所有主要的商业浏览器和服务器都提供HTTPS。目前它已经成为基于Web的电子商务快速成长的主要推动力。本文将介绍HTTPS的相关知识。

1. 概述

HTTPS是在安全的传输层上发送的HTTP,它在将HTTP报文发送给TCP之前,先将其发送给了一个安全层对其进行加密。现在,HTTP安全层是通过SSL及其代替协议TLS来实现的。下图给出了HTTP和HTTPS层次的对比。

HTTP与HTTPS层次对比

众所周知,在安全的HTTPS协议中,URL的方案前缀为https,如https://github.com/。HTTP的默认服务器端口号是80,而HTTPS的端口号是443。在未加密的HTTP中,客户端会打开一条到Web服务器80端口的TCP连接,发送一条请求报文,接收一条响应报文,最后关闭连接。而由于SSL安全层的存在,HTTPS中首先客户端打开一条到Web服务器端口443的连接。一旦建立TCP连接,就会初始化SSL层,对加密参数进行沟通,并交换密钥(这个过程成为SSL握手)。握手完成之后,SSL初始化就完成了,客户端就可以将请求报文进行加密然后发送给安全层。

2. SSL握手和服务器证书

在通过网络传输任何已加密的HTTP数据之前,SSL会发送一组握手数据来建立通信连接,主要完成以下工作:(流程图如下所示)

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

SSL握手(简化版)流程

SSL支持双向认证,即证书可以在客户端和服务器之间互相传送。其中客户端并不经常使用证书,而HTTPS事务则总要求服务器提供证书。服务器证书是一个显示了组织的名称、地址、服务器DNS域名以及其他信息的X.509 v3派生证书(如下图所示)。客户端软件可以检查证书,以确保所有的信息都是可信的。

HTTPS证书示例

大部分现代浏览器都会对证书进行简单的完整性检查,主要包含以下步骤:

  • 日期检测:检查证书的起始日期和结束日期,以确保证书仍然有效。
  • 签名颁发者可信度检测:每个证书都是由某些证书颁发机构(CA)签发的,它们负责为服务器担保。任何人都可以生成证书,但有些CA是非常著名的组织,它们通过非常清晰的流程来验证证书申请人的身份及商业行为的合法性。
  • 签名检测:一旦判定签名授权是可信的,浏览器就要对签名使用签名颁发机构的公开密钥,并将其与校验码进行比较,以查看证书的完整性。
  • 站点身份检测:为防止服务器复制其他人的证书,或拦截其他人的流量,大部分浏览器都会试着去验证证书中的域名与它们所对话的服务器域名是否匹配。

SSL是个复杂的二进制协议,幸运的是,借助一些商业或开源的库,编写SSL客户端和服务器并不十分困难。其中,OpenSSL是SSL和TLS最常见的开源实现。OpenSSL项目的目标是开发一个强壮的、具有完备功能的商业及工具集,以实现SSL和TLS协议以及一个全功能的通用加密库。

参考文献:人民邮电出版社《HTTP权威指南》第4章14.7-14.8

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器