M/Monit误报服务器证书已过期的问题求助
我最近在用M/Monit监控服务器,这几天遇到个头疼的问题:Monit一直报证书过期,但我在Firefox里看证书明明到2025年2月才过期,Qualys SSL检查也显示IPv4和IPv6都是A+评级。
我的Monit配置是这样的:
check host cloud.example.com with address cloud.example.com group web if failed host cloud.example.com IPV4 IPV6 type TCPSSL protocol https certificate valid > 21 days for 3 times within 15 cycles then alert
我已经尝试过重新签发证书,但问题还是没解决,只是生成了新证书而已。Monit却还是认为证书过期了,我完全搞不懂它到底在检测什么,有没有大佬能给点思路?
可能的排查方向:
检查Monit是否连接了错误的端口
默认HTTPS用443端口,但如果你的服务实际监听其他端口(比如8443),Monit可能连到了不对的端口,拿到的是其他服务的证书。可以在配置里明确指定端口,比如在type TCPSSL后面加port 443试试。排查Monit的DNS缓存问题
有时候Monit会缓存旧的DNS记录,导致它连接到了错误的服务器(比如旧IP上的证书确实过期了)。可以重启Monit服务强制刷新缓存,或者临时把配置里的域名换成IP地址测试,看看是不是DNS的锅。验证证书链是否完整
浏览器和Qualys会自动补全缺失的中间证书,但Monit可能不会。你可以用openssl s_client -connect cloud.example.com:443 -servername cloud.example.com命令查看服务器返回的证书链,如果只有叶子证书没有中间证书,Monit可能无法正常验证,进而误判证书无效。检查Monit版本是否过旧
旧版本的Monit可能对新的证书算法(比如ECDSA)或SSL/TLS协议支持不足,导致证书验证出错。可以查看你的Monit版本,尝试升级到最新稳定版再测试。分别验证IPv4和IPv6的证书
虽然Qualys检查没问题,但可以单独测试两个协议的证书:- IPv4测试:
openssl s_client -connect 你的服务器IPv4:443 -servername cloud.example.com - IPv6测试:
openssl s_client -connect [你的服务器IPv6]:443 -servername cloud.example.com
看看两者返回的证书是否和浏览器里的一致,会不会其中一个的证书真的存在问题。
- IPv4测试:
确认Monit所在服务器的时间同步
如果Monit运行的服务器系统时间偏差过大(比如慢了好几个月),会导致它误判证书已过期。可以检查服务器系统时间,确保和NTP服务器同步。
备注:内容来源于stack exchange,提问作者Powerriegel

