CA证书
约 893 字大约 3 分钟
2026-01-25
TLS 和 SSL 的关系非常密切,简单一句话概括: TLS 就是 SSL 的“升级版后继者”,现在大家实际用的几乎全是 TLS,但因为历史原因,很多人(包括浏览器、证书厂商、文档)还是习惯把它们统称为 “SSL” 或 “SSL/TLS”。
非对称加密的核心原则: - 私钥加密的内容,可以使用公钥进行解密 - 公钥加密的内容,可以使用私钥进行解密
CA,数字签名,数字证书
CA: 数字证书的签发机构
数字证书: 一张标准的数字证书= 服务器身份信息 + 服务器公钥 + CA的数字签名; 需要包含以下内容:
- 网站的域名
- 网站的公钥
- 证书的有效期
- 证书的用途
- CA的数字签名
数字证书 = { 明文部分: - 服务器身份信息 - 服务器公钥 - 使用的hash算法 - 有效期、用途等 签名部分: - CA 用私钥签名的 hash }
- 数字签名: 数字签名是一个"动作",指的是CA对网站的负责人提供的"网站信息+公钥"进行"签名"的过程
服务器申请证书的流程
服务器提供 A"服务器身份信息 + 服务器的公钥" 给CA
CA进行核实后, 将A使用hash算法进行处理[hash处理是为了方便后续的私钥加密],得到一串hash字符串B
CA使用自己的私钥对字符串B进行签名,得到签名后的数字证书[所有人都有CA的公钥]
最后的字符C就是数字证书了,CA将该数字证书返回给服务器
终端和有数字证书的服务器的交互
终端第一次请求服务器,在TLS建立连接阶段,服务器提供自己的数字证书C给终端
终端拿到数字证书C后,首先使用CA的公钥对其进行解密,拿到对应的hash字符串B[数字证书都是明文的]
终端再对明文的数字证书进行hash运算[数字证书上会明确标注使用了什么哈希算法],得到hash字符串D
如果hash字符串D = 字符串B, 则说明该数字证书没有被中途更改过。
终端再生成"会话密钥",用服务器的公钥进行加密,发送给服务器
服务器用自己的私钥解密信息,拿到"会话密钥",之后双方都是用"会话密钥"进行沟通
现实中服务器使用证书的场景
典型 HTTPS 证书流程
服务器生成私钥 + CSR
↓
把 CSR 提交给 CA
↓
CA 签发证书(crt / pem)
↓
把证书 + 私钥部署到 Web 服务器
↓
服务启用 HTTPS
“生成 CSR” = 在服务器上生成一对公钥 + 证书签名请求文件,用来向 CA 申请 HTTPS 证书
CSR(Certificate Signing Request)包含什么?
- 公钥
- 域名(CN / SAN)
- 组织信息(可选)
云平台代生成 CSR + 私钥(托管模式)
实际流程是这样(只是你“看不到”):
阿里云证书服务 ├─ 在阿里云内部生成 私钥 [因为云计算的服务器是阿里云自己的,所以他可以直接代为申请了] ├─ 在阿里云内部生成 CSR ├─ 自动提交给 CA ├─ CA 返回证书 └─ 证书直接可用于 SLB / CDN / Nginx
