如何使用 openssl 命令/选项说明检查证书的过期日期
你好。我是Heyfer Co. Ltd.系统解决方案部的成员。
您正在查看的Bever Blog已转换为HTTPS。在过去的几十年中,HTTP已成为巨大的打击,HTTP站点的数量大大减少。
目前,HTTPS所需的“ SSL证书”通常在一年内续签,因此需要定期续订,但是许多人使用浏览器检查SSL证书的有效期。
但是,可能有些人说:“浏览器是不确定的,所以我想检查使用命令,或者使用命令使用命令检查使用命令的人出于某种原因进行检查,例如“该端口不是在外部开发的,因为它目前正在开发中,所以我无法使用浏览器检查,但是当搜索只有偶尔使用的命令时,就会出现某些问题。
“命令用法和选项因人而异,但有什么区别呢?”
“就算打了人,也有很多选项我看不懂。”
对于这样的人,我想解释一下在检查 SSL 证书时经常与 openssl 命令一起使用的选项的含义和用法。
执行环境
・操作系统:AlmaLinux8(WSL2 环境)
・Shell:bash
・OpenSSL:OpenSSL 1.1.1k FIPS 2021 年 3 月 25 日
使用 openssl 命令检查“本地”或“远程”
首先,OpenSSL命令是由OpenSSL Projects开发和发布的命令,通常在主流Linux发行版中使用。此命令通常是可能的,但是这次将用于检查SSL证书的到期日期。
另外,在使用此命令检查时,有两种方法可以检查:“本地检查SSL证书”和“从外部远程检查SSL证书”。
首先,让我解释一下以前的当地。
当地环境
以下是在本地环境中检查时经常使用的一些命令。
OPENSL命令用于加载本地存储的证书并显示通用名称,有效的开始日期和到期日期。
$ openssl x509 -noout -subject -dates -in /etc/pki/tls/certs/example.crt
*输出样本主题=CN = exmaple.com *通用名(≒域名) notBefore=Mar 31 04:42:17 2022 GMT *有效开始日期 notAfter=May 2 04:42:16 2023 GMT *到期日期
x509
处理 SSL 证书时,请使用“openssl”命令中的子命令“x509”。
*“X.509”是公钥证书标准格式的名称,因此将其与之关联起来可能会更容易记住。
-在
在本地环境中运行时,需要指定要加载的证书名称,因此使用该选项。
-主题
此选项从导入的证书中输出主题字段(其中写入通用名称)。
-日期
此选项输出导入证书的有效开始日期和到期日期。
-noout
这是“除了其他选项中指定的信息之外,请勿输出信息”。如果此选项不可用,则还将显示由命令加载的预注册证书,如以下命令。
-----BEGIN CERTIFICATE----- MIIGMjCCBRqgAwIBAgIMMGPvI3CXFUjGngZcMA0GCSqGSIb3DQEBCwUAMEwxCzAJ BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSIwIAYDVQQDExlB ~以下几十行省略~ -----END CERTIFICATE -----
顺便说一句,还有一个 -nocert 选项,仅限于不显示证书的内容。
远程环境
这是我在远程检查时经常使用的一些命令。 OPENSL S_CLIENT命令用于访问目标主机,然后从中加载证书,显示通用名称,有效的开始日期和到期日期。
$openssl s_client -connect Beyondjapan.com:443 < /dev/null 2> /dev/null | openssl x509 -noout -subject -dates
*实际输出主题=CN = Beyondjapan.com notBefore=Mar 31 04:42:17 2022 GMT notAfter=May 2 04:42:16 2023 GMT
s_client
使用提供与 SSL/TLS 通信时所需的客户端功能的子命令。
-连接主机:端口
它是远程选项(指定要连接的主机和端口),就像您在本地使用 -in 来指定文件一样。
*这次我们使用 443 (HTTPS),但您也可以指定端口(例如 SMTP)并使用它来检查 SSL/TLS 连接。
< /dev/空
“ openssl s_client”命令连接到指定的目标,然后进入“输入等待状态”,因此无(/dev/null)输入到标准输入中以结束输入等待。如果您不使用此功能,则需要使用CTRL+C结束命令,因此这是因为这需要大量时间。
*这不是一个选项,而是与Shell标准输入有关的规范(在此环境中,bash)。
2> /dev/空
这是Linux上的标准错误输出(2)输出到无(/dev/null)并丢弃,并防止其显示在Shell上。如果您使用以前的< /dev /null,则会出现不必要的错误语句,因此这是擦除它的措施。
*这不是一个选项,而是有关Shell标准输出的规范(在此环境中,bash)。
| openssl x509 -noout -主题 -日期
使用“ |” (管道)将其传递到加载通过通信收到的SSL证书内容的命令。管道后的命令几乎与该命令相同,但是由于管道已收到证书,因此未使用指定要加载证书的选项。
*如果没有-in选项,则此命令的规范(X509)是处理传递给标准输入的内容。
其他人使用的命令和选项
命令
回声 | openssl s_client -connect ~
在远程环境中检查时,我使用< /dev /null来结束输入等待,但是我认为使用Echo会将命令放在壳上的标准输出中以优先考虑,并强迫它最终等待输入。意图与< /dev /null相同。
〜| openssl x509 -text | grep“不”
-Text选项将解密证书的所有内容,并将其输出文本。所有这些都包含在其他选项中单独指定和显示的内容中,因此在您要检查所有内容时将使用它。输出内容通过管道传递给GREP,并输出包含“不”的线。
$ openssl s_client -connect Beyondjapan.com:443 < /dev/null 2> /dev/null | openssl x509 -text | grep "Not" 不早于:2022 年 3 月 31 日 04:42:17 GMT 不晚于:5 月 2 日2023 年 42:16(格林尼治标准时间)
这将输出有效的开始和到期日期的行。这些命令很长,但是它们很简单,所以我认为对于“认识他们的人”来说,它们很容易理解。
但是,即使有专门的选项,我觉得依靠GREP将无法进行太多研究,而我对OpenSSL命令的理解失败了,因此我使用了我一开始就提出的命令。
此外,当尝试输出域名(通用名称)时,问题是由于使用正则表达式选项,命令将变得不那么可读。
选项
-结束日期
此选项仅显示已加载证书的到期日期。还有一个名为-startdate的选项,显示有效的开始日期,但是由于 - 天气选项意味着同时应用两个选项,因此,如果您对此不特别具体,我认为 - 天气很好。
-文本
如上所述,这是以文本格式显示证书的选项。输出包括所有设置信息,例如公钥,签名算法,发行人,主题名称,到期日期等。
没有 -noout 的模式
在这种情况下,按原样显示命令请求的未注重证书,并且将显示选项中指定的到期日期。老实说,我不看未打开证书的内容,因此如果我佩戴它们,请更容易阅读。
命令输出中显示“证书”一词,该单词清楚地表明您正在检查证书,这可能是一个优势。
< /dev/null 2> 不带 /dev/null 的模式
它的目的是使用CTRL + C是命令的先前版本,并且似乎很容易手动输入和可读性,因此我认为它的目的是优先考虑这一点。我想我喜欢这种东西,但是我喜欢我投入的模式,因为有时我最终在不退出命令的情况下输入下一个命令,导致输出和日志变得肮脏。
最后
当我写这篇文章时,我再次意识到openssl命令通常是可能的,而且还有很多选择,这很令人困惑。
这只是可以做的事情的一部分,主要技术,加密和身份验证方法本身是非常合乎逻辑和深刻的。我希望阅读本文能够帮助您解决有关OpenSSL命令的任何阻力或疑问!
感谢您阅读本文。
下一篇
以下是如何检查“完整性和验证结果”的方法,这些结果通常与“到期日期”一起检查。
如何使用 openssl 命令/选项解释检查证书完整性和验证结果
参考资料
openssl-x509 的 OpenSSL 官方手册页
https://www.openssl.org/docs/manmaster/man1/openssl-x509.html
OpenSSL (ArchWiki)
https://wiki.archlinux.jp/index.php/OpenSSL