Postfix "aviso: não é possível obter a chave privada RSA do arquivo"

14

Acabei de seguir este tutorial para configurar um servidor de correio postfix com dovecot e mysql como back-end para usuários virtuais.

Agora que tenho o maior número de peças funcionando, posso me conectar ao POP3 (S) e IMAP (S).

Usando

echo TEST-MAIL | mail [email protected]

funciona bem, quando eu faço login na minha conta do hotmail, ele mostra o email.

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

Pesquisando um pouco mais 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 sendo logado em [email protected] , descobri que meu servidor estava agindo como um "Open Mail Relay", o que - é claro - é uma coisa ruim.

Indo mais para as partes opcionais do tutorial, como este comentário e o outro histórico , decidi concluir essas etapas também para poder enviar e-mails por [email protected] pelo Mozilla Thunderbird, sem receber a mensagem de erro " 5.7.1 : Acesso de retransmissão negado "mais (como servidores de correio comuns rejeitam e-mails retransmitidos abertos).

Mas agora eu corri em um erro ao tentar obter postfix trabalhar com 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 email do meu servidor de email recém-instalado usando SMTP SSL / TLS pela porta 465 no Thunderbird. O Thunderbird então me diz que ocorreu um tempo limite.

O Google tem alguns resultados sobre esse problema, mas não consegui fazê-lo funcionar com nenhum deles. Gostaria de vincular alguns deles aqui, mas como novo usuário, tenho permissão para usar apenas 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 o nmap me diz

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

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

Qualquer ajuda apreciada!

Edição: Acabei de experimentar este tutorial diferente sobre como gerar um certificado autoassinado para o postfix, ainda recebendo o mesmo erro. Realmente não sei mais o que testar.

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 de Ansgar Wiechers, finalmente está funcionando.

postconf -ncontinha as linhas como deveria. A verificação de certificado / chave via openssl mostrou que os dois arquivos são válidos.

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

ufa
fonte

Respostas:

16

O conteúdo de main.cfnão representa necessariamente sua configuração ativa do Postfix. Verifique a saída de postconf -npara 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 $mynetworksfor restrito ao host local e $smtpd_recipient_restrictionsaparecer permit_mynetworks, permit_sasl_authenticated, reject_unauth_destinationcomo as três primeiras restrições, você não será um relé aberto.

Verifique se /etc/ssl/private/postfix.pemcontém uma chave válida e /etc/ssl/certs/postfix.pemconté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 /etc/ssl/privatesão

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

Assim, simplesmente chowninserir o arquivo de chave não é bom, porque as permissões de diretório impedem o Postfix de acessar qualquer arquivo nele.

Tente simplificar sua configuração. Coloque certificado e 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 mude main.cfassim:

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.

Ansgar Wiechers
fonte
Isso foi corrigido, muito obrigado a vocês, Ladadadada e Ansgar Wiechers .
phew 28/09
Obrigado pela postconf -nparte. Copie e cole resultou em um arquivo cert e uma chave não relacionado e incidindo sobre a saída do que me deixe ver o erro de digitação no arquivo de configuração que eu já tinha verificado, mas perdeu ...
Adam Kerz
2

Essas instruções não chmod o= /etc/ssl/private/postfix.pemdizem nada sobre o usuário que possui o arquivo.

Nas minhas caixas, o smtpdprocesso é executado como postfixusuário. Verifique se o postfixusuário 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 /etc/ssl/private/postfix.peme verifique se ele 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 também a propriedade, as permissões e o conteúdo /etc/ssl/certs/postfix.pem.


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 ser em /etc/ssl/private/postfix.pem. Não tenho experiência suficiente com o Postfix usando TLS para saber se este é um bug do Postfix ou um erro na sua configuração.

Ladadadada
fonte
Selecionei ambos os arquivos para postfix: o postfix reiniciou o postfix, mas a tentativa de enviar um email ainda está reproduzindo o erro em /var/log/mail.log
phew
root @ domain: / etc / ssl / certs # ls -l postfix.pem -rw-r - r-- 1 postfix postfix 1363 28 de setembro 16:36 postfix.pem e parece conter conteúdo de certificado, começando com - --- BEGIN CERTIFICATE ----- contendo dados até ----- END CERTIFICATE -----
ufa
Eu estava pensando sobre isso também, então tentei trocar os arquivos. Mas isso não faz sentido, pois o arquivo em / certs / contém o cabeçalho do certificado "---- BEGIN CERTIFICATE -----". Obrigado pela sua ajuda de qualquer maneira.
28412 phew
1

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

crie um certificado e uma chave autoassinados https://msol.io/blog/tech/create-a-self-signed-ssl-certificate-with-openssl/

Espero que isto ajude

user397245
fonte
Não seria melhor usar um certificado vamos criptografar gratuitamente?
pintainhos
Doh, obrigado! Copiar e colar resultou em um arquivo cert e em uma chave não relacionada.
26617 Adam Kerz
0

verifique se a chave não possui uma senha. 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 logs dizendo que não foi possível obter a chave privada RSAA, que, por sua vez, desativa o suporte ao TLS. Espero que isso ajude alguém!

user419756
fonte