ELB 偵聽器上的多個證書。Nagios 監控只檢查預設的一項,與主機名無關
所以我有兩個站點在執行,每個站點都在一個 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
.