Постфікс "попередження: не вдається отримати приватний ключ RSA з файлу"


14

Я просто дотримувався цього підручника, щоб налаштувати сервер поштових поштових серверів з dovecot та mysql як бекенд для віртуальних користувачів.

Тепер я працюю з більшою частиною, я можу підключитися до POP3 (S) та IMAP (S).

Використання

echo TEST-MAIL | mail myaccount@hotmail.com

працює чудово, коли я входжу в обліковий запис Hotmail, він показує електронну пошту.

Він також працює в зворотному порядку, отже мій запис MX для example.com нарешті був розповсюджений, тому я можу отримувати електронні листи, надіслані з myaccount@hotmail.com на myvirtualuser@example.com, і переглядати їх у Thunderbird, використовуючи STARTTLS через IMAP.

Зробивши трохи більше досліджень після того, як я отримав повідомлення про помилку " 5.7.1: Релейний доступ заборонено ", коли намагався надсилати листи на myaccount@hotmail.com, використовуючи Thunderbird, що входив до myvirtualuser@example.com , я зрозумів, що мій сервер діє як "Відкрита поштова естафета", що, звичайно, - погана річ.

Поглибившись у необов'язкові частини підручника, як цей коментар та інший навчальний посібник , я вирішив виконати ці кроки також, щоб мати змогу надсилати електронні листи через myvirtualuser@example.com через Mozilla Thunderbird, не отримуючи повідомлення про помилку " 5.7.1 : Доступ до ретрансляції заборонено "(як звичайні сервери пошти відхиляють відкриті ретрансляційні електронні листи).

Але тепер я зіткнувся з помилкою, намагаючись отримати постфікс, що працює з SMTPS, в /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:

Ця помилка реєструється одразу після того, як я намагаюся надіслати пошту зі свого недавно встановленого поштового сервера за допомогою SMTP SSL / TLS через порт 465 в Thunderbird. Тоді Thunderbird повідомляє мені, що настав час очікування.

У Google є кілька результатів щодо цієї проблеми, але я не зміг її працювати з жодною з них. Я б пов'язував деякі з них тут, але як новий користувач мені дозволяється використовувати лише дві гіперпосилання.

Моє /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

Я думаю, що мені не потрібно включати /etc/dovecot/dovecot.conf сюди, оскільки вхід через зображення та pop3s добре працює відповідно до журналів. Єдина проблема полягає в тому, щоб постфікс правильно використовував самостійно створені, самопідписані сертифікати.

Будь-яка допомога вдячна!

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 для читання файлів.

Відповіді:


16

Вміст main.cfне обов'язково представляє вашу активну конфігурацію Postfix. Перевірте вихід postconf -nдвох наступних параметрів:

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показуєте 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 не дозволяють 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 і подивіться, чи може сервер отримати доступ до ключа.


Це було виправлено, велике спасибі вам обом Лададададі та Ансґеру Чарівникам .
феу

Дякую за postconf -nчастину. Копіювання та вставка призвели до отримання одного файлу cert і неспорідненого ключа, зосередившись на виході цього, дозволить мені побачити помилку друку у конфігураційному файлі, який я вже перевіряв, але пропустив ...
Адам Керз,

2

Ці інструкції містять, chmod o= /etc/ssl/private/postfix.pemале нічого не говорять про те, якому користувачеві належить файл.

У моїх скриньках smtpdпроцес працює як postfixкористувач. Перевірте, чи postfixможе користувач отримати доступ /etc/ssl/private/postfix.pem. Або, можливо, просто chown postfix:postfix /etc/ssl/private/postfix.pem.

Інша очевидна проблема полягає саме в тому, що йдеться у повідомленні про помилку: у цьому файлі немає дійсного ключа 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. У мене недостатньо досвіду роботи з Postfix за допомогою TLS, щоб знати, чи це помилка Postfix або помилка у вашій конфігурації.


Я замовив обидва файли на постфікс: після цього поштовий рефікс перезапустив постфікс, але намагаючись надіслати електронний лист, все ще відтворюється помилка в /var/log/mail.log
фех

root @ domain: / etc / ssl / certs # ls -l postfix.pem -rw-r - r-- 1 postfix postfix 1363, 28 вересня 16:36 postfix.pem, і, здається, містить вміст сертифікатів, починаючи з - --- ПОЧАТИТИ СЕРТИФІКАТ ----- містять дані до ----- КІНЦЕ СЕРТИФІКАТ -----
Пт

Мені теж було цікаво про це, тому я спробував поміняти файли. Але це не має сенсу, оскільки файл в / certs / містить заголовок сертифіката "---- BEGIN CERTIFICATE -----". Дякуємо за вашу допомогу.
феу

1

Серт повинен відповідати ключу, в моєму випадку не має нічого спільного з дозволами

створити сертифікат, який підписався самостійно, і ключ https://msol.io/blog/tech/create-a-self-signed-ssl-certificate-with-openssl/

Сподіваюсь, це допомагає


Чи не було б краще використовувати безкоштовний сертифікат для шифрування?
пташенята

До, дякую! Копіювання та вставка призвели до отримання одного файлу cert та непов'язаного ключа.
Адам Керз

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. Сподіваюся, це допоможе комусь!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.