web-dev-qa-db-ja.com

Postfix「警告:RSA秘密鍵をファイルから取得できません」

私は このチュートリアル に従って、仮想ユーザーのバックエンドとしてdovecotとmysqlを使用してPostfixメールサーバーを設定しました。

これでほとんどの部分が機能し、POP3(S)とIMAP(S)に接続できます。

使用する

echo TEST-MAIL | mail [email protected]

私のhotmailアカウントにログインすると、メールが表示されます。

それも逆に機能するため、example.comのMXエントリが最終的に伝達されたため、[email protected]から-に送信された電子メールを受信できます[email protected]そして、IMAP経由のSTARTTLSを使用してThunderbirdで表示します。

エラーメッセージ "5.7.1:Relay access denied"にメールを送信しようとすると[email protected]にログインしてThunderbirdを使用する[email protected]、私は自分のサーバーが「オープンメールリレー」として機能していることを理解しました。これはもちろん、悪いことです。

このコメント他のturorial のようなチュートリアルのオプション部分をさらに掘り下げて、私は経由でメールを送信できるように、これらの手順も完了することにしました。 [email protected] Mozilla Thunderbirdを通じて、エラーメッセージ "5.7.1:Relay access denied"が表示されなくなりました(一般的なメールサーバーがオープンリレーされたメールを拒否するため)。

しかし、私は/ var/log/mail.logで、SMTPSでpostfixを機能させようとしてエラーに遭遇しました。

Sep 28 17:29:34 domain postfix/smtpd[20251]: warning: cannot get RSA private key from file /etc/ssl/certs/postfix.pem: disabling TLS support
Sep 28 17:29:34 domain postfix/smtpd[20251]: warning: TLS library problem: 20251:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: ANY PRIVATE KEY:
Sep 28 17:29:34 domain postfix/smtpd[20251]: warning: TLS library problem: 20251:error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib:ssl_rsa.c:669:

Thunderbirdのポート465経由でSMTP SSL/TLSを使用して、新しくインストールしたメールサーバーからメールを送信しようとした直後に、このエラーがログに記録されます。 Thunderbirdは、タイムアウトが発生したことを通知します。

グーグルはその問題に関していくつかの結果を持っていますが、私はそれらのどれでもそれを機能させることができませんでした。ここではそれらのいくつかをリンクしますが、新しいユーザーとして2つのハイパーリンクしか使用できません。

私の/ etc/postfix/master.cf

smtp      inet  n       -       -       -       -       smtpd
smtps     inet  n       -       -       -       -       smtpd
   -o smtpd_tls_wrappermode=yes
   -o smtpd_sasl_auth_enable=yes

そしてnmapは教えてくれます

PORT     STATE SERVICE
[...]
465/tcp  open  smtps
[...]

私の/ etc/postfix/main.cfは次のようになります

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
#smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem            #default postfix generated
#smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key #default postfix generated
smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem
smptd_tls_key_file = /etc/ssl/private/postfix.pem
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smptd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.com, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
mailbox_command = /usr/lib/dovecot/deliver

* .pemファイルは、上記のチュートリアルで説明したように、

Postfix
To create a certificate to be used by Postfix use:

openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem -keyout /etc/ssl/private/postfix.pem

Do not forget to set the permissions on the private key so that no unauthorized people can read it:

chmod o= /etc/ssl/private/postfix.pem

You will have to tell Postfix where to find your certificate and private key because by default it will look for a dummy certificate file called "ssl-cert-snakeoil":

postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem
postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem

ログによればimapsとpop3sを介したログインは正常に機能するため、ここに/ etc/dovecot/dovecot.confを含める必要はないと思います。唯一の問題は、postfixが自己生成の自己署名証明書を適切に使用することです。

助けてくれてありがとう!

EDIT:試してみました この別のチュートリアル postfixの自己署名証明書を生成しようとしても、同じエラーが発生します。他に何をテストするのか本当にわかりません。

SSLライブラリもチェックしましたが、すべて問題ないようです。

  root@domain:~# ldd /usr/sbin/postfix
    linux-vdso.so.1 =>  (0x00007fff91b25000)
    libpostfix-global.so.1 => /usr/lib/libpostfix-global.so.1 (0x00007f6f8313d000)
    libpostfix-util.so.1 => /usr/lib/libpostfix-util.so.1 (0x00007f6f82f07000)
    libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0x00007f6f82cb1000)
    libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x00007f6f82910000)
    libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0x00007f6f826f7000)
    libdb-4.8.so => /usr/lib/libdb-4.8.so (0x00007f6f8237c000)
    libnsl.so.1 => /lib/libnsl.so.1 (0x00007f6f82164000)
    libresolv.so.2 => /lib/libresolv.so.2 (0x00007f6f81f4e000)
    libc.so.6 => /lib/libc.so.6 (0x00007f6f81beb000)
    libdl.so.2 => /lib/libdl.so.2 (0x00007f6f819e7000)
    libz.so.1 => /usr/lib/libz.so.1 (0x00007f6f817d0000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007f6f815b3000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f6f83581000)

Ansgar Wiechersの指示に従って、最終的に機能します。

postconf -nには必要な行が含まれていました。 opensslによる証明書/キーのチェックで、両方のファイルが有効であることが示されました。

したがって、それは実際に権限の問題でした! /etc/ssl/*/postfix.pemファイルをpostfix:postfixに変更しても、postfixがファイルを読み取るには不十分であることを知りませんでした。

14
phew

main.cfの内容は、必ずしもアクティブなPostfix構成を表しているとは限りません。 postconf -nの出力で、次の2つのパラメータを確認します。

smtpd_recipient_restrictions = 
  permit_mynetworks, 
  permit_sasl_authenticated, 
  reject_unauth_destination
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

$mynetworksがlocalhostに制限されており、$smtpd_recipient_restrictionsが最初の3つの制限としてpermit_mynetworks, permit_sasl_authenticated, reject_unauth_destinationを示している場合、オープンリレーではありません。

/etc/ssl/private/postfix.pemに有効なキーが含まれ、/etc/ssl/certs/postfix.pemに有効な証明書が含まれていることを確認します。

openssl rsa -in /etc/ssl/private/postfix.pem -check -noout
openssl x509 -in /etc/ssl/certs/postfix.pem -text -noout

Postfixがファイルにアクセスできるかどうかも確認する必要があります。私のサーバーでは、/etc/ssl/privateの権限は

drwx--x---  2 root ssl-cert  4096 Aug 03 01:55 private/

したがって、ディレクトリの権限によりPostfixがその中のファイルにアクセスできないため、キーファイルを単純にchowningしても効果はありません。

設定を簡略化してみてください。証明書とキーを1つのファイルに入れます。

cat /etc/ssl/*/postfix.pem > /etc/postfix/server.pem
chmod 640 /etc/postfix/server.pem
chown postfix:postfix /etc/postfix/server.pem

main.cfを次のように変更します。

smtpd_tls_cert_file = /etc/postfix/server.pem
smtpd_tls_key_file = $smtpd_tls_cert_file

Postfixを再起動し、サーバーがキーにアクセスできるかどうかを確認します。

16
Ansgar Wiechers

これらの指示にはchmod o= /etc/ssl/private/postfix.pemが含まれていますが、どのユーザーがファイルを所有しているかについては何も言われていません。

私のボックスでは、smtpdプロセスはpostfixユーザーとして実行されます。 postfixユーザーが/etc/ssl/private/postfix.pemにアクセスできることを確認します。または、単にchown postfix:postfix /etc/ssl/private/postfix.pemとすることもできます。

もう1つの明らかな問題は、エラーメッセージの内容です。そのファイルには有効なRSAキーがありません。 /etc/ssl/private/postfix.pemを調べて、少なくともRSAキーのように見えるものが含まれていることを確認してください。 質問に貼り付けないでください。

実際、エラーメッセージは/etc/ssl/certs/postfix.pemではなく/etc/ssl/private/postfix.pemに関するものであることに気づきました。 /etc/ssl/certs/postfix.pemの所有権、権限、内容も確認してください。


そのエラーメッセージは少し混乱します。 cannot get RSA private key from file /etc/ssl/certs/postfix.pemと表示されていますが、秘密鍵は/etc/ssl/private/postfix.pemにある必要があります。 TLSを使用したPostfixの経験が足りないので、これがバグのPostfixなのか、設定の誤りなのかがわかりません。

2
Ladadadada

証明書はキーと一致する必要があります。私の場合、権限とは関係ありませんでした

自己署名証明書とキーを作成する https://msol.io/blog/tech/create-a-self-signed-ssl-certificate-with-openssl/

お役に立てれば

1
user397245

キーにパスフレーズがないことを確認してください。あなたはそれを削除することができます

openssl rsa -in key.pem -out newkey.pem

彼らが一緒に使用している場合

openssl rsa -in mycert.pem -out newcert.pem
openssl x509 -in mycert.pem >>newcert.pem

パスフレーズは、RSAA秘密鍵を取得できなかったことをログに警告し、TLSサポートを無効にします。これが誰かを助けることを願っています!

0
user419756