ELB 侦听器上的多个证书。Nagios 监控只检查默认的,不管主机名

emm*_*dee 2 monitoring load-balancing nagios amazon-web-services amazon-elb

所以我有两个站点在运行,每个站点都在一个 Amazon ELB 后面。

出于这篇文章的目的(以及我公司的隐私),每个主机名都使用这些主机名:

  • 例子.com
  • 另一个例子.com

两者都安装了证书。两个证书都是可信的(从 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 证书!

MLu*_*MLu 5

check_http --sni

当在同一个 ip:port 上使用多个证书时,客户端必须使用服务器名称标识 (SNI)来选择正确的一个。现代浏览器默认这样做,但是check_http必须告诉nagios使用--sni.