Итак, у меня работает два сайта, каждый за одним 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 - сертификат '* .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: порту, клиент должен использовать Идентификация имени сервера (SNI) чтобы выбрать правильный. Современные браузеры делают это по умолчанию, однако nagios check_http
нужно сказать, чтобы сделать SNI с --sni
.