Amazon-Web-Services

ELB 偵聽器上的多個證書。Nagios 監控只檢查預設的一項,與主機名無關

  • October 29, 2019

所以我有兩個站點在執行,每個站點都在一個 Amazon ELB 後面。

為了這篇文章的目的(和我公司的隱私),為每個使用這些主機名:

  • example.com
  • anotherexample.com

兩者都安裝了證書。兩個證書都是可信的(從 CA 購買)。

**它們通過瀏覽器/等工作得非常好,並且在請求站點時使用正確的證書(ELB 的預期行為)。**已通過各種瀏覽器和請求確認在訪問每個站點時正在載入和驗證適當的證書。

但是,在嘗試使用 Nagios 監控證書到期時,我發現了一個奇怪的怪癖。

證書監控有效,但僅適用於 ELB 中的預設證書,無論正在訪問哪個主機。

這是命令定義,標准設置:

define command{
   command_name    check_cert_expire
   command_line    $USER1$/check_http -S -H $HOSTADDRESS$ -C $ARG1$
}

然後在主機/服務定義中:

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
}

但是對於兩個服務檢查,我得到相同的響應:

SSL OK - 證書“*.example.com”將於 2020-03-08 23:59 +0000/UTC 到期。HTTP OK:HTTP/1.1 302 Found - 0.016 秒響應時間內 572 個字節

因此,無論主機名如何,它只檢查 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.

引用自:https://serverfault.com/questions/924533