Postfix "peringatan: tidak bisa mendapatkan kunci pribadi RSA dari file"


14

Saya hanya mengikuti tutorial ini untuk mengatur mailserver postfix dengan dovecot dan mysql sebagai backend untuk pengguna virtual.

Sekarang saya membuat sebagian besar komponen berfungsi, saya dapat terhubung ke POP3 (S) dan IMAP (S).

Menggunakan

echo TEST-MAIL | mail myaccount@hotmail.com

berfungsi dengan baik, ketika saya masuk ke akun hotmail saya itu menunjukkan email.

Ia juga bekerja secara terbalik maka entri MX saya untuk example.com akhirnya telah disebarkan, jadi saya dapat menerima email yang dikirim dari myaccount@hotmail.com ke myvirtualuser@example.com dan melihatnya di Thunderbird menggunakan STARTTLS via IMAP.

Melakukan sedikit riset lebih lanjut setelah saya mendapatkan pesan kesalahan " 5.7.1: Akses relay ditolak " ketika mencoba mengirim email ke myaccount@hotmail.com menggunakan Thunderbird yang sedang masuk ke myvirtualuser@example.com , saya menemukan bahwa server saya bertindak sebagai "Open Mail Relay", yang - tentu saja - merupakan hal yang buruk.

Menggali lebih dalam bagian opsional tutorial seperti komentar ini dan turorial lainnya , saya memutuskan untuk menyelesaikan langkah-langkah ini juga untuk dapat mengirim email melalui myvirtualuser@example.com melalui Mozilla Thunderbird, tidak mendapatkan pesan kesalahan " 5.7.1 : Akses relay ditolak "lagi (karena server surat umum menolak email yang diteruskan terbuka).

Tapi sekarang saya mengalami kesalahan saat mencoba memperbaiki postfix dengan SMTPS, di /var/log/mail.log bunyinya

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:

Kesalahan itu dicatat tepat setelah saya mencoba mengirim surat dari server surat saya yang baru diinstal menggunakan SMTP SSL / TLS melalui port 465 di Thunderbird. Thunderbird kemudian memberitahuku waktu tunggu habis.

Google memiliki beberapa hasil mengenai masalah itu, namun saya tidak bisa menyelesaikannya dengan semua itu. Saya akan menautkan beberapa dari mereka di sini tetapi sebagai pengguna baru saya hanya diperbolehkan menggunakan dua hyperlink.

/Etc/postfix/master.cf saya terlihat seperti

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

dan nmap memberitahuku

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

/etc/postfix/main.cf saya terlihat seperti

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

File * .pem dibuat seperti dijelaskan dalam tutorial di atas, menggunakan

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

Saya rasa saya tidak perlu memasukkan /etc/dovecot/dovecot.conf di sini, karena login via imaps dan pop3s berfungsi dengan baik sesuai dengan log. Satu-satunya masalah adalah membuat postfix dengan benar menggunakan sertifikat yang dibuat sendiri dan ditandatangani sendiri.

Bantuan apa pun dihargai!

EDIT: Saya baru saja mencoba tutorial berbeda ini tentang menghasilkan sertifikat yang ditandatangani sendiri untuk postfix, masih mendapatkan kesalahan yang sama. Saya benar-benar tidak tahu harus diuji apa lagi.

Saya juga memeriksa pustaka SSL, tetapi semua tampaknya baik-baik saja:

  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)

Setelah mengikuti petunjuk Ansgar Wiechers akhirnya berhasil.

postconf -nberisi garis-garis sebagaimana mestinya. Pemeriksaan sertifikat / kunci melalui openssl memang menunjukkan bahwa kedua file tersebut valid.

Jadi memang sudah menjadi masalah izin! Tidak tahu bahwa chown'ing file /etc/ssl/*/postfix.pem ke postfix: postfix tidak cukup bagi postfix untuk membaca file.

Jawaban:


16

Konten main.cftidak selalu mewakili konfigurasi Postfix aktif Anda. Periksa output postconf -nuntuk dua parameter berikut:

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

Jika $mynetworksdibatasi untuk localhost dan $smtpd_recipient_restrictionsditampilkan permit_mynetworks, permit_sasl_authenticated, reject_unauth_destinationsebagai tiga pembatasan pertama, maka Anda bukan relai terbuka.

Verifikasi yang /etc/ssl/private/postfix.pemberisi kunci yang valid dan /etc/ssl/certs/postfix.pemberisi sertifikat yang valid:

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

Anda juga perlu memeriksa apakah Postfix dapat mengakses file. Di server saya, izin aktif /etc/ssl/privateadalah

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

Dengan demikian, hanya chownmemasukkan file kunci tidak akan ada gunanya bagi Anda, karena izin direktori mencegah Postfix mengakses file apa pun di dalamnya.

Coba sederhanakan pengaturan Anda. Masukkan sertifikat dan kunci ke dalam satu file:

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

dan ubah main.cfseperti ini:

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

Mulai ulang Postfix dan lihat apakah server dapat mengakses kunci.


Itu memperbaikinya, terima kasih banyak, kalian berdua Ladadadada dan Ansgar Wiechers .
Fiuh

Terima kasih untuk postconf -nbagiannya. Salin dan tempel menghasilkan satu file sertifikat dan kunci yang tidak terkait dan berfokus pada output yang biarkan saya melihat kesalahan ketik pada file konfigurasi yang sudah saya periksa tetapi tidak terjawab ...
Adam Kerz

2

Instruksi-instruksi itu chmod o= /etc/ssl/private/postfix.pemtetapi tidak mengatakan apa-apa tentang pengguna mana yang memiliki file.

Di kotak saya, smtpdproses berjalan sebagai postfixpengguna. Periksa apakah postfixpengguna dapat mengakses /etc/ssl/private/postfix.pem. Atau mungkin saja chown postfix:postfix /etc/ssl/private/postfix.pem.

Masalah jelas lainnya adalah apa yang dikatakan pesan kesalahan: Tidak ada kunci RSA yang valid dalam file itu. Lihat /etc/ssl/private/postfix.pemdan pastikan itu mengandung setidaknya sesuatu yang terlihat seperti kunci RSA. Jangan tempelkan ke pertanyaan Anda.

Sebenarnya, saya hanya memperhatikan bahwa pesan kesalahannya adalah untuk /etc/ssl/certs/postfix.pem, bukan /etc/ssl/private/postfix.pem. Periksa kepemilikan, izin, dan konten /etc/ssl/certs/postfix.pemjuga.


Pesan kesalahan itu agak membingungkan. Dikatakan cannot get RSA private key from file /etc/ssl/certs/postfix.pemtetapi kunci pribadi harus dalam /etc/ssl/private/postfix.pem. Saya tidak memiliki pengalaman yang cukup dengan Postfix menggunakan TLS untuk mengetahui apakah ini adalah bug Postfix atau kesalahan dalam konfigurasi Anda.


Saya chown'ed kedua file ke postfix: postfix kemudian restart postfix, tetapi mencoba untuk mengirim email masih mereproduksi kesalahan di /var/log/mail.log
phew

root @ domain: / etc / ssl / certs # ls-l postfix.pem -rw-r - r-- 1 postfix postfix 1363 Sep 28 16:36 postfix.pem dan tampaknya berisi konten sertifikat, dimulai dengan - --- BEGIN CERTIFICATE ----- mengandung data hingga ----- END CERTIFICATE -----
phew

Saya juga bertanya-tanya tentang hal itu, jadi saya mencoba bertukar file. Tapi itu tidak masuk akal karena file di / certs / memang mengandung header sertifikat "---- BEGIN CERTIFICATE -----". Terima kasih atas bantuan Anda.
Fiuh


0

periksa apakah kunci tersebut tidak memiliki kata sandi di dalamnya. Anda dapat menghapusnya dengan

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

jika mereka digunakan bersama

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

Frasa sandi akan mengeluarkan peringatan pada log yang mengatakan bahwa itu tidak bisa mendapatkan kunci pribadi RSAA, yang pada gilirannya menonaktifkan dukungan TLS. Semoga ini bisa membantu seseorang!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.