签发类型
根据签发机构类型,TLS证书签发可以划分为两种:
- 公信CA(Certificate Authority)签发的证书(如DigiCert、Let’s Encrypt、Sectigo等)
- 企业内部私有CA签发的证书。
公信CA签发与企业内部私有CA签发,两者的区别是公信力不同。一般情况下,互联网环境不应信任企业内部私有CA签发的证书。
下面主要详细说明最常见的公信CA签发域名验证(DV)、组织验证(OV)、扩展验证(EV)证书的过程,以及全网最流行的免费证书Let’s Encrypt为例的自动化流程。
公信CA签发证书的通用流程(DV/OV/EV)
-
生成CSR(Certificate Signing Request,证书签名请求)
- 在你的服务器上首先生成一对密钥:私钥(private key)和公钥(public key)。
- 使用私钥生成CSR文件,CSR里包含了:
- 域名(Common Name 或 SAN 列表)
- 组织信息(OV/EV证书需要)
- 公钥
- 国家、省份、城市、公司名称等(OV/EV需要)
- 常用命令(OpenSSL):
openssl req -new -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
-
选择CA并提交申请
- 登录CA官网(或通过ACME协议自动化),选择证书类型(DV/OV/EV)、有效期。
- 上传CSR(或者有些CA让你直接在网页填写信息后帮你生成)。
-
域名控制权验证(DCV,Domain Control Validation)
这是所有公信证书都必须完成的步骤,证明你确实控制这个域名。常见三种方式:- HTTP验证(最常见):CA给你一段随机token,你需要在域名下
.well-known/acme-challenge/路径放一个特定文件
示例:http://yourdomain.com/.well-known/acme-challenge/xxxxxx - DNS验证:CA给你一段TXT记录,你需要在域名DNS管理面板添加 _acme-challenge.yourdomain.com TXT "xxxxxx"
- Email验证(较少用):给域名whois邮箱或管理员邮箱(如admin@、webmaster@)发邮件,点链接确认
DV证书只做这一步;OV/EV还要额外验证组织合法性。
- HTTP验证(最常见):CA给你一段随机token,你需要在域名下
-
(OV/EV专属)组织信息验证
- 核实公司工商注册信息(通过第三方数据库如Dun & Bradstreet)
- 核实营业执照、法人身份
- 电话回访确认申请人身份和授权
- 验证域名管理权归属公司(whois + 额外证明文件)
-
CA签发证书
- CA用自己的中间证书或根证书的私钥,对你的公钥+域名+有效期等信息进行签名,生成证书文件(.crt 或 .pem)
- 同时会下发CA链证书(中间证书 bundle,参考下面附录)
-
下载并安装证书
- 你把证书、公钥、私钥安装到Web服务器(Nginx/Apache/IIS等)
- 重启服务,以使证书生效
最常见的自动化签发:Let’s Encrypt(ACME协议)
Let’s Encrypt是目前全球使用量最大的免费CA,90天有效期,完全自动化。
常用客户端:Certbot、acme.sh、win-acme、lego 等。以acme.sh为例的全自动流程:
# 1. 安装acme.sh
curl https://get.acme.sh | sh
# 2. 切换到Let’s Encrypt(默认就是)
acme.sh --set-default-ca --server letsencrypt
# 3. 签发证书(两种主流验证方式任选其一)
# 方法A:HTTP验证(需要80端口开放)
acme.sh --issue -d example.com -d www.example.com --webroot /var/www/html
# 方法B:DNS验证(推荐,停机也可续期)
acme.sh --issue -d example.com --dns dns_cf # 以Cloudflare为例,会自动调用API添加TXT记录
# 4. 安装证书到Nginx/Apache
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.key \
--fullchain-file /etc/nginx/ssl/example.cer \
--reloadcmd "nginx -s reload"
整个过程几秒到几十秒完成,无需人工干预,每60天自动续期。
证书签发后链路示意
用户浏览器 ←HTTPS→ 你的服务器(证书+私钥)
↑
验证链:
你的证书 → CA中间证书 → 根证书(已预装在操作系统/浏览器中)
总结对比表
| 类型 | 验证内容 | 签发时间 | 有效期 | 价格 | 典型用途 |
|---|---|---|---|---|---|
| DV证书 | 仅域名控制权 | 几秒~几分钟 | 90天~1年 | 免费~几百元 | 普通网站、博客 |
| OV证书 | 域名+组织合法性 | 1~5个工作日 | 1~2年 | 几百~几千元 | 企业官网、电商 |
| EV证书 | 域名+严格组织验证 | 5~10个工作日 | 1~2年 | 千元以上 | 银行、金融、大型电商 |
| Let’s Encrypt | 域名控制权(DV) | 几秒~1分钟 | 90天 | 完全免费 | 绝大多数互联网网站 |
附录:CA链证书
简单来说:CA链证书就是“中间证书”,它是连接你的网站证书和浏览器信任的根证书之间的“桥梁”。如果没有正确安装链证书,用户访问你的HTTPS网站时就会报错(最常见的是“NET::ERR_CERT_AUTHORITY_INVALID”或“证书不受信任”)。
为什么需要链证书?(信任链原理)
为什么公信CA(包括Let’s Encrypt、DigiCert、GlobalSign等)坚决不直接用根证书私钥(Root Private Key)去签发终端用户证书?原因非常明确,一共就这几条,但每一条都是致命的:
| 理由 | 如果直接用根私钥签发终端证书,后果会怎样? | 真实案例(已经发生过) |
|---|---|---|
| 1. 根私钥一旦泄露,整个生态瞬间崩塌 | 攻击者可以随意给自己或任何人签发看起来100%合法的证书,伪造全球任意网站(银行、Google、苹果等),MITM攻击无法被发现。全球数亿网站同时不安全。 | 2011年 DigiNotar(荷兰CA)根私钥被伊朗黑客盗取 → 伪造了Google、Yahoo、WordPress等500+证书 → 整个CA直接破产,被所有浏览器永久拉黑。 2015年 Symantec不当签发测试证书 → 根信任被Chrome逐步移除。 |
| 2. 根私钥必须永久离线,日常无法使用 | 根私钥通常保存在物理保险柜 + HSM硬件安全模块 + 多方仪式中,启动一次需要多位高管同时到场、插多把实体钥匙。根本不可能每天拿来签发几十万张证书。 | Let’s Encrypt的根ISRG Root X1从2015年生成后,私钥就再也没有在联网设备上出现过。 |
| 3. 根证书撤销几乎不可能 | 如果根被污染,唯一办法是让所有浏览器和操作系统永久移除这个根,代价极其高昂(用户需要升级系统/浏览器)。而中间证书被污染,只需要撤销那一个中间证书就行,影响面小1000倍。 | 2024年有人发现某个小CA的中间证书被滥用,浏览器只撤销了那张中间证书,用户几乎无感知。 |
| 4. 可以灵活撤销和轮换 | 中间证书可以1~5年更换一次(Let’s Encrypt中间证书就换过好几次),根证书却要用20~30年。出了问题只换中间就行,不影响根的长期信任。 | DigiCert、GlobalSign每年都会轮换若干中间证书,就是为了降低风险。 |
| 5. 符合国际标准和浏览器强制要求 | Baseline Requirements(CA/Browser Forum规定)和所有主流浏览器(Chrome、Firefox、Safari、Edge)明确禁止根私钥直接签发终端实体证书,违反者直接除根。 | 任何被发现直接用根签终端证书的CA,会在几天内被所有浏览器除根(等于商业死亡)。 |
所以现代公信CA为了安全,绝不直接用根证书私钥去签发终端用户证书,而是采用分层结构:
根证书(Root CA)
└── 中间证书1(Intermediate CA) ← CA用根私钥签发
└── 中间证书2(Intermediate CA) ← 用中间1签发
└── 你的网站证书(Leaf Certificate) ← 用中间2签发
- 根证书:预装在操作系统和浏览器里(DigiCert、GlobalSign、Let’s Encrypt的根叫ISRG Root X1等),数量很少,私钥离线保存在保险柜里,几乎永不使用。
- 中间证书:CA用根私钥签发的证书,中间证书的私钥才真正用来签发你的网站证书。
- 你的网站证书(叶子证书):只包含你的域名和公钥。
浏览器验证证书时会沿着这条链一层层往上验证,直到找到自己信任的根证书为止。
实际拿到的证书文件通常有这几种
-
你的网站证书(也叫leaf证书、end-entity证书)
文件名通常是:yourdomain.crt、yourdomain.pem、certificate.crt -
链证书 / 中间证书(最重要的就是这个)
可能有1~3个中间证书串在一起,常见文件名:chain.crt、ca-bundle.crt、intermediate.crt、fullchain.pem
-
根证书(一般不需要你提供)
浏览器自己有,不需要放在服务器上。
如何撤销中间证书
中间证书(Intermediate CA)一旦被发现有安全问题、被滥用、私钥泄露、CA违规等,必须立即撤销。
谁有权力、谁来执行撤销?
| 角色 | 职责 |
|---|---|
| 发行该中间证书的根CA | 决定是否撤销、生成CRL或OCSP |
| 浏览器/操作系统厂商 | Chrome、Firefox、Microsoft、Apple、Mozilla 决定是否接受并强制执行 |
| CA/Browser Forum | 制定最晚撤销期限(通常5~7天) |
实际撤销的技术方式(都必须同时做)
-
CRL(Certificate Revocation List,证书吊销列表)
- 根CA或上一级中间CA用自己的私钥签名一个列表,里面列出被撤销的证书序列号
- 文件通常放在 http://crl.exampleca.com/xxx.crl
- 缺点:体积大,浏览器很少真正下载检查(基本被淘汰)
-
OCSP(Online Certificate Status Protocol,在线证书状态协议)
- 实时查询:浏览器问 OCSP Responder:“序列号为12345的证书还好吗?”
- 回应:Good / Revoked / Unknown
- 现在是主流,所有正规CA都必须提供OCSP服务
-
OCSP Must-Staple(强制 stapling)
- 证书签发时就加上一个扩展,要求服务器必须在TLS握手中附带OCSP响应
- Let’s Encrypt、DigiCert 等主流CA默认都开启
- 一旦中间证书被撤销,所有使用该中间证书签发的网站都会立刻变红锁(几小时内)
发表回复
要发表评论,您必须先登录。