Tenho um servidor Dovecot que usa MariaDB para caixas de correio virtuais. O servidor MariaDB está em outra máquina na mesma LAN.
Recentemente habilitamos o TLS na máquina MariaDB.
O Dovecot funciona bem quando require_secure_transport
está desligado, mas não consegue se conectar quando ligamos require_secure_transport
no arquivo de configuração MariaDB.
O erro é:
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)
Parece um erro de autenticação, mas a conexão com o mesmo usuário e senha funciona bem quando require_secure_transport
está desativada, então o MariaDB está recusando a conexão porque o Dovecot não está usando TLS.
A string de conexão /etc/dovecot/dovecot-sql.conf.ext
se parece com:
connect = host=db0.mydomain.com dbname=my_db user=the_user password=secret ssl_ca=/etc/ssl/authority/authority.crt
O arquivo de configuração diz:
ssl_ca, ssl_ca_path - Defina um ou ambos para ativar SSL
Posso obter detalhes mais detalhados do erro? Por exemplo, se for uma incompatibilidade de versão TLS, posso mostrar isso em algum lugar?
Existe uma configuração no Dovecot que preciso alterar?
ATUALIZAÇÃO: Adicionar ssl_verify_server_cert=no
à string de conexão /etc/dovecot/dovecot-sql.conf.ext
permite que a conexão funcione.
Portanto, parece ser um erro de verificação de certificado. Mas sem um registro mais detalhado, não tenho certeza do que não gosta no certificado.
O certificado é assinado pela CA na string de conexão. Seria bom saber qual nome comum ele está verificando e também se o Dovecot usará algum dos valores SAN para o certificado.
Consegui que isso funcionasse corretamente configurando um servidor DNS na rede local com registros para os nomes de host do servidor imap e MariaDB e, em seguida, configurando
resolv.conf
em ambas as máquinas para usá-lo.O Dovecot agora se conecta sem problemas com
require_secure_transport
set no MariaDB essl_verify_server_cert=yes
set na string de conexão do Dovecot.Sem uma mensagem de erro mais detalhada para depuração, meu melhor palpite é que a implementação do TLS ignora os mapeamentos
/etc/hosts
e requer o uso de um servidor DNS real.