Ssl-Certificate

Dovecot 無法讀取 TLS 證書

  • August 29, 2021

在我的 CentOS 7 系統上,我試圖執行需要 TLS 的 dovecot。為此,我創建了我的私鑰和證書

[root@homeserver /]# ls -lZ indernet/cert/homeserver.*
-r--r--r--. root certuser system_u:object_r:default_t:s0   indernet/cert/homeserver.crt
-r--r-----. root certuser system_u:object_r:default_t:s0   indernet/cert/homeserver.key
[root@homeserver /]#

為了讓 dovecot 實際載入文件,我確保 /etc/dovecot/conf.d/10-ssl.conf 包含這些行:

ssl=required
ssl_key=</indernet/cert/homeserver.key
ssl_cert=</indernet/cert/homeserver.crt

有問題的部分:Dovecot 無法啟動,失敗並出現以下錯誤

dovecot: doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-ssl.conf line 14: ssl_key: Can't open file /indernet/cert/homeserver.key: Permission denied

我嘗試修改證書和密鑰的文件權限(根據https://doc.dovecot.org/configuration_manual/dovecot_ssl_configuration/這不應該是必需的),甚至是 777 並且沒有任何變化。有人建議我這可能是 SELinux 阻止了訪問,我配置了 unconfined_u:object_r:default_t:s0 以及 system_u:object_r:default_t:s0,如上所示。不用找了。

現在令人驚訝的部分:我非常好奇並編輯了 /usr/lib/systemd/system/dovecot.service 以包含

ExecStart=/bin/strace /usr/sbin/dovecot

然後在 /var/log/messages 我可以看到證書和密鑰被訪問和載入。和鴿舍的作品。但是當我再次刪除 strace 時,我遇到了同樣的問題。

這裡可能發生了什麼?

無法讀取密鑰,因為 SELinux 拒絕訪問它們。

要解決此問題,請將密鑰複製(使用cpmv -Z)到 SELinux 期望儲存 TLS 密鑰和證書的目錄,即/etc/pki/tls及其子目錄。cp如果您使用或,新文件將具有正確的 SELinux 上下文mv -Z。然後在 Dovecot 配置中更新文件的位置。

引用自:https://serverfault.com/questions/1075948