접미사“경고 : 파일에서 RSA 개인 키를 가져올 수 없음”


14

방금 이 튜토리얼 을 따라 가상 사용자를위한 백엔드로 dovecot 및 mysql을 사용하는 postfix 메일 서버를 설정했습니다.

이제 대부분의 부분이 작동하고 POP3 (S) 및 IMAP (S)에 연결할 수 있습니다.

사용

echo TEST-MAIL | mail myaccount@hotmail.com

핫메일 계정에 로그인하면 이메일이 표시됩니다.

또한 반대로 작동합니다. example.com에 대한 MX 항목이 최종적으로 전파되었으므로 myaccount@hotmail.com 에서 myvirtualuser@example.com으로 전송 된 전자 메일을 수신 하고 IMAP을 통해 STARTTLS를 사용하여 Thunderbird에서 볼 수 있습니다.

Thunderbird가 myvirtualuser@example.com 에 로그인되어있는 상태 에서 myaccount@hotmail.com으로 메일을 보내려고 할 때 " 5.7.1 : 릴레이 액세스가 거부되었습니다 " 라는 오류 메시지가 나타난 후 조금 더 조사한 결과 서버가 작동하는 것으로 나타났습니다. "오픈 메일 릴레이"로서, 물론 이것은 나쁜 것입니다.

이 의견다른 turorial 과 같이 튜토리얼의 선택적 부분을 더 파고 들어 , 나는이 단계를 완료 하고 Mozilla Thunderbird 를 통해 myvirtualuser@example.com을 통해 메일을 보낼 수 있고 " 5.7.1 오류 메시지가 표시되지 않습니다. : 릴레이 액세스가 거부되었습니다 ( "일반 메일 서버는 열려있는 릴레이 된 전자 메일을 거부하므로).

하지만 이제는 /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는 시간 초과가 발생했음을 알려줍니다.

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

로그에 따라 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을 통한 인증서 / 키 검사에서 두 파일이 모두 유효한 것으로 나타났습니다.

따라서 실제로 권한 문제였습니다! postfix : postfix에 /etc/ssl/*/postfix.pem 파일을 chown하는 것이 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로컬 호스트 및 제한됩니다 $smtpd_recipient_restrictionspermit_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를 다시 시작하고 서버가 키에 액세스 할 수 있는지 확인하십시오.


LadadadadaAnsgar Wiechers 모두 고맙습니다 .
phew

postconf -n부품 주셔서 감사합니다 . 복사하여 붙여 넣기하면 하나의 인증서 파일과 관련이없는 키가 생성되고 그 결과에 중점을 두어 이미 확인했지만 놓친 구성 파일의 오타를 볼 수 있습니다 ...
Adam 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.

또 다른 명백한 문제는 오류 메시지의 내용입니다. 해당 파일에 유효한 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인지 또는 구성의 실수인지 알 수 없습니다.


후위 다음 다시 시작 접미사하지만 이메일은 여전히 /var/log/mail.log에서 오류를 재생할 보내려고 : 나는 후위에 두 파일 chown'ed

루트 @ 도메인 : / 등 / SSL / 인증서 표시 # LS -l postfix.pem -rw-R - r--로 1 후위 후위 1363 9월 28일 16시 36분 postfix.pem 및을 시작으로 인증서의 콘텐츠를 포함 할 것 - --- BEGIN CERTIFICATE ----- ------ END CERTIFICATE -----
Phew

나도 그것에 대해 궁금해서 파일 교환을 시도했습니다. 그러나 / certs /의 파일에 인증서 헤더 "---- BEGIN CERTIFICATE -----"가 포함되어 있으므로 의미가 없습니다. 어쨌든 도움을 주셔서 감사합니다.
phew


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.