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 によってキーへのアクセスが拒否されたため、キーを読み取ることができません。

この問題を解決するには、コピー(cpまたは を使用mv -Z)、キーを、SELinux が TLS キーと証明書が保存されると想定しているディレクトリ (つまり、 とそのサブディレクトリ) にコピーします。または を/etc/pki/tls使用した場合、新しいファイルには正しい SELinux コンテキストが含まれます。次に、Dovecot 構成でファイルの場所を更新します。cpmv -Z

関連情報