- 首页 >
- 问答 >
-
云计算 >
- OpenSSL在Linux中的证书吊销流程
OpenSSL在Linux中的证书吊销流程
小樊
41
2025-12-16 15:06:28
OpenSSL在Linux中的证书吊销流程
一 准备与前置检查
- 准备CA证书与CA私钥,并确认OpenSSL配置文件路径(常见为**/etc/ssl/openssl.cnf或/usr/local/openssl/ssl/openssl.cnf**)。
- 确认CA目录结构及数据库文件存在并正确初始化(以经典demoCA布局为例):
- 目录:certs、crl、newcerts、private
- 文件:index.txt(数据库索引)、serial(下一个序列号)、crlnumber(下一个CRL编号)
- 示例初始化:
- mkdir -p demoCA/{certs,crl,newcerts,private}
- echo 01 > demoCA/serial
- touch demoCA/index.txt
- 获取待吊销证书的序列号(十进制或十六进制均可,OpenSSL会统一处理):
- openssl x509 -in server.crt -noout -serial
- 如计划使用OCSP实时校验,需准备OCSP响应器(本流程以CRL为主,OCSP为可选增强)。
二 吊销证书
- 执行吊销(使用CA证书与私钥对目标证书进行标记吊销):
- 命令范式:
- openssl ca -config /etc/ssl/openssl.cnf -revoke server.crt -cert cacert.pem -keyfile private/cakey.pem
- 说明:
- -revoke 会将证书信息写入CA数据库(如index.txt),并标记吊销原因(默认 unspecified,可在配置中设置默认值)。
- 若CA配置已正确指向cacert.pem与private/cakey.pem,部分参数可省略;否则需显式指定。
三 生成并发布CRL
- 生成新的CRL(建议设置下次更新间隔,例如30天):
- 命令范式:
- openssl ca -config /etc/ssl/openssl.cnf -gencrl -out crl.pem -crldays 30
- 查看CRL内容(核对Issuer、This Update、Next Update、Revoked Certificates):
- openssl crl -in crl.pem -text -noout
- 发布与分发CRL(确保服务端与客户端可获取最新CRL):
- 常见做法:将crl.pem放到HTTP/HTTPS可访问路径(如 https://example.com/ca.crl),或通过LDAP、文件分发等方式同步。
- 服务端使用CRL(示例):
- Apache:SSLCACertificateFile /path/to/ca.crt 与 SSLCARevocationFile /path/to/crl.pem
- Nginx:ssl_crl /path/to/crl.pem;(并确保 ssl_certificate 指向完整链)
- 客户端验证(两种常用方式):
- 使用CRL校验:
- openssl verify -CAfile ca.crt -untrusted crl.pem server.crt
- 或:openssl verify -CAfile ca.crt -crl_check server.crt
- 若启用OCSP,可结合证书中的OCSP URL进行在线查询(需部署OCSP响应器)。
四 常见问题与排查
- 找不到数据库或序列文件:确认openssl.cnf中的dir、database、serial、crlnumber等路径与文件已创建并可读写。
- 吊销后仍验证通过:多因客户端未获取到最新CRL或缓存未更新;请检查发布路径、文件权限、HTTP缓存以及服务器是否正确配置了CRL或OCSP。
- 序列号格式问题:证书序列号常见为十六进制带冒号(如 5A:B4:…),OpenSSL在比较时会规范化,无需手动去冒号;若脚本解析,请统一处理大小写与分隔符。
- CRL未更新:每次吊销后必须重新生成CRL(执行带有**-gencrl**的命令),并更新所有分发点。