数字证书相关知识
数字证书
概念
数字证书(TLS证书)是一个遵循 X.509 国际标准的电子文件。它最核心的作用是将“某个实体(如网站域名)”和“一个公钥”进行强制绑定。
它解决了什么问题
ssl证书(TLS证书)是网站与用户之间的信任凭证:
验证身份,证明是访问的确实是这家公司。加密传输,防止数据被窃听数据完整性,TLS 协议后续的加密通信能确保数据在传输过程中没有被中途修改
浏览器地址栏的那把锁和https,背后就是它。
由谁签发
由权威的CA(证书颁发机构)签发。
CA机构有Digicert、GlobalSign、Sectigo,国内的有CFCA、GDCA、上海CA、BJCA、天威诚信
证书的“信任链”(父子关系)
一张部署在你服务器上的证书,往往不是孤立的,而是三条“链条”:
- 服务器证书(叶子证书):你具体部署的那张,也就是你向 CA 申请下来的。
- 中间证书(Intermediate CA):为了安全,根 CA 不直接签服务器证书,而是由根 CA 签几个“中间 CA”,再由中间 CA 签你的证书。你需要把中间证书和服务器证书拼接在一起部署(否则浏览器报链不完整)。
- 根证书(Root CA):自签名证书,预置在操作系统/浏览器中。它是整个信任链的“源头”(你之前问的 Let’s Encrypt、DigiCert 的根就在浏览器里)。
服务器上常见的证书文件格式
| 后缀 | 本质格式 | 说明 |
|---|---|---|
| .key | 任意格式 | 私钥文件(不是证书),绝对不能公开,权限建议设为 600。 |
| .crt / .cer | X.509 证书 | 既可以存 PEM(文本),也可以存 DER(二进制)。Linux 常见 PEM。 |
| .pem | PEM 编码 | 文本格式(Base64)。以 —–BEGIN CERTIFICATE—– 开头。Nginx 通常用这种。 |
| .der | DER 编码 | 二进制格式。Windows 和 Java 常用。 |
| .p12 / .pfx | PKCS#12 格式 | 包含证书 + 私钥的一个加密压缩包,常用于 Windows IIS 或导入浏览器,有密码保护。 |
运维必知:Nginx 要求你提供 证书文件(.crt/.pem) 和 私钥文件(.key) 分开的路径。而 .p12 是你把两者打包在一起发给客户用的(比如苹果推送证书)。
证书分类
DV(Domain Validation)
只验证域名控制权,适合个人/博客
OV(Organization Validation)
额外验证企业真实存在,需提交营业执照,适合企业官网/一般业务
EV(Extended Validation)
最严格的人工尽调,适合银行/支付/电商
CSR(Certificate Signing Request)证书签名请求
你可以把它理解成一张“证书申请表”
当你需要向 CA(证书颁发机构)申请一张数字证书时,你不能直接把“公司名和域名”用邮件发过去,而必须在你的服务器上生成一个 CSR 文件,然后将这个文件提交给 CA。CA 会根据 CSR 里的信息生成最终的证书。
CSR包含什么
CSR 本质上是一段经过编码的文本(通常是 PEM 格式,以 —–BEGIN CERTIFICATE REQUEST—– 开头),它主要包含三部分核心信息:
- 申请人的公钥
你在生成 CSR 的同时,会在服务器本地生成一对密钥(公钥和私钥)。CSR 里只包含公钥,私钥必须绝对保密地留在你自己的服务器上。 - 申请人的身份信息(专有名称,DN)
CN(Common Name,通用名称)
O(Organization,组织/公司名)
OU(Organizational Unit,部门名称):如“IT 部”(可选)
L(Locality,城市)、ST(State/Province,省份)、C(Country,国家代码) - 申请人的数字签名
CSR 最后会使用你的私钥对上述所有信息进行签名。CA 收到 CSR 后,会用 CSR 里的公钥去验签,以证明“这个 CSR 确实是由拥有该私钥的申请人生成的”,防止网络传输中被篡改
CSR生成的简要流程
- 在你的服务器(Linux 用 OpenSSL,Windows 用 IIS 或 certreq 工具,或直接在云厂商控制台)生成一对密钥。
- 输入你的域名、公司名、地理位置等信息,工具会自动拼接成 CSR。
- 将生成的 CSR 复制出来,粘贴到 CA 机构的申请页面上。
- CA 验证你的域名所有权和公司信息后,使用 CA 的私钥对 CSR 里的公钥和信息进行签名,生成最终的数字证书(.crt 或 .pem)发还给你。
- 你将 CA 发给你的证书部署到服务器上,并与你本地保留的私钥配对使用。
SSL/TLS
概念
SSL:Secure Sockets Layer(安全套接层)
TLS:Transport Layer Security(传输层安全协议)。SSL 普及后,互联网工程任务组(IETF)接手了标准化工作,并将其更名为 TLS。TLS 是 SSL 的正式继承者。
版本演变
SSL 2.0 和 3.0:存在严重安全漏洞(如 POODLE 攻击),早在 2015 年前后就被各大浏览器和 RFC 标准正式废弃。
TLS 1.0 和 1.1:也已在 2020 年左右被主流浏览器和支付行业标准(PCI-DSS)弃用。
目前主流:TLS 1.2(自 2008 年发布,至今仍广泛使用)。
最新标准:TLS 1.3(2018 年发布,速度更快、握手次数更少、加密算法更先进,大幅缩减了漏洞攻击面)。
既然 SSL 已死,为什么我们还常叫“SSL 证书”
这是一个历史遗留的“语言习惯”。专业上的正确叫法:应该称为 “TLS 证书” 或 “数字证书”。
TLS位于网络协议的哪一层
| 标准TCP/IP (4层) | 教学常用(5层) | OSI 七层模型(7层) | 包含的代表内容 |
|---|---|---|---|
| 应用层 | 应用层 | 应用层(7) | HTTP DNS FTP |
| - | - | 表示层(6) | TLS/SSL 加密(理论位置)、数据压缩 |
| - | - | 会话层(5) | 建立连接会话(NFS) |
| 传输层 | 传输层 | 传输层(4) | TCP(可靠)、UDP(快速) |
| 网络层 | 网络层 | 网络层(3) | IP 地址路由、Ping(ICMP) |
| 网络接入层 | 数据链路层 | 数据链路层(2) | MAC 地址、以太网、Wi-Fi |
| - | 物理层 | 物理层(1) | 网线、光纤、电压、网口 |

