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â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) |
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
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
:
Para proxy passivo, o parâmetro TLSAccept
:
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.
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
Para proxy passivo
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
:
Para verificações passivas edite o parâmetro TLSAccept
:
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:
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.
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:
- 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.
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:
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
.