Итак, у меня работает два сайта, каждый из которых находится за одним Amazon ELB.
В целях этого сообщения (и конфиденциальности моей компании), использование этих имен хостов для каждого:
Сертификаты установлены для обоих. Оба сертификата являются надежными (приобретены в центре сертификации).
Они отлично работают через браузеры и т. Д., И при запросе сайта используются соответствующие сертификаты (ожидаемое поведение 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 - Certificate '* .example.com 'истекает 2020-03-08 23:59 + 0000 / UTC. HTTP OK: HTTP / 1.1 302 Найдено - 572 байта за время ответа 0,016 секунды
Таким образом, независимо от имени хоста, он проверяет только сертификат example.com внутри слушателя ELB.
Я приложил снимок экрана с настройкой сертификата ELB. Установлено 2 сертификата, они работают нормально во всех случаях, кроме этого мониторинга Nagios:
Я уверен, что это как-то связано с тем, что запрос, отправляемый в ELB, не запускает маршрутизацию пакетов внутри ELB для расшифровки хост, но даже не знаю, с чего начать, чтобы выяснить, почему.
Я знаю, что этот вопрос чрезвычайно конкретен и неясен, но надеюсь, что у кого-то есть идеи или известное решение.
РЕДАКТИРОВАТЬ: Я знаю, что это само собой разумеется, но попытка проверки вручную:
./ check_http -S -H anotherexample.com -C 45
Дает тот же результат, возвращает правильный ответ, но для сертификата example.com!
Использовать check_http --sni
Когда несколько сертификатов используются на одном ip: port, клиент должен использовать Идентификация имени сервера (SNI) , чтобы выбрать нужный. Современные браузеры делают это по умолчанию, однако nagios check_http
нужно указать для выполнения SNI с помощью - sni
.