Criptografia usando chaves pré-compartilhadas
Visão geral
Cada chave pré-compartilhada (PSK) no Zabbix, na verdade, é um par de:
- string de identidade PSK não secreta,
- valor da string PSK secreta.
A string de identidade PSK é uma string UTF-8 não vazia. Por exemplo, "PSK ID 001 Zabbix agentd". É um nome exclusivo pelo qual essa PSK específica é referenciada pelos componentes do Zabbix. Não coloque informações sensíveis na string de identidade PSK - ela é transmitida pela rede sem criptografia.
O valor da PSK é uma string de dígitos hexadecimais difícil de adivinhar, por exemplo, "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".
Limites de tamanho
Há limites de tamanho para a identidade e o valor da PSK no Zabbix; em alguns casos, uma biblioteca criptográfica pode ter um limite inferior:
| Componente | Tamanho máximo da identidade da PSK | Tamanho mínimo do valor da PSK | Tamanho máximo do valor da PSK |
|---|---|---|---|
| Zabbix | 128 caracteres UTF-8 | 128 bits (PSK de 16 bytes, inserida como 32 dígitos hexadecimais) | 2048 bits (PSK de 256 bytes, inserida como 512 dígitos hexadecimais) |
| GnuTLS | 128 bytes (pode incluir caracteres UTF-8) | - | 2048 bits (PSK de 256 bytes, inserida como 512 dígitos hexadecimais) |
| OpenSSL 1.0.x, 1.1.0 | 127 bytes (pode incluir caracteres UTF-8) | - | 2048 bits (PSK de 256 bytes, inserida como 512 dígitos hexadecimais) |
| OpenSSL 1.1.1 | 127 bytes (pode incluir caracteres UTF-8) | - | 512 bits (PSK de 64 bytes, inserida como 128 dígitos hexadecimais) |
| OpenSSL 1.1.1a e posteriores | 127 bytes (pode incluir caracteres UTF-8) | - | 2048 bits (PSK de 256 bytes, inserida como 512 dígitos hexadecimais) |
O frontend do Zabbix permite configurar uma string de identidade da PSK com até 128 caracteres e uma PSK de até 2048 bits, independentemente das bibliotecas criptográficas utilizadas.
Se alguns componentes do Zabbix oferecerem suporte a limites inferiores, será responsabilidade do usuário configurar a identidade e o valor da PSK com o tamanho permitido por esses componentes.
Exceder os limites de tamanho resulta em falhas de comunicação entre os componentes do Zabbix.
Antes de o server do Zabbix se conectar ao agent usando uma PSK, o server procura no banco de dados a identidade e o valor da PSK configurados para esse agent (na verdade, no cache de configuração). Ao receber uma conexão, o agent usa a identidade e o valor da PSK do seu arquivo de configuração. Se ambas as partes tiverem a mesma string de identidade da PSK e o mesmo valor da PSK, a conexão poderá ser estabelecida.
Cada identidade da PSK deve estar associada a apenas um valor. É responsabilidade do usuário garantir que não existam duas PSKs com a mesma string de identidade, mas com valores diferentes. Não fazer isso pode causar erros imprevisíveis ou interrupções na comunicação entre os componentes do Zabbix que usam PSKs com essa string de identidade da PSK.
Gerando PSK
Por exemplo, um PSK de 256 bits (32 bytes) pode ser gerado usando os seguintes comandos:
- com OpenSSL:
$ openssl rand -hex 32
af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
- com GnuTLS:
$ psktool -u psk_identity -p database.psk -s 32
Generating a random key for user 'psk_identity'
Key stored to database.psk
$ cat database.psk
psk_identity:9b8eafedfaae00cece62e85d5f4792c7d9c9bcc851b23216a1d300311cc4f7cb
Observe que o "psktool" acima gera um arquivo de banco de dados com uma identidade PSK e o PSK associado. O Zabbix espera apenas um PSK no arquivo PSK, portanto a string de identidade e os dois-pontos (':') devem ser removidos do arquivo.
Configurando PSK para a comunicação entre server e agent (exemplo)
No host do agent, grave o valor da PSK em um arquivo, por exemplo,
/home/zabbix/zabbix_agentd.psk. O arquivo deve conter a PSK na primeira
linha de texto, por exemplo:
1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
Defina as permissões de acesso ao arquivo da PSK: ele deve ser legível somente pelo usuário Zabbix.
Edite os parâmetros TLS no arquivo de configuração do agent do Zabbix (zabbix_agentd.conf). Por exemplo, defina:
TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001
O agent se conectará ao server (verificações ativas) e aceitará do server
e do zabbix_get somente conexões que usem PSK. A identidade da PSK será
"PSK 001".
Reinicie o agent. Agora você pode testar a conexão usando zabbix_get,
por exemplo:
zabbix_get -s 127.0.0.1 -k "system.cpu.load[all,avg1]" --tls-connect=psk --tls-psk-identity="PSK 001" --tls-psk-file=/home/zabbix/zabbix_agentd.psk
(Para minimizar o tempo de inatividade, consulte como alterar o tipo de conexão em Gerenciamento da criptografia de conexão).
Configure a criptografia PSK para este agent no frontend do Zabbix:
- Acesse: Coleta de dados > Hosts.
- Selecione o host e clique na aba Criptografia.
- Configure os detalhes da criptografia PSK.
Exemplo:

Todos os campos de entrada obrigatórios são marcados com um asterisco vermelho.
Quando o cache de configuração for sincronizado com o banco de dados, as novas conexões usarão PSK. Verifique os arquivos de log do server e do agent em busca de mensagens de erro.
Configurando PSK para a comunicação entre server e proxy ativo (exemplo)
No proxy, grave o valor do PSK em um arquivo, por exemplo,
/home/zabbix/zabbix_proxy.psk. O arquivo deve conter o PSK na primeira
linha de texto, por exemplo:
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
Defina as permissões de acesso ao arquivo PSK: ele deve ser legível somente pelo usuário Zabbix.
Edite os parâmetros TLS no arquivo de configuração do proxy do Zabbix (zabbix_proxy.conf). Por exemplo, defina:
TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002
O proxy se conectará ao server usando PSK. A identidade do PSK será "PSK 002".
(Para minimizar o tempo de inatividade, consulte como alterar o tipo de conexão em Gerenciamento da criptografia de conexão).
Configure o PSK para este proxy no frontend do Zabbix. Acesse
Administration > Proxies, selecione o proxy e acesse a aba Encryption. Em
"Connections from proxy", marque PSK. Cole "PSK 002" no campo
"PSK identity" e
"e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9" no campo
"PSK". Clique em "Update".
Reinicie o proxy. Ele começará a usar conexões criptografadas baseadas em PSK com o server. Verifique os arquivos de log do server e do proxy em busca de mensagens de erro.
Para um proxy passivo, o procedimento é muito semelhante.
A única diferença é definir TLSAccept=psk no arquivo de configuração do proxy do Zabbix e definir Connections to proxy no frontend do Zabbix como PSK.
Solução de problemas de PSK
PSK contém um número ímpar de dígitos hexadecimais
O proxy ou agent não inicia, mensagem no log do proxy ou agent:
PSK inválido no arquivo "/home/zabbix/zabbix_proxy.psk"
String de identidade PSK maior que 128 bytes é passada para o GnuTLS
No log do lado do cliente TLS:
gnutls_handshake() failed: -110 The TLS connection was non-properly terminated.
No log do lado do servidor TLS.
gnutls_handshake() failed: -90 The SRP username supplied is illegal.
Valor de PSK muito longo usado com OpenSSL 1.1.1
No log do lado que está conectando:
...OpenSSL library (version OpenSSL 1.1.1 11 Sep 2018) initialized
...
...In zbx_tls_connect(): psk_identity:"PSK 1"
...zbx_psk_client_cb() requested PSK identity "PSK 1"
...End of zbx_tls_connect():FAIL error:'SSL_connect() set result code to SSL_ERROR_SSL: file ssl\statem\extensions_clnt.c line 801: error:14212044:SSL routines:tls_construct_ctos_early_data:internal error: TLS write fatal alert "internal error"'
No log do lado que está aceitando:
...Message from 123.123.123.123 is missing header. Message ignored.
Esse problema normalmente ocorre ao atualizar o OpenSSL da versão 1.0.x ou 1.1.0 para 1.1.1 e se o valor de PSK for maior que 512 bits (PSK de 64 bytes, informado como 128 dígitos hexadecimais).
Veja também: Limites de tamanho de valor