0

curl获取SSL证书详细信息命令:从入门到实战的完整指南

2026.05.25 | youres | 14次围观

前言:为什么你需要用curl查看SSL证书详情

运维工作中,经常需要快速确认一个网站用了什么证书、证书由谁颁发、什么时候过期、证书链是否完整。这些信息浏览器能看,但用命令行来查效率更高——可以写进脚本、集成到自动化巡检流程里,也方便在服务器上直接操作不依赖图形界面。

curl是Linux/Unix系统标配的命令行工具,Windows 10及以上也内置了PowerShell版本的curl。本文详细介绍如何用curl及相关命令查看SSL证书的完整信息,涵盖证书链解析、域名匹配验证、证书导出等实用场景。

一、用curl连接目标并提取证书信息

1.1 基础命令:openssl s_client

严格来说,查看SSL证书详情最标准的工具是OpenSSL的s_client命令,但curl配合--cert--cacert参数同样能完成大量证书相关的诊断工作。

openssl s_client -connect www.example.com:443 -servername www.example.com

执行后会输出SSL握手详情,末尾即是服务器证书信息。-servername参数用于SNI(Server Name Indication),不加的话多域名证书可能返回错误的证书。

1.2 只显示证书,不进行TLS握手

如果只想提取证书内容,用以下命令组合:

echo | openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | openssl x509 -noout -text

其中openssl x509 -text将证书内容以可读格式输出,包含以下核心字段:

  • Serial Number:证书序列号,CA分配的唯一编号
  • Issuer:颁发者(CA机构名称)
  • Validity:有效期(Not Before / Not After)
  • Subject:证书持有者信息
  • Subject Alternative Name (SAN):支持的域名列表
  • Public Key:公钥算法和长度
  • Signature Algorithm:签名算法

1.3 用curl的-v模式查看连接握手信息

curl -v https://www.example.com 2>&1 | grep -E "(SSL|TLS|certificate|issuer|expire)"

这个命令在调试HTTPS连接时很实用,可以快速确认服务器使用的是什么TLS版本和密码套件。

二、提取证书的特定字段

有时光看完整输出太冗长,需要提取某个具体字段。以下是几个常用命令:

2.1 查看证书到期时间

echo | openssl s_client -connect www.example.com:443 2>/dev/null | openssl x509 -noout -enddate

输出格式为:notAfter=Jun 15 23:59:59 2027 GMT

2.2 查看证书颁发者

echo | openssl s_client -connect www.example.com:443 2>/dev/null | openssl x509 -noout -issuer

2.3 查看证书持有者域名

echo | openssl s_client -connect www.example.com:443 2>/dev/null | openssl x509 -noout -subject

2.4 查看证书指纹(SHA256)

echo | openssl s_client -connect www.example.com:443 2>/dev/null | openssl x509 -noout -fingerprint -sha256

证书指纹常用于快速比对两个服务器是否使用同一张证书。

2.5 查看证书SAN域名列表

openssl s_client -connect www.example.com:443 2>/dev/null | openssl x509 -noout -text | findstr "Subject Alternative"

三、查看完整证书链

现代HTTPS站点通常部署多级证书链(服务器证书 → 中间CA → 根CA)。证书链不完整会导致部分客户端无法验证,引发SSL握手错误。

echo | openssl s_client -connect www.example.com:443 -showcerts 2>/dev/null

-showcerts参数会输出完整证书链中的所有证书。每个证书以"-----BEGIN CERTIFICATE-----"开头,可以复制出来进一步分析。

将证书链保存为PEM文件

echo | openssl s_client -connect www.example.com:443 -showcerts 2>/dev/null | sed -n '/-----BEGIN/,/-----END/p' > cert_chain.pem

在Linux/macOS下用sed提取,在Windows PowerShell中可以用类似思路保存到文件。

四、验证证书域名匹配

如果手头有一张证书文件(如下载的.cer或.pem),想验证它是否匹配某个域名:

openssl x509 -in certificate.pem -noout -text | grep Subject:
openssl s_client -connect www.example.com:443 2>/dev/null | openssl x509 -noout -subject -issuer

对比两者的Subject字段是否一致,或者用SAN中的域名列表做最终确认。

五、忽略证书验证的特殊场景

在测试环境下访问自签名证书的服务器,可以临时跳过证书验证:

curl -k https://自签名域名.com

-k(或--insecure)参数告诉curl忽略证书链验证。但请注意:永远不要在生产环境的业务请求中使用此参数

更安全的替代方案是指定受信任的CA证书文件:

curl --cacert /path/to/ca-bundle.crt https://example.com

--cacert指定受信任的CA证书库,curl会用这个文件验证服务器证书链是否可信。

六、Windows PowerShell环境下的适配

Windows 10+ 自带的PowerShell中可以直接调用curl(实际是Invoke-WebRequest的别名),但建议直接用OpenSSL命令行工具。Windows下推荐使用以下方式之一获取OpenSSL:

  • 通过 Git for Windows 自带的 Git Bash 环境
  • 安装 Chocolatey 后执行 choco install openssl
  • 使用 WSL(Windows Subsystem for Linux)

WSL环境下命令与Linux完全一致,适合需要经常做服务器证书诊断的运维人员。

七、一行命令汇总:快速巡检脚本

结合上面的知识,可以写一个简洁的批量检查脚本:

#!/bin/bash
DOMAIN="www.example.com"
echo "=== 检查 $DOMAIN 的SSL证书 ==="
echo "到期时间:"
echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate
echo "颁发者:"
echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -issuer
echo "证书指纹(SHA256):"
echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -fingerprint -sha256

将DOMAIN变量替换为需要巡检的域名,丢到crontab里就能实现定期证书有效期告警。

总结

用命令行查看SSL证书详细信息,是每个运维工程师和安全人员的必备技能。本文覆盖了:

  • openssl s_client 基础连接与证书提取
  • openssl x509 各字段的单独提取方法
  • 证书链的完整导出
  • curl忽略/指定证书验证的使用场景
  • Windows环境下的适配方案
  • 快速巡检脚本的编写思路

结合前面文章中介绍的curl测试网站HTTPS证书有效期命令curl忽略SSL证书错误参数详解,基本上curl与SSL证书相关的操作就能覆盖全面了。

相关文章

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论
883文章数 0评论数
作者其它文章