[comment]: # ({22b96536-5407a56a})
# 5 Conexión segura a la base de datos

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

[comment]: # ({b38f1bac-7cadd09e})
#### Descripción general

Esta sección proporciona los pasos de configuración de Zabbix y ejemplos de configuración para
conexiones TLS seguras entre:

|Base de datos|Componentes de Zabbix|
|-------------|---------------------|
|MySQL|Interfaz web de Zabbix, servidor Zabbix, proxy Zabbix|
|PostgreSQL|Interfaz web de Zabbix, servidor Zabbix, proxy Zabbix|

Para configurar el cifrado de la conexión dentro del SGBD, consulte la documentación oficial del proveedor para más detalles:

-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/replication-encrypted-connections.html):
    servidores de base de datos de replicación de origen y réplica.
-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/group-replication-security.html):
    replicación en grupo, etc. servidores de base de datos.
-   [PostgreSQL](https://www.postgresql.org/docs/current/encryption-options.html)
    opciones de cifrado.

Todos los ejemplos se basan en las versiones GA de MySQL CE (8.0) y PgSQL
(13) disponibles a través de los repositorios oficiales utilizando CentOS 8.

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

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

Se requiere lo siguiente para configurar el cifrado:

-   Sistema operativo compatible por el desarrollador con OpenSSL >=1.1.X o
    alternativa.

::: noteclassic
 Se recomienda evitar sistemas operativos en estado de fin de vida,
especialmente en el caso de nuevas instalaciones 
:::

-   Motor de base de datos (RDBMS) instalado y mantenido desde el repositorio oficial proporcionado por el desarrollador. Los sistemas operativos a menudo se entregan con versiones de software de base de datos obsoletas para las cuales no se implementa soporte de cifrado, por ejemplo, sistemas basados en RHEL 7 y PostgreSQL 9.2, MariaDB 5.5 sin soporte de cifrado.

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

[comment]: # ({53676bc9-9801ac5b})
##### Terminología

Configurar esta opción obliga a usar una conexión TLS a la base de datos desde
el servidor/proxy de Zabbix y el frontend a la base de datos:

-   `required` - conectar usando TLS como modo de transporte sin comprobaciones de identidad
-   `verify_ca` - conectar usando TLS y verificar el certificado
-   `verify_full` - conectar usando TLS, verificar el certificado y verificar que
    la identidad de la base de datos (CN) especificada por DBHost coincida con su certificado

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

[comment]: # ({84f30836-84f30836})
#### Configuración de Zabbix

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

[comment]: # ({9a1ac113-b1071a8a})
##### Frontend a la base de datos

Se puede configurar una conexión segura a la base de datos durante la instalación del frontend:

-   Marque la casilla *Database TLS encryption* en el paso [Configure DB
    connection](/manual/installation/frontend#configure-db-connection)
    para habilitar el cifrado del transporte.
-   Marque la casilla *Verify database certificate*, que aparece cuando
    el campo *TLS encryption* está marcado, para habilitar el cifrado con
    certificados.

::: noteclassic
 Para MySQL, la casilla *Database TLS encryption* está deshabilitada si *Database host* está establecido en localhost, porque una conexión que utiliza un archivo de socket (en Unix) o memoria compartida (en Windows) no puede cifrarse.<br>
Para PostgreSQL, la casilla *TLS encryption* está deshabilitada si el valor
del campo *Database host* comienza con una barra o si el campo está vacío.

:::

Los siguientes parámetros están disponibles en el modo de cifrado TLS con
certificados (si ambas casillas están marcadas):

|Parameter|Description|
|--|--------|
|*Database TLS CA file*|Especifique la ruta completa a un archivo válido de autoridad de certificación (CA) TLS.|
|*Database TLS key file*|Especifique la ruta completa a un archivo válido de clave TLS.|
|*Database TLS certificate file*|Especifique la ruta completa a un archivo válido de certificado TLS.|
|*Database host verification*|Marque esta casilla para activar la verificación del host.<br>Deshabilitado para MYSQL, porque la biblioteca PHP MySQL no permite omitir el paso de validación del certificado del par.|
|*Database TLS cipher list*|Especifique una lista personalizada de cifrados válidos. El formato de la lista de cifrados debe ajustarse al estándar OpenSSL.<br>Disponible solo para MySQL.|

::: noteimportant
Los parámetros TLS deben apuntar a archivos válidos. Si apuntan a archivos inexistentes o no válidos, se producirá un error de autorización.<br>
Si los archivos de certificado tienen permisos de escritura, el frontend genera una advertencia en el informe [System information](/manual/web_interface/frontend_sections/reports/status_of_zabbix) indicando que "TLS certificate files must be read-only." (se muestra solo si el usuario de PHP es el propietario del certificado).

No se admiten certificados protegidos con contraseña. 
:::

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

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

La interfaz gráfica de Zabbix utiliza la interfaz GUI para definir las opciones posibles: `required`, `verify_ca`, `verify_full`. Especifique las opciones requeridas en el paso del asistente de instalación *Configurar conexiones a la base de datos*. Estas opciones se asignan al archivo de configuración (zabbix.conf.php) de la siguiente manera:

|Configuración GUI|Archivo de configuración|Descripción|Resultado|
|----|----|----|----|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_transport.png)|...<br>// Usado para conexión 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 *Cifrado TLS de base de datos*<br>Deje *Verificar certificado de base de datos* sin marcar|Habilita el 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 *Cifrado TLS de base de datos* y *Verificar certificado de base de datos*<br>2. Especifique la ruta al *Archivo CA TLS de base de datos*|Habilita el modo `verify_ca`.|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_full1.png)|...<br>// Usado para conexión TLS con lista de cifrado estrictamente 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>O bien:<br><br>...<br>// Usado para conexión TLS sin lista de cifrado definida - seleccionada por el 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 *Cifrado TLS de base de datos* y *Verificar certificado de base de datos*<br>2. Especifique la ruta al *Archivo de clave TLS de base de datos*<br>3. Especifique la ruta al *Archivo CA TLS de base de datos*<br>4. Especifique la ruta al *Archivo de certificado TLS de base de datos*<br>5. Especifique la *Lista de cifrado TLS de base de datos* (opcional)|Habilita el 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 *Cifrado TLS de base de datos* y *Verificar certificado de base de datos*<br>2. Especifique la ruta al *Archivo de clave TLS de base de datos*<br>3. Especifique la ruta al *Archivo CA TLS de base de datos*<br>4. Especifique la ruta al *Archivo de certificado TLS de base de datos*<br>5. Marque *Verificación de equipo de base de datos*|Habilita el modo `verify_full` para PostgreSQL.|

**Consulte también:** [Ejemplos de configuración de cifrado para
MySQL](/manual/appendix/install/db_encrypt/mysql), [Ejemplos de
configuración de cifrado para
PostgreSQL](/manual/appendix/install/db_encrypt/postgres).

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

[comment]: # ({b504a368-9cfb91d1})
#### Configuración del servidor/proxy de Zabbix

Las conexiones seguras a la base de datos pueden configurarse con los respectivos
parámetros en el archivo de configuración de [servidor](/manual/appendix/config/zabbix_server)
y/o [proxy](/manual/appendix/config/zabbix_proxy) de Zabbix.

|Configuración|Resultado|
|--|--|
|Ninguna|Conexión a la base de datos sin cifrado.|
|1\. Establecer `DBTLSConnect=required`|El servidor/proxy realiza una conexión TLS a la base de datos. No se permite una conexión sin cifrado.|
|1\. Establecer `DBTLSConnect=verify_ca`<br>2. Establecer `DBTLSCAFile` - especificar el archivo de la autoridad certificadora TLS|El servidor/proxy realiza una conexión TLS a la base de datos después de verificar el certificado de la base de datos.|
|1\. Establecer `DBTLSConnect=verify_full`<br>2. Establecer `DBTLSCAFile` - especificar el archivo de la autoridad certificadora TLS|El servidor/proxy realiza una conexión TLS a la base de datos después de verificar el certificado de la base de datos y la identidad del equipo de la base de datos.|
|1\. Establecer `DBTLSCAFile` - especificar el archivo de la autoridad certificadora TLS<br>2. Establecer `DBTLSCertFile` - especificar el archivo del certificado de clave pública del cliente<br>3. Establecer `DBTLSKeyFile` - especificar el archivo de clave privada del cliente|El servidor/proxy proporciona un certificado de cliente al conectarse a la base de datos.|
|1\. Establecer `DBTLSCipher` - la lista de cifrados de encriptación que el cliente permite para conexiones usando protocolos TLS hasta TLS 1.2<br><br>o `DBTLSCipher13` - la lista de cifrados de encriptación que el cliente permite para conexiones usando el protocolo TLS 1.3|(MySQL) Se realiza una conexión TLS utilizando un cifrado de la lista proporcionada.<br>(PostgreSQL) Establecer esta opción se considerará un error.|

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