从零理解 HTTPS 证书:CA 证书到底是怎么创建的?

很多人刚接触 HTTPS 时都会产生一个疑问:

数字证书不是任何人都能生成吗?那浏览器为什么会相信某些证书?

这篇文章会从 证书的实际创建流程讲清楚这个问题。


一、HTTPS 的核心问题

在互联网上访问网站时,浏览器需要确认两件事:

1️⃣ 这个网站是不是我想访问的那个网站
2️⃣ 我们之间的通信不会被别人偷看

HTTPS 使用 TLS 协议解决这两个问题。

其中最关键的就是 数字证书(TLS Certificate)。


二、证书其实任何人都可以生成

首先要明确一点:

生成证书本身非常容易。

例如用 OpenSSL 一条命令就能生成:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem

这会生成:

  • 私钥(private key)
  • 证书(certificate)

问题是:

任何人都可以生成证书
那浏览器为什么会相信某些证书?

答案是:

因为证书需要“可信机构签名”。


三、CA:证书颁发机构

在 HTTPS 体系里,有一种机构叫:

CA(Certificate Authority)

例如:

  • Let’s Encrypt
  • DigiCert
  • GlobalSign

它们的作用类似:

互联网的“公证处”。

流程是:

网站 → 申请证书
CA → 验证网站身份
CA → 签发证书

浏览器只信任 这些 CA 签发的证书。


四、申请 HTTPS 证书需要提供什么?

申请证书时通常需要提供:

1 网站域名

例如:

example.com
www.example.com

CA 需要确认:

你真的拥有这个域名。

验证方法通常是:

  • DNS 记录验证
  • 在网站服务器放一个验证文件
  • 邮件验证

2 公钥

网站需要先生成一对密钥:

公钥(public key)
私钥(private key)

私钥:

只保存在服务器
绝不能泄露

公钥:

提交给 CA
写入证书

3 组织信息(某些证书)

一些证书还需要提供:

  • 公司名称
  • 地址
  • 注册信息

这种证书叫 EV证书(扩展验证证书)。


五、CA 如何生成证书

当 CA 验证完成后,会生成一个证书文件。

证书里包含:

域名
公钥
证书有效期
签发机构
签名

其中最关键的是:

CA 的数字签名。

签名本质上是:

CA 用自己的私钥
对证书内容进行加密签名

六、浏览器如何验证证书

当你访问:

https://example.com

浏览器会收到服务器发送的证书。

然后做三件事:

1 检查域名

证书里的域名是否匹配:

example.com

2 检查签名

浏览器会用 CA 的公钥验证签名。

如果签名正确:

说明证书确实是 CA 签发的

3 检查是否可信

浏览器和操作系统里内置了一些 根证书。

例如:

  • Google Chrome
  • Mozilla Firefox
  • Microsoft Edge

它们都保存了一份 可信 CA 列表。

只要证书的签发机构在这个列表里:

浏览器就会信任这个网站

七、为什么还会有 Root CA 和中级 CA

现实中 CA 不会直接用最重要的密钥签证书。

因此会形成一个结构:

Root CA(根证书)
     ↓
Intermediate CA(中级证书)
     ↓
网站证书

原因是:

保护根证书的安全。

Root CA 的私钥通常:

  • 离线保存
  • 极少使用

日常签证书的是 中级 CA。

整个体系叫:

Public Key Infrastructure


八、如果有人伪造证书会怎样?

如果攻击者自己生成一个证书:

example.com
签发者:自己

浏览器会发现:

签发机构不在可信列表

于是出现警告:

Your connection is not private

这就是 HTTPS 防止假网站的机制。


九、总结

HTTPS 的信任体系其实很简单:

网站生成密钥
      ↓
向 CA 申请证书
      ↓
CA 验证域名并签名
      ↓
浏览器验证 CA 签名

所以浏览器信任的不是证书本身,而是:

签发证书的 CA。

更多推荐