> ## Content Index
> Fetch the complete content index at: https://huizhou92.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# 了解 HTTPS：关键点和流程详解
- URL: https://huizhou92.com/e4-ba-86-e8-a7-a3-https-e5-85-b3-e9-94-ae-e7-82-b9-e5-92-8c-e6-b5-81-e7-a8-8b-e8-af-a6-e8-a7-a3/
- Published: 2024-05-27T10:30:32.000Z
- Updated: 2026-09-08T02:32:12.000Z
- Description: 了解 HTTPS：关键点和流程详解. 众所周知，HTTPS可以解决HTTP明文传输过程中的安全性问题，尤其是中间人攻击问题。其最初的全称是HTTP over SSL（或者说 http Security）。其中的SSL是指Secure Sockets Layer，后来SSL被TLS（Transport Laye。
- Author: huizhou92
- Tags: tech, https, #lang-zh-cn

众所周知，HTTPS可以解决HTTP明文传输过程中的安全性问题，尤其是中间人攻击问题。其最初的全称是HTTP over SSL（或者说 http Security）。其中的SSL是指Secure Sockets Layer，后来SSL被TLS（Transport Layer Security ）所取代。今天我们就来总结一下HTTPS的要点

> This article is first published in the medium MPP plan. If you are a medium user, please follow me in [medium](https://medium.huizhou92.com/?ref=huizhou92.com). Thank you very much.

## HTTPS 版本

当前人们一般将SSL,TLS这两个协议统称为SSL/TLS协议，但大家日常说SSL的时，默认还是指TLS协议。  
TLS 协议在版本上有1.1、1.2、1.3，其中1.2曾经是主流，现在推荐使用改进后的 TLS 1.3，它升级了HandShake和Record协议，会使得通信更加安全和高效。

![图片](https://images.yixiao9206.cn/blog-images/2024/05/22e2063c4833a437e681f43255089763.png)

**安全上**，TLS 1.3 移除了一些在 TLS 1.2 中被认为是不安全的加密算法，如 RC4、DES、3DES、AES-CBC 和 MD5 等，这样可以减少安全漏洞的风险。

**性能上**，TLS 1.3 减少了握手过程中的往返次数（RTT），从而加快了连接的建立速度。在最佳情况下，TLS 1.3 只需要一次往返就可以完成握手，同时支持0-RTT扩展，而 TLS 1.2 需要两次或更多。

![图片](https://images.yixiao9206.cn/blog-images/2024/05/fa599169a9d68465dcb66b42f6e4226c.png)

当然，作为设计精良的互联网协议，TLS 1.3也通过hello握手消息的扩展协议考虑了最大化向前兼容，这点不再赘述。

![图片](https://images.yixiao9206.cn/blog-images/2024/05/233d0bfa01e9c759211873abb971a080.png)

## HTTPS 核心流程

依据不同版本的差异，细节流程会略有不同，不追求严谨细致的情况下，HTTPS工作流程如下。  
![https://blog.bytebytego.com/i/53596514/how-does-https-work](https://images.yixiao9206.cn/blog-images/2024/05/1c1c9c816302b79718955b07442fc097.png)

bytebytego 的这个图非常具有表现力，展示了关键的交互和核心的加密流程。最关键的几步在于如何建立TCP链接，如何通过非对称加密协商获取对称加密的密钥，以及最后通过对称加密进行通信。

HTTPS，准确来说是TLS，设计严密，其中最关键的是Record Layer和几种Protocol，前者是数据承载管道，各种子Protocol都跑在它上面 ，其中的Record是TLS数据收发传输的基本单位，类似TCP的segment，IP的Packet，这也是下面这幅图的含义。

![图片](https://images.yixiao9206.cn/blog-images/2024/05/08895cd805cbe5719c80662f7be74df7.webp)

上图中Protocol里最重要的是Handshake协议，针对Client Hello进行抓包后，在Wireshark中体现得会更清晰。

![图片](https://images.yixiao9206.cn/blog-images/2024/05/9aa18213dbe2e2651ea227fe404ad6b5.png)

## HTTPS SNI 扩展

互联网早期，单机服务器没那么强大，配套的HTTPS比如SSL v2也有设计缺陷。那时有一个假定，认为拥有一个IP的单台服务器只会托管一个域名服务，所以DNS解析以后，直连IP时就能非常确定要使用具体某个域名的证书。但后面云计算、虚拟主机大爆发，以及IPv4中IP的稀缺性，一台服务器托管多个域名的场景无可避免，这时服务器面临无法知道客户端到底想要访问哪个域名的SSL证书的问题，从而导致了HTTPS SNI的出现。

![图片](https://images.yixiao9206.cn/blog-images/2024/05/2af263a13abf6545b697a0dabd01785d.jpeg)

SNI（Server Name Indication）是TLS协议的一个扩展，它允许客户端在握手过程中向服务器发送目标主机名信息。这样，服务器就可以在同一个IP地址上托管多个域名的HTTPS服务，并为每个域名提供正确的证书。

这个问题看似简单，在HTTPS逐渐普及，各互联网服务商走向全站HTTPS化的早期，很多CDN厂商甚至都是不支持SNI的。当然在2024年的今天，无论是Nginx等软件生态，还是各厂商，都已经支持了的。

SNI信息是通过TLS握手协议传输的，抓包示意大概是下面这样子。

![图片](https://images.yixiao9206.cn/blog-images/2024/05/632f58a2b5911fc34ca5f6716b0e9992.png)

具体到实操，可以使用openssl s\_client子命令中的-servername选项来指定SNI：

```shell
openssl s_client -connect example.com:443 -servername example.com

```

如果使用OpenSSL Library，也可以使用SSL\_set\_tlsext\_host\_name和BIO\_set\_conn\_hostname等函数来在代码中设置。

## HTTPS 证书机制

HTTPS通过公钥 体系里的非对称、对称及摘要算法，实现了一系列的加解密、签名、验签等功能，基本实现了安全四大特性：机密性、完整性，身份认证和不可否认。如典型的中间人攻击（Man-in-the-middle attack，MITM），也都有了解决方案。

![图片](https://images.yixiao9206.cn/blog-images/2024/05/689e0bbb76ecda3332862356747ea71d.png)

这里为了解决公钥的信任问题，又引入了证书和信任链机制。证书（Certificate）是由第三方CA（Certificate Authority，证书认证机构）颁发的，本质上是一个文件，通常是.crt、.cer 或 .pem 等扩展名存储。这个文件按照一定的标准（如X.509）编码，包含了公钥、证书持有者信息、颁发机构信息、有效期和数字签名等信息。

有一些世界知名的 CA 机构，比如 `DigiCert`、`VeriSign`、`Entrust`、`Let’s Encrypt` 等，它们签发的证书分 DV、OV、EV 三种，对应不同的可信程度。但CA自己也有信任问题，小CA的信任靠大CA签名认证，但逐层向上到了链条的最后，就是 Root CA，就只能用“自签名证书”（Self-Signed Certificate）或者“根证书”（Root Certificate）了。

![图片](https://images.yixiao9206.cn/blog-images/2024/05/c901e34959e328f1b9b5be02155d7f1f.png)

大部分操作系统和浏览器都内置了各大 CA 的根证书，HTTPS通信时会顺着证书链（Certificate Chain）逐层验证到根证书。

![图片](https://images.yixiao9206.cn/blog-images/2024/05/1fe05d3e7e1932f5754b71d4c7324a2d.png)

## HTTPS 软件生态

HTTPS，或是说TLS，生态虽然丰富，但OpenSSL一家独大。它几乎支持所有公开的加密算法和协议，已经成为了事实上的标准，许多应用软件都会使用它作为底层库来实现 TLS 功能，比如著名的 Apache、Nginx 等。

![图片](https://images.yixiao9206.cn/blog-images/2024/05/0b6cfa177e827e1d5ff6659024b945c8.png)

OpenSSL源于SSLeay，其后开枝散叶，形成众多分支，如 Google 的 BoringSSL、OpenBSD 的 LibreSSL。OpenSSL的内容也极其庞杂，可以优先使用openssl命令进行学习，具体可以参考ChatGPT。

## HTTPS 加速方案

HTTPS很美好，但美好的事物都有成本。所以关于HTTPS全站铺开后的各种优化，基本上可以写成独立的一篇文章，这里先简单提下。

首先是优化RTT，这个在IO密集型的互联网场景下尤为重要，主要是通过升级协议，如升级HTTP/3，升级TLS 1.3，都可以通过不同原理来优化RTT。其次是优化单步骤性能，如增加TLS加速卡，设置单独的TLS集群或模块等，还有一些TLS session resumption等名词也可以关注。  
我以前写过一篇文章分享为什么HTTPS为什么这么慢的文章，有兴趣可以阅读一下。  
[Why does HTTPS need 7 handshakes and 9 times delay?](https://huizhou92.com/content/files/2026/09/why-does-https-need-7-handshakes-and-9-times-delay-e29d0a9d046a-1.html)

## 参考资料

[What's the difference between HTTP and HTTPS?](https://www.globalsign.com/en/blog/the-difference-between-http-and-https?ref=huizhou92.com)  
[how-does-https-work](https://blog.bytebytego.com/i/53596514/how-does-https-work?ref=huizhou92.com)

---

- [本文长期连接](https://huizhou92.com/e4-ba-86-e8-a7-a3-https-e5-85-b3-e9-94-ae-e7-82-b9-e5-92-8c-e6-b5-81-e7-a8-8b-e8-af-a6-e8-a7-a3/)
- 如果您觉得我的博客对你有帮助，请通过 [RSS](https://huizhou92.com/sitemap.xml)订阅我。
- 或者在[X](https://x.com/@piaopiaopig?ref=huizhou92.com)上关注我。
- 如果您有[Medium](https://medium.huizhou92.com/?ref=huizhou92.com)账号，能给我个关注嘛？我的文章第一时间都会发布在Medium。