
我有一個 Dovecot 伺服器,它使用 MariaDB 作為虛擬郵箱。 MariaDB 伺服器位於同一 LAN 中的另一台電腦上。
我們最近在 MariaDB 機器上啟用了 TLS。
Dovecot 在require_secure_transport
關閉時運作正常,但當我們require_secure_transport
在 MariaDB 設定檔中開啟時無法連線。
錯誤是:
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)
這看起來像是身份驗證錯誤,但在require_secure_transport
關閉時使用相同的使用者和密碼連接可以正常工作,因此 MariaDB 拒絕連接,因為 Dovecot 不使用 TLS。
連接字串/etc/dovecot/dovecot-sql.conf.ext
如下所示:
connect = host=db0.mydomain.com dbname=my_db user=the_user password=secret ssl_ca=/etc/ssl/authority/authority.crt
設定檔說:
ssl_ca、ssl_ca_path - 設定其中之一或兩者以啟用 SSL
我可以獲得錯誤的更多詳細資訊嗎?例如,如果 TLS 版本不匹配,我可以將其顯示在某處嗎?
Dovecot 中是否有需要更改的設定?
更新:新增ssl_verify_server_cert=no
到連接字串中/etc/dovecot/dovecot-sql.conf.ext
允許連接正常工作。
所以這似乎是證書驗證錯誤。但如果沒有更詳細的日誌記錄,我不確定它不喜歡證書的什麼。
憑證由 CA 在連接字串中簽署。最好知道它正在檢查什麼通用名稱,以及 Dovecot 是否會使用任何 SAN 值作為憑證。
答案1
我透過在本機網路上設定一個 DNS 伺服器並記錄 imap 和 MariaDB 伺服器主機名稱的記錄,然後resolv.conf
在兩台電腦上進行設定來使用它,從而使其正常工作。
Dovecot 現在可以毫無問題地連接require_secure_transport
MariaDB 中的設定以及ssl_verify_server_cert=yes
Dovecot 連接字串中的設定。
如果沒有更詳細的偵錯錯誤訊息,我最好的猜測是 TLS 實作會忽略 中的映射/etc/hosts
,並且需要使用實際的 DNS 伺服器。