Nagios 可以进行 SSL 检查,但它实际上并不检查证书对于您正在使用的连接地址是否有效(通用名称匹配)。
在我们的一台服务器上,Plesk 更新未经通知就替换了 postfix 配置文件,导致证书回归为骗人的证书。Nagios 检查了 SSL,但没有发现它。为此,我想检查的不仅仅是到期日期,还要检查 CA 链。
我已经尝试了几个 nagios 的 SSL 插件,但是都无法做到这一点。
有人有建议吗?
答案1
答案2
我也找不到可以测试它的插件,但将一些随机 GPLed 插件的核心内容包装在 openssl 单行代码中非常容易。下面是一行代码,比较了我的两个服务器的输出;www 上有 Equifax 证书,nagios 是自签名的:
[madhatter@anni ~]$ echo "" | openssl s_client -connect nagios.teaparty.net:443 |& grep "verify error"
verify error:num=18:self signed certificate
[madhatter@anni ~]$ echo $?
0
[madhatter@anni ~]$
和
[madhatter@anni ~]$ echo "" | openssl s_client -connect www.teaparty.net:443 |& grep "verify error"
[madhatter@anni ~]$ echo $?
1
[madhatter@anni ~]$
请注意 grep 的退出状态的良好且易于测试的变化,取决于它是否找到“验证错误”字符串。
怎么样?
答案3
我尝试创建一个 Nagios 检查来基于此方法验证链顺序,但此方法似乎不适用于未经更改的 Debian。您应该使用:
echo "" | openssl s_client -showcerts -connect example.com:443 -CApath /etc/ssl/certs/ |& grep "verify error"
此外,当链条处于错误的顺序,但仍完整存在。
您可能会说顺序并不重要,只要中间体的顺序正确即可,但有些系统要求根 CA 存在,而有些系统则不需要。