1 Usando certificados

Visão geral

O Zabbix pode utilizar certificados no formato PEM, assinados por uma CA. A verificação de certificado é feita através de um certificado CA pré-instalado. Certificados auto-assinados não são suportados. Opcionalmente uma lista de certificados revogados poderá ser utilizada. Cada componente Zabbix deverá ter apenas um certificado configurado. A escolha entre múltiplos certificados não é suportada.

Para mais informações sobre como configurar e operação interna da CA, como gerar as requisições de certificados e assina-las, como revogar certificados você encontrará em inúmeros sites da internet, por exemplo: OpenSSL PKI Tutorial v1.1

Considere com cuidado e teste suas extensões de certificados - veja Limitações no uso da extensão X.509 v3.

Parâmetros de configuração do certificado
Parâmetro Obrigatório Descrição
TLSCAFile * Caminho completo do arquivo contendo os certificados raiz (CA) para verificação dos certificados entre as partes, utilizado para comunicações criptografadas entre os componentes do Zabbix. Certificados de várias CAs deverão ser incluídos em uma única linha.
TLSCertFile * Caminho completo para o arquivo contendo o certificado de agente ou a cadeia de certificados.
TLSCRLFile * Caminho completo para o arquivo contendo os certificados revogados, utilizado para comunicações criptografadas entre os componentes do Zabbix. Se o arquivo definido em TLSCAFile contiver várias CAs e o componente Zabbix for compilado com OpenSSL e TLSCRLFile estiver definido, cada CA mencionada em TLSCAFile deverá ter um correspondente CRL (que pode ser um CRL vazio) no TLSCRLFile
TLSKeyFile não Caminho completo para o arquivo contendo a chave privada do agente. Verifique se o permissionamento do arquivo permite que o usuário 'zabbix' o leia
TLSServerCertIssuer * Emissor de certificado autorizado do server (proxy)
TLSServerCertSubject * Destino do certificado permitido pelo server (proxy)

Configurando certificados no Zabbix Server

1. Para verificar os certificados das partes, o Zabbix Server precisa ter acesso ao arquivo com o certificado de maior nível auto-assinado (root CA certificate). Por exemplo, se nós esperamos certificados de duas CAs primárias e independentes, nós precisamos colocar os seus certificados em um arquivo (por exemplo /home/zabbix/zabbix_ca_file):

Certificado:
           Data:
               Version: 3 (0x2)
               Serial Number: 1 (0x1)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
                   ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                   ...
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Certificate Sign, CRL Sign
                   X509v3 Basic Constraints: critical
                       CA:TRUE
                   ...
       -----BEGIN CERTIFICATE-----
       MIID2jCCAsKgAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
       ....
       9wEzdN8uTrqoyU78gi12npLj08LegRKjb5hFTVmO
       -----END CERTIFICATE-----
       Certificado:
           Data:
               Version: 3 (0x2)
               Serial Number: 1 (0x1)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
                   ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                   ....
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Certificate Sign, CRL Sign
                   X509v3 Basic Constraints: critical
                       CA:TRUE
                   ....       
       -----BEGIN CERTIFICATE-----
       MIID3DCCAsSgAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQB
       ...
       vdGNYoSfvu41GQAR5Vj5FnRJRzv5XQOZ3B6894GY1zY=
       -----END CERTIFICATE-----

2. Coloque o certificado do Zabbix Server em um arquivo, por exemplo, /home/zabbix/zabbix_server.crt:

Certificado:
           Data:
               Version: 3 (0x2)
               Serial Number: 1 (0x1)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
               ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix server
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                       ...
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Digital Signature, Key Encipherment
                   X509v3 Basic Constraints: 
                       CA:FALSE
                   ...
       -----BEGIN CERTIFICATE-----
       MIIECDCCAvCgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixk
       ...
       h02u1GHiy46GI+xfR3LsPwFKlkTaaLaL/6aaoQ==
       -----END CERTIFICATE-----
       Certificado:
           Data:
               Version: 3 (0x2)
               Serial Number: 2 (0x2)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
               ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                   ...
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Certificate Sign, CRL Sign
                   X509v3 Basic Constraints: critical
                       CA:TRUE, pathlen:0
               ...
       -----BEGIN CERTIFICATE-----
       MIID4TCCAsmgAwIBAgIBAjANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
       ...
       dyCeWnvL7u5sd6ffo8iRny0QzbHKmQt/wUtcVIvWXdMIFJM0Hw==
       -----END CERTIFICATE-----

O primeiro certificado é o do Zabbix Server, seguido pela CA intermediária.

3. Coloque a chave privada do Zabbix Server em um arquivo, por exemplo, /home/zabbix/zabbix_server.key:

-----BEGIN PRIVATE KEY-----
       MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC9tIXIJoVnNXDl
       ...
       IJLkhbybBYEf47MLhffWa7XvZTY=
       -----END PRIVATE KEY-----

4. Edite os parâmetros TLS no arquivo de configuração do Zabbix Server:

TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSCertFile=/home/zabbix/zabbix_server.crt
       TLSKeyFile=/home/zabbix/zabbix_server.key

Configurando a comunicação baseada em certificados no Zabbix Proxy

1. Prepare os arquivos com os certificados CA de mais alto nível, o certificado do proxy e a chave privada, conforme o explicado em "Configurando o certificado no Zabbix Server". Edite os parâmetros TLSCAFile, TLSCertFile, TLSKeyFile no arquivo de configuração do proxy.

2. Para proxy ativo ajuste o parâmetro TLSConnect:

TLSConnect=cert

Para proxy passivo, o parâmetro TLSAccept:

TLSAccept=cert

3. Agora você possui a configuração mínima para a comunicação baseada em certificados com o proxy. Você pode melhorar a sua segurança através de ajustes nos parâmetros TLSServerCertIssuer e TLSServerCertSubject (consulte Restringindo certificados).

4. O arquivo de configuração do proxy deverá ter estes parâmetros de configuração do TLS forma similar a esta:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSCertFile=/home/zabbix/zabbix_proxy.crt
       TLSKeyFile=/home/zabbix/zabbix_proxy.key

5. Configure a conexão segura com este proxy na interface web do Zabbix.

  • Acesse Administração → Proxies
  • Selecione o proxy desejado, clique em seu nome
  • Clique na aba Criptografia
    • Proceda com os ajustes necessários.
  • Clique no botão Atualizar

Nos exemplos acima os campos Emissor e Assunto estão preenchidos - consulte Restringindo certificados para maiores informações de como e porquê utilizar estes campos.

Para proxy ativo

proxy_active_cert.png

Para proxy passivo

proxy_passive_cert.png

Configurando criptografia baseada em certificado no Zabbix Agent

1. Prepare os arquivos com os certificados raiz, certificado do agente e chave privada conforme o descrito em Configurando o certificado no Zabbix Server. Edite os parâmetros TLSCAFile, TLSCertFile, TLSKeyFile no arquivo de configuração do agente.

2. Para verificações ativas edite o parâmetro TLSConnect:

TLSConnect=cert

Para verificações passivas edite o parâmetro TLSAccept:

TLSAccept=cert

3. Agora você tem as configurações mínimas para uma conexão segura baseada em certificados. Você pode desejar melhorar as configurações de segurança ao definir os parâmetros TLSServerCertIssuer e TLSServerCertSubject. (consulte Restringindo certificados).

4. Os parâmetros do TLS no arquivo de configuração do agente deverão estar similares a estes:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSCertFile=/home/zabbix/zabbix_agentd.crt
       TLSKeyFile=/home/zabbix/zabbix_agentd.key

(Este exemplo assume que o host é monitorado por um proxy, por isso o 'Subject' do proxy.)

5. Configure a criptografia para este agente na interface do Zabbix:

  • Vá para: Configuração → Hosts
  • Selecione o host desejado e clique na aba Criptografia

No exemplo acima os campos Emissor e Assunto estão preenchidos - consulte Restringindo certificados para maiores informações de como e porquê utilizar estes campos. agent_config.png

Restringindo certificados

Quando dois componentes do Zabbix (Ex. Servidor e agente) estabelecem uma conexão TLS, ambos verificam o certificado da outra parte. Se o certificado da parte é assinado por uma CA confiável (com um certificado raiz configurado no TLSCAFile), e válida, que não está expirado e passa em outras verificações então a comunicação pode prosseguir. O emissor do certificado e o assunto não são verificados por padrão.

Aqui temos um risco, qualquer pessoa com um certificado assinado por uma CA confiável pode personificar outra pessoa (ex. um host sendo utilizado para personificar outro servidor). Isso pode ser aceitável em ambientes pequenos onde os certificados foram assinados em uma CA interna, com baixo risco.

Caso existam várias CAs confiáveis configuradas, utilize-se do campo "Emissor" para definir qual será a CA necessária para o certificado de determinado componente do Zabbix.

Se a sua CA raiz emite outros certificados que não devem ser aceitos pelo Zabbix e você quer reduzir o risco de personificação de terceiros, você deverá restringir os certificados pelo campo "Assunto".

Por exemplo, você pode definir no arquivo de configuração do proxy:

TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

Com estas configurações um proxy ativo não irá falar com um servidor Zabbix com outro emissor ou assunto em seu certificado e um proxy passivo não irá aceitar requisições de outro servidor. Observe que a restrição de emissor e assunto pode ser utilizada também nas ferramentas de linha de comando "zabbix_get" e "zabbix_sender".

Algumas observações sobre avalidação dos campos Emissor ou Assunto:

  1. Ambos são verificados de forma independente, ambos são opcionais.
  2. São permitidos caracteres UTF-8.
  3. Se não for definido, qualquer um será aceito.
  4. Os textos são verificados literalmente, deverão estar exatamente iguais ao conteúdo do certificado.
  5. Listas brancas e expressões regulares não são suportadas.
  6. Apenas alguns requisitos da RFC 4514 - LDAP: Representações de textos em nomes distintos são implementados:
    - caracteres de escape '"' (U+0022), '+' U+002B, ',' U+002C, ';' U+003B, '<' U+003C, '>' U+003E, '\' U+005C  em qualquer parte do texto.
           - caracteres de escape space (' ' U+0020) ou sinal de número ('#' U+0023) no ínicio do texto.
           - caracteres de escape space (' ' U+0020) ao fim do texto.
       - A verificação falhará se um caractere nulo (U+0000) for encontrado ([[http://tools.ietf.org/html/rfc4514|RFC 4514]] permitiria isso).
       - Os requisitos da [[http://tools.ietf.org/html/rfc4517| RFC 4517 - LDAP: Sintaxes e regras de comparação]] e [[http://tools.ietf.org/html/rfc4518|RFC 4518 - LDAP: Preparação para textos internacionalizados]] não é suportada devido ao alto grau de trabalho necessário.

A ordem dos campso Emissor e Assunto e sua formatação são importantes! O Zabbix segue a recomendação da RFC 4514 e utiliza a ordem reversa dos campos.

A ordem reversa dos campos pode ser ilustrada neste exemplo:

TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

Observe que ele começa com o CN (menor nível), segue com o OU, O (nível médio) e termina no campo DC (maior nível).

OpenSSL por padrão apresenta os campos Emissor e Assunto na ordem normal, dependendo das opções adicionais utilizadas:

$ openssl x509 -noout -in /home/zabbix/zabbix_proxy.crt -issuer -subject
       issuer= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Signing CA
       subject= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Zabbix proxy
       
       $ openssl x509 -noout -text -in /home/zabbix/zabbix_proxy.crt
       Certificado:
               ...
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
           ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix proxy

Aqui os textos Emissor e Assunto iniciam com o nível mais alto e terminam com o nível mais baixo, espaços e separadores de campos dependem das opções utilizadas. Para o Zabbix nenhum destes valores irá ser aceita nos campos Emissor e Assunto!

Para que os campso Emissor e Assunto sejam utilizáveis pelo Zabbix utilize o OpenSSL com a opção
-nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname:

$ openssl x509 -noout -issuer -subject \
               -nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname \
               -in /home/zabbix/zabbix_proxy.crt
       issuer= CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       subject= CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

Agora os campos estão na ordem reversa e os campos separados por vírgulas, podendo ser utilizado nos arquivos de configuração do Zabbix e na interface web.

Limitações ao utilizar extensões dos certificados X.509 v3

  • A extensão para nome alternativo para o assunto (subjectAltName).
    Nomes alternativos da extensão subjectAltName (como endereços IP, email) não são suportados pelo Zabbix. Apenas o valor do campo Assunto será verificado (consulte Restringindo certificados).
    Se o certificado utilizar a extensão subjectAltName o resulte depende de combinações em particular das ferramentas de criptografia compiladas com o Zabbix (o que poderá fazer com que o Zabbix recuse ou não o certificado).
  • A extensão Extended Key Usage.
    Se utilizada genericamente tanto em clientAuth (Autenticação WWW TLS de cliente) e serverAuth (Autenticação WWW TLS de servidor) é necessária.
    Por exemplo, em itens passivos o Zabbix Agent age com o perfil de servidor TLS, então o serverAuth deverá estar configurado no certificado do agente. Para verificações ativas o certificado do agente precisa do clientAuth definido.
    O GnuTLS pode apresentar um alerta caso ocorra uma violação de chave mas, ainda assim, permitindo a conexão.
  • A extensão Name Constraints.
    Nem todas as ferramentas de criptografia a suportam. Esta extensão pode evitar que o Zabbix carregue o certificado se uma sessão estiver marcada como crítica (dependendo da ferramenta de criptografia).

Lista de certificados revogados (CRL)

Se um certificado for comprometido a CA pode incluí-lo na CRL para revoga-lo. As CRLs podem ser configuradas nos arquivos de configuração do servidor, proxy e agente através do parâmetro TLSCRLFile. Por exemplo:

TLSCRLFile=/home/zabbix/zabbix_crl_file

onde zabbix_crl_file pode conter CRLs de diversas CAs e se parecer com:

-----BEGIN X509 CRL-----
       MIIB/DCB5QIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixkARkWA2Nv
       ...
       treZeUPjb7LSmZ3K2hpbZN7SoOZcAoHQ3GWd9npuctg=
       -----END X509 CRL-----
       -----BEGIN X509 CRL-----
       MIIB+TCB4gIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQBGRYDY29t
       ...
       CAEebS2CND3ShBedZ8YSil59O6JvaDP61lR5lNs=
       -----END X509 CRL-----

O arquivo de CRL só é carregado quando o Zabbix é carregado, alterações exigem reinicio de processo.

Se um componente do Zabbix for compilado com a OpenSSL e as CRLs utilizadas cada CA de nível superior e intermediária deverá ter um CRL correspondente (mesmo que vazio) em TLSCRLFile.

Limitações no uso de extensões CRL

  • A extensão Authority Key Identifier.
    CRLs com nomes idêncicos das CAs poderão não funcionar com mbedTLS (PolarSSL), mesmo com a extensão "Authority Key Identifier".