
Tengo un servidor Dovecot que usa MariaDB para buzones virtuales. El servidor MariaDB está en otra máquina en la misma LAN.
Recientemente habilitamos TLS en la máquina MariaDB.
Dovecot funciona bien cuando require_secure_transport
está apagado, pero no se conecta cuando lo activamos require_secure_transport
en el archivo de configuración de MariaDB.
El error es:
Error: mysql(xxx.xxx.xxx.xxx): Connect failed to database (db_name): Access denied for user 'db_user'@'xxx.xxx.xxx.xxx' (using password: YES)
Esto parece un error de autenticación, pero conectarse con este mismo usuario y contraseña funciona bien cuando require_secure_transport
está desactivado, por lo que MariaDB rechaza la conexión porque Dovecot no usa TLS.
La cadena de conexión /etc/dovecot/dovecot-sql.conf.ext
se ve así:
connect = host=db0.mydomain.com dbname=my_db user=the_user password=secret ssl_ca=/etc/ssl/authority/authority.crt
El archivo de configuración dice:
ssl_ca, ssl_ca_path: configura uno o ambos para habilitar SSL
¿Puedo obtener detalles más detallados del error? Por ejemplo, si la versión de TLS no coincide, ¿puedo hacer que se muestre en alguna parte?
¿Hay alguna configuración en Dovecot que deba cambiar?
ACTUALIZACIÓN: Agregar ssl_verify_server_cert=no
a la cadena de conexión /etc/dovecot/dovecot-sql.conf.ext
permite que la conexión funcione.
Entonces parece ser un error de verificación del certificado. Pero sin un registro más detallado, no estoy seguro de qué es lo que no le gusta del certificado.
El certificado está firmado por la CA en la cadena de conexión. Sería bueno saber qué nombre común está comprobando y también si Dovecot utilizará alguno de los valores SAN para el certificado.
Respuesta1
Logré que esto funcionara correctamente configurando un servidor DNS en la red local con registros para los nombres de host del servidor imap y MariaDB, y luego configurándolo resolv.conf
en ambas máquinas para usarlo.
Dovecot ahora se conecta sin problemas con require_secure_transport
el conjunto en MariaDB y ssl_verify_server_cert=yes
el conjunto en la cadena de conexión de Dovecot.
Sin un mensaje de error más detallado para la depuración, mi mejor suposición es que la implementación de TLS ignora las asignaciones en /etc/hosts
y requiere el uso de un servidor DNS real.