温馨提示×

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.pemprivate/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缓存以及服务器是否正确配置了CRLOCSP
  • 序列号格式问题:证书序列号常见为十六进制带冒号(如 5A:B4:…),OpenSSL在比较时会规范化,无需手动去冒号;若脚本解析,请统一处理大小写与分隔符。
  • CRL未更新:每次吊销后必须重新生成CRL(执行带有**-gencrl**的命令),并更新所有分发点。

0