[comment]: # ({22b96536-5407a56a})
# 5 Conexão segura com o banco de dados

[comment]: # ({/22b96536-5407a56a})

[comment]: # ({b38f1bac-7cadd09e})
#### Visão geral

Esta seção fornece etapas de configuração do Zabbix e exemplos de configuração para conexões TLS seguras entre:

|Banco de dados|Componentes do Zabbix|
|--------|-----------------|
|MySQL|Frontend do Zabbix, server do Zabbix, proxy do Zabbix|
|PostgreSQL|Frontend do Zabbix, server do Zabbix, proxy do Zabbix|

Para configurar a criptografia de conexão dentro do SGBD, consulte a documentação oficial do fornecedor para obter detalhes:

-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/replication-encrypted-connections.html):
    servidores de banco de dados de replicação de origem e réplica.
-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/group-replication-security.html):
    replicação em grupo, etc. servidores de banco de dados.
-   [PostgreSQL](https://www.postgresql.org/docs/current/encryption-options.html)
    opções de criptografia.

Todos os exemplos são baseados nas versões GA do MySQL CE (8.0) e PgSQL (13) disponíveis através dos repositórios oficiais usando CentOS 8.

[comment]: # ({/b38f1bac-7cadd09e})

[comment]: # ({b7e9dcca-5af34b43})
##### Requisitos

O seguinte é necessário para configurar a criptografia:

-   Sistema operacional suportado pelo desenvolvedor com OpenSSL >=1.1.X ou
    alternativa.

::: noteclassic
 Recomenda-se evitar sistemas operacionais em status de fim de vida,
especialmente no caso de novas instalações 
:::

-   Mecanismo de banco de dados (RDBMS) instalado e mantido a partir do repositório oficial fornecido pelo desenvolvedor. Os sistemas operacionais frequentemente são fornecidos com versões desatualizadas do software de banco de dados para as quais o suporte à criptografia não é implementado, por exemplo, sistemas baseados em RHEL 7 e PostgreSQL 9.2, MariaDB 5.5 sem suporte à criptografia.

[comment]: # ({/b7e9dcca-5af34b43})

[comment]: # ({53676bc9-9801ac5b})
##### Terminologia

Definir esta opção força o uso de conexão TLS com o banco de dados a partir do
Zabbix server/proxy e frontend para o banco de dados:

-   `required` - conectar usando TLS como modo de transporte sem verificações de identidade
-   `verify_ca` - conectar usando TLS e verificar o certificado
-   `verify_full` - conectar usando TLS, verificar o certificado e verificar se a identidade do banco de dados (CN) especificada por DBHost corresponde ao seu certificado

[comment]: # ({/53676bc9-9801ac5b})

[comment]: # ({84f30836-84f30836})
#### Configuração do Zabbix

[comment]: # ({/84f30836-84f30836})

[comment]: # ({fbdb2d57-b1071a8a})
##### Frontend para o banco de dados

Uma conexão segura com o banco de dados pode ser configurada durante a instalação do frontend:

-   Marque a caixa de seleção *Criptografia TLS do banco de dados* na etapa [Configurar conexão com o BD](/manual/installation/frontend#configure_db_connection) para habilitar a criptografia de transporte.
-   Marque a caixa de seleção *Verificar certificado do banco de dados* que aparece quando o campo *Criptografia TLS* está marcado para habilitar a criptografia com certificados.

::: noteclassic
 Para MySQL, a caixa de seleção *Criptografia TLS do banco de dados* é desabilitada se o *Host do banco de dados* estiver definido como localhost, porque a conexão que usa um arquivo de soquete (no Unix) ou memória compartilhada (no Windows) não pode ser criptografada.<br>
Para PostgreSQL, a caixa de seleção *Criptografia TLS* é desabilitada se o valor do campo *Host do banco de dados* começar com uma barra ou o campo estiver vazio.

:::

Os seguintes parâmetros ficam disponíveis no modo de criptografia TLS com certificados (se ambas as caixas de seleção estiverem marcadas):

|Parâmetro|Descrição|
|--|--------|
|*Arquivo CA TLS do banco de dados*|Especifique o caminho completo para um arquivo de autoridade certificadora (CA) TLS válido.|
|*Arquivo de chave TLS do banco de dados*|Especifique o caminho completo para um arquivo de chave TLS válido.|
|*Arquivo de certificado TLS do banco de dados*|Especifique o caminho completo para um arquivo de certificado TLS válido.|
|*Verificação do host do banco de dados*|Marque esta caixa de seleção para ativar a verificação do host.<br>Desabilitado para MYSQL, pois a biblioteca PHP MySQL não permite pular a etapa de validação do certificado do par.|
|*Lista de cifras TLS do banco de dados*|Especifique uma lista personalizada de cifras válidas. O formato da lista de cifras deve estar em conformidade com o padrão OpenSSL.<br>Disponível apenas para MySQL.|

::: noteimportant
Os parâmetros TLS devem apontar para arquivos válidos. Se apontarem para arquivos inexistentes ou inválidos, isso resultará em erro de autorização.<br>
Se os arquivos de certificado forem graváveis, o frontend gera um aviso no relatório [Informações do sistema](/manual/web_interface/frontend_sections/reports/status_of_zabbix) de que "Os arquivos de certificado TLS devem ser somente leitura." (exibido apenas se o usuário do PHP for o proprietário do certificado).

Certificados protegidos por senha não são suportados.
:::

[comment]: # ({/fbdb2d57-b1071a8a})

[comment]: # ({18fae872-d4fd87a2})
##### Casos de uso

O frontend do Zabbix usa a interface GUI para definir as opções possíveis: `required`,
`verify_ca`, `verify_full`. Especifique as opções necessárias na etapa do assistente de instalação *Configurar conexões com o BD*. Essas opções são mapeadas para o
arquivo de configuração (zabbix.conf.php) da seguinte maneira:

|Configurações da GUI|Arquivo de configuração|Descrição|Resultado|
|----|----|----|----|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_transport.png)|...<br>// Usado para conexão TLS.<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '';<br>$DB\['CERT\_FILE'\] = '';<br>$DB\['CA\_FILE'\] = '';<br>$DB\['VERIFY\_HOST'\] = false;<br>$DB\['CIPHER\_LIST'\] = '';<br>...|Marque *Criptografia TLS do banco de dados*<br>Deixe *Verificar certificado do banco de dados* desmarcado|Habilita o modo `required`.|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_ca.png)|...<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '';<br>$DB\['CERT\_FILE'\] = '';<br>$DB\['CA\_FILE'\] = '/etc/ssl/mysql/ca.pem';<br>$DB\['VERIFY\_HOST'\] = false;<br>$DB\['CIPHER\_LIST'\] = '';<br>...|1\. Marque *Criptografia TLS do banco de dados* e *Verificar certificado do banco de dados*<br>2. Especifique o caminho para *Arquivo CA TLS do banco de dados*|Habilita o modo `verify_ca`.|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_full1.png)|...<br>// Usado para conexão TLS com lista de cifras estritamente definida.<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\_FILE'\] = '<key\_file\_path>';<br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\_HOST'\] = true;<br>$DB\['CIPHER\_LIST'\] = '<cipher\_list>';<br>...<br><br>Ou:<br><br>...<br>// Usado para conexão TLS sem lista de cifras definida - selecionada pelo servidor MySQL<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\_FILE'\] = '<key\_file\_path>';<br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\_HOST'\] = true;<br>$DB\['CIPHER\_LIST'\] = '';<br>...|1\. Marque *Criptografia TLS do banco de dados* e *Verificar certificado do banco de dados*<br>2. Especifique o caminho para *Arquivo de chave TLS do banco de dados*<br>3. Especifique o caminho para *Arquivo CA TLS do banco de dados*<br>4. Especifique o caminho para *Arquivo de certificado TLS do banco de dados*<br>5. Especifique *Lista de cifras TLS do banco de dados* (opcional)|Habilita o modo `verify_full` para MySQL.|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_full2.png)|...<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\_FILE'\] = '<key\_file\_path>';<br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\_HOST'\] = true;<br>$DB\['CIPHER\_LIST'\] = ' ';<br>...<br>|1\. Marque *Criptografia TLS do banco de dados* e *Verificar certificado do banco de dados*<br>2. Especifique o caminho para *Arquivo de chave TLS do banco de dados*<br>3. Especifique o caminho para *Arquivo CA TLS do banco de dados*<br>4. Especifique o caminho para *Arquivo de certificado TLS do banco de dados*<br>5. Marque *Verificação do host do banco de dados*|Habilita o modo `verify_full` para PostgreSQL.|

**Veja também:** [Exemplos de configuração de criptografia para
MySQL](/manual/appendix/install/db_encrypt/mysql), [Exemplos de configuração de criptografia para
PostgreSQL](/manual/appendix/install/db_encrypt/postgres).

[comment]: # ({/18fae872-d4fd87a2})

[comment]: # ({b504a368-9cfb91d1})
#### Configuração do Zabbix server/proxy

Conexões seguras com o banco de dados podem ser configuradas com os respectivos
parâmetros no arquivo de configuração do Zabbix [server](/manual/appendix/config/zabbix_server)
e/ou [proxy](/manual/appendix/config/zabbix_proxy).

|Configuração|Resultado|
|--|--|
|Nenhuma|Conexão com o banco de dados sem criptografia.|
|1\. Defina `DBTLSConnect=required`|O server/proxy faz uma conexão TLS com o banco de dados. Uma conexão não criptografada não é permitida.|
|1\. Defina `DBTLSConnect=verify_ca`<br>2. Defina `DBTLSCAFile` - especifique o arquivo da autoridade certificadora TLS|O server/proxy faz uma conexão TLS com o banco de dados após verificar o certificado do banco de dados.|
|1\. Defina `DBTLSConnect=verify_full`<br>2. Defina `DBTLSCAFile` - especifique o arquivo da autoridade certificadora TLS|O server/proxy faz uma conexão TLS com o banco de dados após verificar o certificado do banco de dados e a identidade do host do banco de dados.|
|1\. Defina `DBTLSCAFile` - especifique o arquivo da autoridade certificadora TLS<br>2. Defina `DBTLSCertFile` - especifique o arquivo do certificado da chave pública do cliente<br>3. Defina `DBTLSKeyFile` - especifique o arquivo da chave privada do cliente|O server/proxy fornece um certificado de cliente ao conectar-se ao banco de dados.|
|1\. Defina `DBTLSCipher` - a lista de cifras de criptografia que o cliente permite para conexões usando protocolos TLS até TLS 1.2<br><br>ou `DBTLSCipher13` - a lista de cifras de criptografia que o cliente permite para conexões usando o protocolo TLS 1.3|(MySQL) A conexão TLS é feita usando uma cifra da lista fornecida.<br>(PostgreSQL) Definir esta opção será considerado um erro.|

[comment]: # ({/b504a368-9cfb91d1})
