Ajo*_*owe 3 certificate nagios openssl
是否可以仅通过传递域名来检查证书链中涉及的证书的颁发日期和到期日期?
我厌倦了各种 openssl s_client 属性,但我无法获取所需的信息。
要求:
传递一个域(以及端口 443),并使用 Linux 中的脚本或命令输出该域(Web 服务器)的证书链中涉及的颁发日期和到期日期。
答案是肯定的,您可以使用 来做到这一点openssl
,您可以轻松地将其包装为“检查”脚本,但我不知道是否有插件已经做到了这一点。
首先,缓存服务器证书和中间链:
echo Q | openssl s_client \
-connect www.google.com:443 -servername www.google.com -showcerts > chain.pem
Run Code Online (Sandbox Code Playgroud)
(此链文件包含站点证书、中间链以及其他垃圾)
您也应该使用-servername www.google.com
,以便启用 SNI 的站点返回预期的证书。如果您只想输出链文件中每个证书的详细信息:
gawk 'BEGIN { pipe="openssl x509 -noout -subject -dates -serial "} \
/^-+BEGIN CERT/,/^-+END CERT/ { print | pipe }
/^-+END CERT/ { close(pipe); printf("\n")} ' chain.pem
Run Code Online (Sandbox Code Playgroud)
根据需要向嵌入命令中添加/省略-serial
、-issuer
、-fingerprint
。您甚至可以将这两个步骤粘合在一起作为一行(注意省略重定向和出现次数):-purpose
openssl
chain.pem
echo Q | openssl ... | gawk ...
Run Code Online (Sandbox Code Playgroud)
如果您希望正确验证链(包括日期范围),请继续阅读。
接下来,只取出站点(第一个)证书,我将sed
在这里使用,因为我很懒;-)
sed -n '/-BEGIN/,/-END/p;/-END/q' chain.pem > site.pem
Run Code Online (Sandbox Code Playgroud)
然后验证:
openssl verify -verbose -CAfile chain.pem site.pem
Run Code Online (Sandbox Code Playgroud)
这就是轮子脱落的地方:谷歌(正确地)没有在链中提供(自签名)根CA(或“信任锚”):
site.pem: /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
error 2 at 2 depth lookup:unable to get issuer certificate
Run Code Online (Sandbox Code Playgroud)
因此,从 Geotrust 中提取根证书,保存并设置合适的 CA 目录:
cd /usr/local/nagios/var/CA # example!
wget http://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.pem
c_rehash .
Run Code Online (Sandbox Code Playgroud)
然后再试一次:
openssl verify -verbose \
-CAfile chain.pem -CApath /usr/local/nagios/var/CA site.pem
Run Code Online (Sandbox Code Playgroud)
(注意额外的-CApath
参数)你会得到:
site.pem: OK
Run Code Online (Sandbox Code Playgroud)
现在的坏消息是,openssl
没有设置返回代码来指示成功、失败或任何有用的信息。您需要处理输出以确保一切正常,基本上除了单行“OK”之外的任何内容都表明存在问题。您正在查找的过期证书将显示为:
error 10 at 2 depth lookup:certificate has expired
Run Code Online (Sandbox Code Playgroud)
(其中深度可能会有所不同)。
注意事项和警告:
-CApath /some/path
受信任根证书的(预哈希)目录来解决此问题,如上所示chain.pem
的内容中有额外的文本垃圾,这不会出现问题openssl
归档时间: |
|
查看次数: |
8238 次 |
最近记录: |