smtp.gmail.com from bash fornece “Erro no certificado: o emissor do certificado do par não é reconhecido.”

8

Eu precisava do meu script para enviar um e-mail ao administrador, se houver um problema, e a empresa usa apenas o Gmail. Seguindo algumas instruções, pude configurar o mailx usando um arquivo .mailrc. houve primeiro o erro do nss-config-dir eu resolvi isso copiando alguns arquivos .db de um diretório do firefox. para ./certs e apontando para ele no mailrc. Um email foi enviado.

No entanto, o erro acima surgiu. Por algum milagre, havia um certificado do Google no .db. Ele apareceu com este comando:

~]$ certutil -L -d certs

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

GeoTrust SSL CA                                              ,,
VeriSign Class 3 Secure Server CA - G3                       ,,
Microsoft Internet Authority                                 ,,
VeriSign Class 3 Extended Validation SSL CA                  ,,
Akamai Subordinate CA 3                                      ,,
MSIT Machine Auth CA 2                                       ,,
Google Internet Authority                                    ,,

Provavelmente, isso pode ser ignorado, porque o email funcionou de qualquer maneira. Finalmente, depois de puxar alguns cabelos e muitos googles, descobri como me livrar do aborrecimento.

Primeiro, exporte o certificado existente para um arquivo ASSCII:

~]$ certutil -L -n 'Google Internet Authority'  -d certs -a > google.cert.asc

Agora reimporte esse arquivo e marque-o como confiável para certificados SSL, ala:

~]$ certutil -A -t "C,," -n 'Google Internet Authority'  -d certs -i google.cert.asc

Depois disso, a listagem mostra a confiança:

~]$ certutil -L -d certs

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI
...
Google Internet Authority                                    C,,

E o mailx é enviado sem problemas.

~]$ /bin/mailx -A gmail -s "Whadda ya no" [email protected]
ho ho ho
EOT
~]$

Espero que seja útil para alguém que esteja com problemas com o erro.

Além disso, estou curioso sobre algumas coisas.

Como eu poderia obter este certificado, se ele não estivesse no banco de dados do mozilla por acaso? Existe, por exemplo, algo assim?

    ~]$ certutil -A -t "C,," \
                 -n 'gmail.com'  \
                 -d certs \
                 -i 'http://google.com/cert/this...'
    
por ndasusers 12.04.2013 / 01:14

2 respostas

11

Bem, esse não é o folheto que eu queria, mas é como buscar e importar um certificado do zero:

# Create a certificate directory
~]$ mkdir certs

# Create a new database in the certs dir
~]$ certutil -N -d certs 

# Need now a chain certificate - May 18, 2015
~]$ wget https://www.geotrust.com/resources/root_certificates/certificates/GeoTrust_Global_CA.cer

# Need now a chain certificate part 2 - May 18, 2015
~]$ mv GeoTrust_Global_CA.cer certs/

# Fetch the certificate from Gmail, saving in the text file GMAILCERT
# Added the CA opion - May 18, 2015
~]$ echo -n | openssl s_client -connect smtp.gmail.com:465 -CAfile certs/GeoTrust_Global_CA.cer | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > GMAILCERT

# Import the new cert file into the new database in the new dir
~]$ certutil -A -n "Google Internet Authority" -t "C,," -d certs -i GMAILCERT 

# Double Check
~]$ certutil -L -d certs

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

Google Internet Authority                                    C,,  

Yaa! e graças a a resposta neste ticket

    
por 17.04.2013 / 06:31
5

Esta postagem precisa ser atualizada novamente. Eu estava tendo problemas com a instalação do meu mailx na minha caixa do CentOS 7. O email seria enviado, mas eu ainda estava recebendo o "Erro na certificação: o emissor do certificado do mesmo não é reconhecido". erro.

Eu encontrei a solução aqui , mas tive que traduzi-la.

Aqui está uma maneira rápida de fazer isso:

# Create a certificate directory
mkdir ~/.certs

# Create a new database in the certs dir (dont forget to enter your pass phrase!)
certutil -N -d ~/.certs 

# Create three files for the cert chain
touch ~/.certs/google ~/.certs/geotrust ~/.certs/equifax

# Copy the cert chain for smtp.google.com:465 over to my_certs file (don't forget the -showcerts option, CTRL + C to end this command)
openssl s_client -showcerts -connect smtp.gmail.com:465 > ~/.certs/my_certs

Agora copie cada certificado incluindo o --BEGIN CERTIFICATE-- e --END CERTIFICATE-- e cole-os em seus respectivos arquivos que você criou anteriormente (google, geotrust, equifax) e salve esses arquivos agora.

# Open your my_certs file you made earlier and copy the google cert (usually the first one)
nano ~/.certs/my_certs

# Open your google file, paste the google cert that you just copied, and save and close
nano ~/.certs/google

# Open your my_certs file you made earlier and copy the geotrust cert (usually the second one)
nano ~/.certs/my_certs

# Open your geotrust file, paste the geotrust cert that you just copied, and save and close
nano ~/.certs/geotrust

# Open your my_certs file you made earlier and copy the equifax cert (usually the third one)
nano ~/.certs/my_certs

# Open your equifax file, paste the equifax cert that you just copied, and save and close
nano ~/.certs/equifax

Agora temos que importar cada um desses certs para o banco de dados.

# Import the google cert into the db
certutil -A -n "Google Internet Authority" -t "TC,," -d ~/.certs -i ~/.certs/google

# Import the geotrust cert into the db
certutil -A -n "GeoTrust Global CA" -t "TC,," -d ~/.certs -i ~/.certs/geotrust

# Import the equifax cert into the db
certutil -A -n "Equifax Secure Certificate Authority" -t "TCP,," -d ~/.certs -i ~/.certs/equifax

# Double check to make sure everything imported correctly into the db
certutil -L -d ~/.certs

Exemplo de saída:

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

Google Internet Authority                                    CT,,
GeoTrust Global CA                                           CT,,
Equifax Secure Certificate Authority                         CT,,

Tempo de limpeza (opcional)

# Remove all unnecessary files since the db has the certs :)
rm -rf ~/.certs/google ~/.certs/geotrust ~/.certs/equifax ~/.certs/my_certs

# Now run a test to make sure mailx is sending correctly now (don't forget to change [email protected] to the email address you'd like to send to)
echo "Your message" | mail -s "Message Subject" [email protected]

Deve ser isso, você não deve receber o "Erro na certificação: o emissor do certificado do par não é reconhecido." erro mais!

Notas:

Você deve ter notado que mudei o diretório de /certs para ~/.certs . mailx é executado como root, então eu fiz essas alterações como root /. "~ /" significa o diretório HOME colocando tudo junto ~/.certs significa /root/.certs/ . Tenho certeza que você sabia disso, mas hey apenas no caso de você nunca saber quem pode estar lendo isso!

Caso você precise disso, aqui estão as opções de configuração que adicionei ao final de /etc/mail.rc

# /etc/mail.rc options added to the bottom
set smtp-use-starttls
set smtp-auth=login
set smtp=smtp://smtp.gmail.com:587
set from="[email protected](Web01 Server)"
set [email protected]
set smtp-auth-password=your.pass
set ssl-verify=ignore
set nss-config-dir=/root/.certs

Certifique-se de alterar your.from.user, your.smtp.user e your.pass para suas respectivas variáveis.

    
por 09.08.2015 / 06:41

Tags