Postfix “warning: não é possível obter chave privada RSA do arquivo”

14

Eu apenas segui este tutorial para configurar um servidor de e-mail postfix com dovecot e mysql como backend para usuários virtuais.

Agora tenho mais partes trabalhando, posso conectar-me ao POP3 (S) e ao IMAP (S).

Usando

echo TEST-MAIL | mail [email protected]

funciona bem, quando eu entro na minha conta do hotmail ele mostra o email.

Ele também funciona em sentido inverso, portanto, minha entrada MX para example.com finalmente foi propagada, por isso estou recebendo e-mails enviados de [email protected] para [email protected] e visualizá-los no Thunderbird usando STARTTLS via IMAP.

Fazendo um pouco mais de pesquisa depois que recebi a mensagem de erro " 5.7.1: acesso de retransmissão negado " ao tentar enviar e-mails para [email protected] usando o Thunderbird estando logado em [email protected] , descobri que meu servidor estava agindo como um "Open Mail Relay", que - claro - é uma coisa ruim.

Pesquisando mais nas partes opcionais do tutorial, como este comentário e o outro turorial , eu decidi completar estes passos também para poder enviar e-mails via [email protected] através do Mozilla Thunderbird , não recebendo mais a mensagem de erro " 5.7.1: Acesso de retransmissão negado " (como e-mails comuns rejeitam e-mails abertos retransmitidos).

Mas agora me deparei com um erro ao tentar fazer o postfix funcionar com o SMTPS, em /var/log/mail.log , ele lê

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:

Esse erro é registrado logo após eu tentar enviar um e-mail do meu servidor de e-mail recém-instalado usando SSL SSL / TLS via porta 465 no Thunderbird. Thunderbird então me diz que um tempo limite ocorreu.

O Google tem alguns resultados com relação a esse problema, mas não consegui fazê-lo funcionar com nenhum deles. Eu ligaria alguns deles aqui, mas como um novo usuário, só posso usar dois hiperlinks.

Meu /etc/postfix/master.cf parece

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

e nmap me dizem

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

meu /etc/postfix/main.cf parece

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

Os arquivos * .pem foram criados como descrito no tutorial acima, usando

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

Eu acho que não tenho que incluir /etc/dovecot/dovecot.conf aqui, pois o login via imaps e pop3s funciona bem de acordo com os logs. O único problema é fazer com que o postfix use corretamente os certificados auto-gerados e autoassinados.

Qualquer ajuda apreciada!

EDITAR: Eu apenas tentei este tutorial diferente ao gerar uma auto-assinatura certificado para postfix, ainda recebendo o mesmo erro. Eu realmente não sei mais o que testar.

Eu também verifiquei as bibliotecas SSL, mas tudo parece estar bem:

  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)

Depois de seguir as instruções Ansgar Wiechers , ele finalmente está funcionando.

postconf -n continha as linhas como deveria. A verificação do certificado / chave via openssl mostrou que ambos os arquivos são válidos.

Então, de fato, tem sido um problema de permissões! Não sabia que colocar os arquivos /etc/ssl/*/postfix.pem no postfix: o postfix não é suficiente para o postfix ler os arquivos.

    
por phew 28.09.2012 / 18:07

4 respostas

16

O conteúdo de main.cf não representa necessariamente sua configuração ativa do Postfix. Verifique a saída de postconf -n para os dois parâmetros a seguir:

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

Se $mynetworks estiver restrito a localhost e $smtpd_recipient_restrictions mostrar permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination como as três primeiras restrições, você não será um retransmissor aberto.

Verifique se /etc/ssl/private/postfix.pem contém uma chave válida e /etc/ssl/certs/postfix.pem contém um certificado válido:

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

Você também precisa verificar se o Postfix pode acessar o arquivo. No meu servidor, as permissões em /etc/ssl/private são

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

Assim, simplesmente chown ing o arquivo-chave não fará bem a você, porque as permissões do diretório impedem que o Postfix acesse qualquer arquivo nele.

Tente simplificar sua configuração. Coloque o certificado e a chave em um único arquivo:

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

e altere seu main.cf assim:

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

Reinicie o Postfix e veja se o servidor pode acessar a chave.

    
por 28.09.2012 / 21:04
2

Essas instruções têm chmod o= /etc/ssl/private/postfix.pem , mas não dizem nada sobre qual usuário é o proprietário do arquivo.

Nas minhas caixas, o processo smtpd é executado como o usuário postfix . Verifique se o usuário postfix pode acessar /etc/ssl/private/postfix.pem . Ou possivelmente apenas chown postfix:postfix /etc/ssl/private/postfix.pem .

O outro problema óbvio é exatamente o que a mensagem de erro diz: Não há uma chave RSA válida nesse arquivo. Dê uma olhada em /etc/ssl/private/postfix.pem e verifique se ela contém pelo menos algo que se parece com uma chave RSA. Não cole na sua pergunta.

Na verdade, acabei de perceber que a mensagem de erro é para /etc/ssl/certs/postfix.pem , não /etc/ssl/private/postfix.pem . Verifique a propriedade, as permissões e o conteúdo de /etc/ssl/certs/postfix.pem também.

Essa mensagem de erro é um pouco confusa. Ele diz cannot get RSA private key from file /etc/ssl/certs/postfix.pem , mas a chave privada deve estar em /etc/ssl/private/postfix.pem . Eu não tenho experiência suficiente com o Postfix usando o TLS para saber se isso é um erro no Postfix ou um erro na sua configuração.

    
por 28.09.2012 / 18:18
1

Cert tem que combinar chave, no meu caso não tinha nada a ver com permissões

crie um certificado autoassinado e link auto-assinado

Espero que isso ajude

    
por 26.01.2017 / 16:55
0

verifique se a chave não tem uma frase secreta. Você pode removê-lo com

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

se eles estiverem juntos, use

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

A frase secreta emitirá um aviso nos registros informando que não foi possível obter a chave privada RSAA, o que, por sua vez, desativa o suporte a TLS. Espero que isso ajude alguém!

    
por 11.06.2017 / 15:09