如何用 OpenSSL 命令行一键解析 SSL 证书支持的域名

鸿辰 工具杂汇 36

为什么需要本地验证证书域名?

当你在以下场景时:

  • 收到 CA 新签发的证书文件(未部署)
  • 接手旧服务器需确认证书范围
  • 审计通配符证书是否包含 app.yourdomain.com

浏览器在线工具无法直接解析本地文件,OpenSSL 命令行是最高效的解决方案。

准备工作:确认证书格式

检查证书文件类型(通常为以下两种):

  1. PEM 格式(crt格式相同):文本格式,以 -----BEGIN CERTIFICATE----- 开头
  2. DER 格式:二进制格式,不可直接阅读

⚠️ 若证书是 DER 格式,需先转换为 PEM:

openssl x509 -inform der -in certificate.der -out certificate.pem

核心操作:解析域名范围

命令模板(适用于 PEM 证书)

openssl x509 -noout -text -in 你的证书文件.crt | grep -A 1 "Subject Alternative Name"

参数说明:

  • -noout:不输出证书原始编码
  • -text:以可读文本显示内容
  • | grep ...:过滤出关键字段(SAN 列表)

完整操作示例

假设证书文件为 ssl_certificate.crt

# 执行命令
openssl x509 -noout -text -in ssl_certificate.crt

# 关键输出(重点关注以下部分):
X509v3 extensions:
    X509v3 Subject Alternative Name: 
        DNS:example.com,
        DNS:*.app.example.com,
        DNS:shop.example.org
    X509v3 Key Usage: critical
        Digital Signature, Key Encipherment

输出解析:

  1. 域名列表
    • example.com:根域名
    • *.app.example.com:通配符(覆盖 dev.app.example.com 等单级子域)
    • shop.example.org:跨域名支持
  2. 通配符规则
    • *.app.example.com ❌ 不匹配:
    • app.example.com(需单独声明)
    • beta.dev.app.example.com(多级子域)

进阶技巧:精确提取域名

1. 提取所有 SAN 域名

openssl x509 -noout -text -in ssl_certificate.crt | grep -oP 'DNS:\K[^,]+'

输出

example.com
*.app.example.com
shop.example.org

2. 检查是否包含特定域名(如 api.example.com

openssl x509 -noout -text -in ssl_certificate.crt | grep -q "DNS:api.example.com" && echo "包含" || echo "不包含"

3. 验证通配符覆盖范围

# 检查是否支持 dev.app.example.com
openssl x509 -noout -text -in ssl_certificate.crt | grep -q "DNS:\*\.app\.example\.com" && echo "支持子域" || echo "不支持"

常见问题排查

❌ 问题:命令报错 unable to load certificate

原因

  • 证书文件路径错误
  • 格式非 PEM(DER 需先转换)
  • 文件内容被截断

解决方案

# 检查文件完整性
head -n 1 your_cert.crt  # 应显示 -----BEGIN CERTIFICATE-----

❌ 问题:输出中无 SAN 字段

原因

  • 旧版证书可能只使用 Common Name (CN) 字段

应急检查

openssl x509 -noout -subject -in ssl_certificate.crt
# 输出示例:subject=CN = legacy-domain.com

⚠️ 警告:现代浏览器(Chrome/Firefox)已忽略 CN 字段,此类证书需重新签发支持 SAN!

附录:OpenSSL 其他实用命令

命令 作用
openssl x509 -dates -noout -in cert.crt 检查有效期
openssl x509 -issuer -noout -in cert.crt 查看颁发机构
openssl verify -CAfile ca-bundle.crt your_cert.crt 验证信任链

标签: openssl ssl 工具