Dovecot 无法读取 TLS 证书

Dovecot 无法读取 TLS 证书

在我的 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 中我可以看到证书和密钥被访问和加载。并且 dovecot 可以正常工作。但是当我再次删除 strace 时,我遇到了同样的问题。

这里可能发生什么事?

答案1

无法读取这些密钥,因为 SELinux 拒绝访问它们。

要解决此问题,复制(使用cpmv -Z)将密钥复制到 SELinux 期望存储 TLS 密钥和证书的目录,即及其子目录。如果您使用或 ,/etc/pki/tls新文件将具有正确的 SELinux 上下文。然后在 Dovecot 配置中更新文件的位置。cpmv -Z

相关内容