在 Chrome 中,单击绿色 HTTPS 锁定图标会打开一个包含证书详细信息的窗口:
当我对 cURL 进行同样的尝试时,我只得到了一些信息:
$ curl -vvI https://gnupg.org
* Rebuilt URL to: https://gnupg.org/
* Hostname was NOT found in DNS cache
* Trying 217.69.76.60...
* Connected to gnupg.org (217.69.76.60) port 443 (#0)
* TLS 1.2 connection using TLS_DHE_RSA_WITH_AES_128_CBC_SHA
* Server certificate: gnupg.org
* Server certificate: Gandi Standard SSL CA
* Server certificate: UTN-USERFirst-Hardware
> HEAD / HTTP/1.1
> User-Agent: curl/7.37.1
> Host: gnupg.org
> Accept: */*
知道如何从命令行工具(cURL 或其他)获取完整的证书信息吗?
您应该能够将 OpenSSL 用于您的目的:
该命令连接到所需的网站并将 PEM 格式的证书传送到另一个读取和解析详细信息的 openssl 命令。
(请注意,“冗余”
-servername
参数对于openssl
使用 SNI 支持发出请求是必需的。)基本证书信息
这是我的日常脚本:
输出:
完整的证书信息
-p 443
指定仅扫描端口 443 。如果省略,将扫描所有端口,并显示找到的任何 SSL 服务的证书详细信息。--script ssl-cert
告诉Nmap 脚本引擎只运行ssl-cert
脚本。从文档中,此脚本“(r)获取服务器的 SSL 证书。打印的有关证书的信息量取决于详细程度。”样本输出:
取决于你想要什么样的信息,但是:
应该给你最多的东西,虽然不像 Chrome 那样可读性好。
为了完整起见:如果您的系统上安装了Java 7 或更高版本
以一种非常难看的格式显示几乎所有细节的链(如服务)。
你是否应该在你的系统上安装 Java 我不回答。
如果您想在 Windows 中执行此操作,您可以使用 PowerShell 和以下功能:
这使您可以做一些整洁的事情,例如
如果您只想要到期日期(这不完全是答案,而是人们使用 Chrome 证书详细信息的 9/10),您可以使用:
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate
对脚本等有用。
为了检查 SSL 证书的详细信息,我使用以下命令行工具,因为它变得可用:
https://github.com/azet/tls_tools
很高兴仔细检查您的所有信息是否正确,以便重新颁发证书或验证现有证书,并且依赖项很少,并且不需要设置。
这是输出的前几行的样子:
该输出之后是相同详细级别的整个证书链。
我喜欢它而不是像 openssl 的 s_client 那样以 ssl 为中心的 cli 工具,它试图只做我们大部分时间需要的一项工作。当然,openssl 更灵活(即还检查客户端证书、奇数端口上的 imap 等)——但我并不总是需要这些。
或者,如果您有时间深入了解和设置或欣赏更多功能,还有一个名为 sslyze 的更大工具(由于依赖项和安装,所以不使用它......)
我为此使用了一个 shell 脚本。它只是 openssl 命令的一个包装器,使我免于记住语法。
它提供了解析我通常感兴趣的大多数证书信息的选项,或者显示原始 openssl 输出。
可以查询本地证书文件,也可以查询远程服务器。
用法:
您可以在此处获取脚本:https ://web.archive.org/web/20190528035412/http://giantdorks.org/alain/shell-script-to-check-ssl-certificate-info-like-expiration-date -和-主题/