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


14

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

これで、ほとんどの部分が動作するようになり、POP3(S)とIMAP(S)に接続できます。

を使用して

echo TEST-MAIL | mail myaccount@hotmail.com

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

また、逆故にための私のMXエントリで働くexample.comは、私がメールを受信することができることから送られていますので、最終的には、伝播してきたmyaccount@hotmail.commyvirtualuser@example.comやIMAP経由でSTARTTLSを使用して、Thunderbirdの中でそれらを表示します。

myvirtualuser@example.comにログインしているThunderbirdを使用してmyaccount@hotmail.comにメールを送信しようとすると、「5.7.1:リレーアクセスが拒否されました」というエラーメッセージが表示された後、もう少し調査して、サーバーが動作していることがわかりました「オープンメールリレー」として、もちろん-これは悪いことです。

このコメントその他のチュートリアルなどのチュートリアルのオプション部分をさらに掘り下げて、これらの手順を完了することで、エラーメッセージ「5.7.1」が表示されず、myvirtualuser @ example.com経由でMozilla Thunderbird 経由でメールを送信できるようにしました。:リレーアクセスが拒否されました "(一般的なメールサーバーはオープンリレーされた電子メールを拒否するため)。

しかし今、SMTPSでpostfixを動作させようとするとエラーが発生しました。/var/log/mail.log

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はタイムアウトが発生したことを通知します。

Googleにはその問題に関していくつかの結果がありますが、それらのいずれでも動作させることができませんでした。ここではそれらの一部をリンクしますが、新しいユーザーとして使用できるのは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が自己生成の自己署名証明書を適切に使用することです。

どんな助けも感謝します!

編集: 私は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)

次の後アンスガーWiechersの指示をそのは最終的に取り組んでいます。

postconf -nあるべき行を含んでいた。opensslを介した証明書/キーチェックにより、両方のファイルが有効であることが示されました。

したがって、実際にはアクセス許可の問題でした!/etc/ssl/*/postfix.pemファイルをpostfix:postfixにchownするだけでは、postfixがファイルを読み取るのに十分ではないことを知りませんでした。

回答:


16

の内容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に制限され、最初の3つの制限として$smtpd_recipient_restrictions表示される場合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/

したがって、単純chownにキーファイルを入力しても、ディレクトリのアクセス許可によりPostfixがその中のファイルにアクセスできないため、何の役にも立ちません。

セットアップを簡素化してください。証明書とキーを単一のファイルに入れます:

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を再起動し、サーバーがキーにアクセスできるかどうかを確認します。


それはそれを固定し、非常にあなたの両方ありがとうLadadadadaアンスガーWiechersを
あー

postconf -nパートをありがとう。コピーと私はすでに確認されたが見逃していたことが、設定ファイルのタイプミスを見てみましょう1つの証明書ファイルと無関係なキーをもたらし、その出力に焦点を当てて貼り付け...
アダムKerz

2

これらの指示は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であるか、設定の間違いであるかを知るのに十分な経験がありません。


私は、postfixの両方のファイルをchown'ed:Postfixは、その後のpostfixを再起動しますが、電子メールを送信しようとすることは、まだ/var/log/mail.logでエラーを再生している
あー

root @ domain:/ etc / ssl / certs#ls -l postfix.pem -rw-r--r-- 1 postfix postfix 1363 Sep 28 16:36 postfix.pemで始まり、証明書コンテンツが含まれているようです- --- -----証明書をBEGINまでデータを含む----- END CERTIFICATE -----証明書
あー

私もそれについて疑問に思っていたので、ファイルを交換してみました。ただし、/ certs /のファイルには証明書ヘッダー「---- BEGIN CERTIFICATE -----」が含まれているため、これは意味がありません。とにかく助けてくれてありがとう。
ふじ

1

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

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

お役に立てれば


無料のレッツ暗号化証明書を使用する方が良いと思いませんか?

どうもありがとう!コピーして貼り付けると、1つの証明書ファイルと無関係なキーが作成されました。
アダムケルツ

0

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

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サポートを無効にします。これが誰かを助けることを願っています!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.