emm*_*dee 2 monitoring load-balancing nagios amazon-web-services amazon-elb
所以我有两个站点在运行,每个站点都在一个 Amazon ELB 后面。
出于这篇文章的目的(以及我公司的隐私),每个主机名都使用这些主机名:
两者都安装了证书。两个证书都是可信的(从 CA 购买)。
它们通过浏览器/等完美运行,并且在请求站点时使用正确的证书(ELB 的预期行为)。已通过各种浏览器和请求确认在访问每个站点时正在加载和验证适当的证书。
但是,在尝试使用 Nagios 监控证书到期时,我发现了一个奇怪的问题。
证书监控有效,但仅适用于 ELB 中的默认证书,无论正在访问哪个主机。
这是命令定义,标准设置:
define command{
command_name check_cert_expire
command_line $USER1$/check_http -S -H $HOSTADDRESS$ -C $ARG1$
}
Run Code Online (Sandbox Code Playgroud)
然后在主机/服务定义中:
define host{
host_name example.com
use docker-container
display_name Example Site 1
check_command check_https_page!/
}
define host{
host_name anotherexample.com
use docker-container
display_name Example Site 2
check_command check_https_page!/
}
define service{
host_name example.com
use generic-service
service_description Cert Expiry Site1
check_command check_cert_expire!45
}
define service{
host_name anotherexample.com
use generic-service
service_description Cert Expiry Site2
check_command check_cert_expire!45
}
Run Code Online (Sandbox Code Playgroud)
但是,对于 BOTH 服务检查,我得到了相同的响应:
SSL OK - 证书 '*.example.com' 将于 2020-03-08 23:59 +0000/UTC 到期。HTTP OK:HTTP/1.1 302 Found - 572 字节在 0.016 秒响应时间内
因此,无论主机名如何,它只检查 ELB 侦听器内的 example.com 证书。
我附上了 ELB 证书设置的屏幕截图。安装了 2 个证书,除此 Nagios 监控外,它们在所有情况下都可以正常工作:
我确信这与发送到 ELB 的请求没有触发 ELB 内部正在进行的任何数据包路由来解密主机有关,但甚至不确定从哪里开始找出原因。
我知道这个问题非常具体和晦涩,但希望有人有任何想法或已知的解决方案。
编辑:我知道这是不言而喻的,但手动尝试检查:
./check_http -S -H anotherexample.com -C 45
给我相同的结果,返回一个有效的响应,但对于 example.com 证书!
用 check_http --sni
当在同一个 ip:port 上使用多个证书时,客户端必须使用服务器名称标识 (SNI)来选择正确的一个。现代浏览器默认这样做,但是check_http必须告诉nagios使用--sni.