Cảnh báo Postfix: không thể lấy khóa riêng RSA từ tập tin


14

Tôi chỉ làm theo hướng dẫn này để thiết lập một mailserver postfix với dovecot và mysql làm phụ trợ cho người dùng ảo.

Bây giờ tôi đã có hầu hết các phần hoạt động, tôi có thể kết nối với POP3 (S) và IMAP (S).

Sử dụng

echo TEST-MAIL | mail myaccount@hotmail.com

hoạt động tốt, khi tôi đăng nhập vào tài khoản hotmail của mình, nó sẽ hiển thị email.

Nó cũng hoạt động ngược lại do đó mục nhập MX của tôi cho example.com cuối cùng đã được truyền bá, vì vậy tôi có thể nhận email được gửi từ myaccount@hotmail.com đến myvirtualuser@example.com và xem chúng trong Thunderbird bằng STARTTLS qua IMAP.

Nghiên cứu thêm một chút sau khi tôi nhận được thông báo lỗi " 5.7.1: Truy cập chuyển tiếp bị từ chối " khi cố gắng gửi thư đến myaccount@hotmail.com bằng Thunderbird được đăng nhập vào myvirtualuser@example.com , tôi nhận ra rằng máy chủ của mình đang hoạt động như một "Chuyển tiếp thư mở", mà - dĩ nhiên - là một điều xấu.

Đi sâu hơn vào các phần tùy chọn của hướng dẫn như nhận xét nàyphần khác , tôi quyết định hoàn thành các bước này để có thể gửi thư qua myvirtualuser@example.com qua Mozilla Thunderbird, không nhận được thông báo lỗi " 5.7.1 : Truy cập chuyển tiếp bị từ chối "nữa (vì các máy chủ thư thông thường từ chối các email chuyển tiếp mở).

Nhưng bây giờ tôi gặp phải một lỗi khi cố gắng để postfix hoạt động với SMTPS, trong /var/log/mail.log nó đọc

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:

Lỗi đó được ghi lại ngay sau khi tôi cố gắng gửi thư từ máy chủ mới được cài đặt của mình bằng cách sử dụng SMTP SSL / TLS qua cổng 465 trong Thunderbird. Thunderbird sau đó nói với tôi một khoảng thời gian chờ xảy ra.

Google có một vài kết quả liên quan đến vấn đề đó, nhưng tôi không thể làm cho nó hoạt động với bất kỳ vấn đề nào. Tôi sẽ liên kết một số trong số họ ở đây nhưng là một người dùng mới, tôi chỉ được phép sử dụng hai siêu liên kết.

/Etc/postfix/master.cf của tôi trông giống như

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

nmap cho tôi biết

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

/etc/postfix/main.cf của tôi trông giống như

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

Các tệp * .pem đã được tạo như mô tả trong hướng dẫn ở trên, sử dụng

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

Tôi nghĩ rằng tôi không phải bao gồm /etc/dovecot/dovecot.conf ở đây, vì đăng nhập qua imaps và pop3s hoạt động tốt theo nhật ký. Chỉ có vấn đề là làm cho postfix sử dụng đúng các chứng chỉ tự tạo, tự ký.

Bất kỳ trợ giúp đánh giá cao!

EDIT: Tôi vừa thử hướng dẫn khác nhau này về việc tạo chứng chỉ tự ký cho postfix, vẫn nhận được cùng một lỗi. Tôi thực sự không biết những gì khác để kiểm tra.

Tôi cũng đã kiểm tra các thư viện SSL, nhưng tất cả dường như đều ổn:

  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)

Sau khi làm theo Ansgar Wiechers, cuối cùng nó cũng hoạt động.

postconf -nchứa các dòng như nó cần. Việc kiểm tra chứng chỉ / khóa thông qua openssl đã cho thấy rằng cả hai tệp đều hợp lệ.

Vì vậy, nó thực sự đã là một vấn đề quyền! Không biết rằng việc cài đặt các tập tin /etc/ssl/*/postfix.pem thành postfix: postfix là không đủ để postfix đọc các tập tin.

Câu trả lời:


16

Nội dung main.cfkhông nhất thiết phải đại diện cho cấu hình Postfix hoạt động của bạn. Kiểm tra đầu ra của postconf -nhai tham số sau:

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

Nếu $mynetworksđược giới hạn trong localhost và $smtpd_recipient_restrictionshiển thị permit_mynetworks, permit_sasl_authenticated, reject_unauth_destinationnhư ba hạn chế đầu tiên, thì bạn không phải là một rơle mở.

Xác minh rằng /etc/ssl/private/postfix.pemcó chứa khóa hợp lệ và /etc/ssl/certs/postfix.pemchứa chứng chỉ hợp lệ:

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

Bạn cũng cần kiểm tra xem Postfix có thể truy cập tệp không. Trên máy chủ của tôi, các quyền trên /etc/ssl/private

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

Do đó, chỉ cần chownlấy tệp khóa sẽ không giúp ích gì cho bạn, vì các quyền của thư mục ngăn Postfix truy cập bất kỳ tệp nào trong đó.

Hãy thử đơn giản hóa thiết lập của bạn. Đặt chứng chỉ và khóa vào một tệp duy nhất:

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

và thay đổi main.cfnhư thế này:

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

Khởi động lại Postfix và xem liệu máy chủ có thể truy cập khóa không.


Điều đó đã sửa nó, cảm ơn bạn rất nhiều, cả hai bạn LadadadadaAnsgar Wiechers .
phew

Cảm ơn về postconf -nphần này. Sao chép và dán dẫn đến một tệp chứng chỉ và một khóa không liên quan và tập trung vào đầu ra của nó cho tôi xem lỗi đánh máy trong tệp cấu hình mà tôi đã kiểm tra nhưng đã bỏ lỡ ...
Adam Kerz

2

Những hướng dẫn đó có chmod o= /etc/ssl/private/postfix.pemnhưng không nói gì về việc người dùng nào sở hữu tệp.

Trên hộp của tôi, smtpdquá trình chạy như postfixngười dùng. Kiểm tra xem postfixngười dùng có thể truy cập /etc/ssl/private/postfix.pem. Hoặc có thể chỉ là chown postfix:postfix /etc/ssl/private/postfix.pem.

Vấn đề rõ ràng khác là chính xác thông báo lỗi nói gì: Không có khóa RSA hợp lệ trong tệp đó. Hãy nhìn vào /etc/ssl/private/postfix.pemvà chắc chắn rằng nó chứa ít nhất một cái gì đó trông giống như khóa RSA. Đừng dán nó vào câu hỏi của bạn.

Trên thực tế, tôi chỉ nhận thấy rằng thông báo lỗi là cho /etc/ssl/certs/postfix.pem, không phải /etc/ssl/private/postfix.pem. Kiểm tra quyền sở hữu, quyền và nội dung /etc/ssl/certs/postfix.pemlà tốt.


Thông báo lỗi đó hơi khó hiểu. Nó nói cannot get RSA private key from file /etc/ssl/certs/postfix.pemnhưng khóa riêng nên ở trong /etc/ssl/private/postfix.pem. Tôi không có đủ kinh nghiệm với Postfix bằng TLS để biết liệu đây là lỗi Postfix hay lỗi trong cấu hình của bạn.


Tôi đã chọn cả hai tệp thành postfix: postfix sau đó khởi động lại postfix, nhưng cố gắng gửi email vẫn đang tái tạo lỗi trong /var/log/mail.log
phew

root @ domain: / etc / ssl / certs # ls -l postfix.pem -rw-r - r-- 1 postfix postfix 1363 28 tháng 9 16:36 postfix.pem và nó dường như chứa nội dung chứng chỉ, bắt đầu bằng - --- BEGIN CHỨNG NHẬN ----- chứa dữ liệu cho đến khi ----- CHỨNG NHẬN -----
phew

Tôi đã tự hỏi về điều đó, vì vậy tôi đã thử trao đổi các tập tin. Nhưng điều đó không có nghĩa gì khi tệp trong / certs / không chứa tiêu đề chứng chỉ "---- BEGIN CHỨNG NHẬN -----". Cảm ơn sự giúp đỡ của bạn dù sao đi nữa.
phew


0

kiểm tra xem khóa không có cụm mật khẩu trên đó. Bạn có thể loại bỏ nó với

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

nếu họ cùng sử dụng

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

Cụm mật khẩu sẽ đưa ra cảnh báo trên nhật ký nói rằng nó không thể lấy khóa riêng RSAA, do đó sẽ vô hiệu hóa hỗ trợ TLS. Hy vọng điều này sẽ giúp được ai đó!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.