Múltiplos certificados em um listener de ELB. O monitoramento do Nagios apenas verifica o padrão, independentemente do nome do host

1

Portanto, tenho dois sites em execução, cada um por trás de um único Amazon ELB.

Para o propósito deste post (e da privacidade de minhas empresas), usando esses nomes de host para cada um:

  • example.com
  • anotherexample.com

Certs estão instalados para ambos. Ambos os certificados são confiáveis (comprados de uma CA).

Eles funcionam perfeitamente bem através dos navegadores / etc e os certificados apropriados são usados quando o site é solicitado (comportamento esperado do ELB). Confirmamos com vários navegadores & solicita que os certificados apropriados sejam carregados e validados quando cada site é acessado.

No entanto, encontrei uma peculiaridade estranha ao tentar monitorar a expiração do certificado com o Nagios.

O monitoramento de certificados funciona, mas apenas para o certificado padrão no ELB, independentemente de qual host está sendo acessado.

Aqui está a definição do comando, configuração padrão:

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

Em seguida, nas definições de host / serviço:

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
}

No entanto, para AMBAS as verificações de serviço, recebo respostas IDÊNTICAS:

SSL OK - Certificate '*.example.com' will expire on 2020-03-08 23:59 +0000/UTC. HTTP OK: HTTP/1.1 302 Found - 572 bytes in 0.016 second response time

Portanto, independentemente do nome do host, ele está apenas verificando o cert example.com dentro do listener do ELB.

Anexei uma captura de tela da configuração do certificado do ELB. 2 certs instalados, eles funcionam bem em todos os casos, exceto no monitoramento do Nagios:

Tenho certeza de que isso tem algo a ver com o envio da solicitação ao ELB, que não aciona o roteamento de pacotes dentro do ELB para decifrar o host, mas não sabe ao certo por onde começar a descobrir o motivo.

Eu sei que esta pergunta é extremamente específica e obscura, mas espero que alguém tenha alguma idéia ou uma solução conhecida.

EDITAR: Eu sei que isso é óbvio, mas tentando a verificação manualmente:

./check_http -S -H anotherexample.com -C 45

Me dá o mesmo resultado, retorna uma resposta válida, mas para o exemplo de cert!

    
por emmdee 02.08.2018 / 01:39

1 resposta

3

Use check_http --sni

Quando vários certificados são usados em uma única porta, o cliente deve usar Server Name Identification (SNI) para selecionar o direito 1. Navegadores modernos fazem isso por padrão, no entanto, os nagios check_http devem ser informados sobre o SNI com --sni .

    
por 02.08.2018 / 02:57