Lorsque j'essaie de livrer un e-mail via la console, je reçois cette erreur:
OpenSSL::SSL::SSLError: hostname was not match with the server certificate
Le fait est que je ne connais vraiment pas grand-chose aux certificats et autres, ou vraiment comment commencer à résoudre ce problème, j'ai essayé de faire une enquête avec openssl
et voici le certificat qui est retourné.
Je ne sais pas si c'est un problème avec Postfix qui fonctionne sur le serveur, ou mon application Rails, toute aide ou indice est vraiment apprécié.
~% openssl s_client -connect mail.myhostname.com:25 -starttls smtp
CONNECTED(00000003)
depth=0 /CN=myhostname
verify error:num=18:self signed certificate
verify return:1
depth=0 /CN=myhostname
verify return:1
---
Certificate chain
0 s:/CN=myhostname
i:/CN=myhostname
---
Server certificate
-----BEGIN CERTIFICATE-----
[...redacted...]
-----END CERTIFICATE-----
subject=/CN=myhostname
issuer=/CN=myhostname
---
No client certificate CA names sent
---
SSL handshake has read 1203 bytes and written 360 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 1AA4B8BFAAA85DA9ED4755194C50311670E57C35B8C51F9C2749936DA11918E4
Session-ID-ctx:
Master-Key: 9B432F1DE9F3580DCC6208C76F96631DC5A4BC517BDBADD5F514414DCF34AC526C30687B96C5C4742E9583555A118232
Key-Arg : None
Start Time: 1292985376
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
250 DSN
Une solution infiniment meilleure (en termes de sécurité) que la réponse acceptée serait:
ActionMailer::Base.smtp_settings = {
:address => "mail.foo.com",
:port => 587,
:domain => "foo.com",
:user_name => "[email protected]",
:password => "foofoo",
:authentication => "plain",
:enable_starttls_auto => true,
:openssl_verify_mode => 'none'
}
De cette façon, vous utiliserez toujours le cryptage, mais la validation du certificat sera désactivée (et vous n'obtiendrez aucune erreur).
EDIT: Cette réponse n'est plus la meilleure solution et peut ne plus fonctionner . Voir cette réponse qui est plus sûr.
Le nom sur le certificat doit correspondre à l'URL sur laquelle vous exécutez votre application
Pas utile ... Je reçois cette erreur avec dreamhost, où je n'ai pas la possibilité de changer le certificat ssl. (eh bien, je le fais, mais ça coûte.)
Une option consiste à désactiver tls. J'espère que vous avez quelque chose comme ça dans vos initialiseurs:
ActionMailer::Base.smtp_settings = {
:address => "mail.foo.com",
:port => 587,
:domain => "foo.com",
:user_name => "[email protected]",
:password => "foofoo",
:authentication => "plain",
:enable_starttls_auto => true
}
Modifiez l'option enable starttls auto sur false (ou ajoutez-la si elle n'est pas présente).
Avertissement: cela désactivera le cryptage, ce qui signifie que votre nom d'utilisateur et un mot de passe traverseront Internet en texte brut
Je ne vois pas de meilleure façon de procéder, donc je serais intéressé par toutes les réponses.
Si vous utilisez la bibliothèque de messagerie Ruby comme je le fais, voici le paramètre pour pop
pop = Net::POP3.new(mail_server, mail_port)
pop.enable_ssl(0) #(default is on, if you want turn it off set it to 0 )
pop.start(mail_username, mail_pwd)
Comme de nombreuses personnes discutant de cette question ont mentionné dreamhost, il existe une meilleure réponse spécifique à dreamhost à cette question.
Au cours des dernières années, votre logiciel de messagerie a probablement commencé à devenir plus agressif envers vous pour l'utilisation de noms de serveurs incorrects sur vos certificats. En réponse, Dreamhost recommande désormais d'utiliser leur nom de domaine plutôt que le vôtre lors de la configuration de votre compte de messagerie.
Vous devez savoir à quel cluster de messagerie votre compte est affecté, votre configuration sera la suivante:
ActionMailer::Base.smtp_settings = {
:address => "mail.foo.com",
:port => 587,
:domain => "subX.mail.dreamhost.com" # instead of "foo.com",
:user_name => "[email protected]",
:password => "foofoo",
:authentication => "plain",
:enable_starttls_auto => true,
# :openssl_verify_mode => 'none' # hopefully, no longer needed
}
où subX
est le sous-domaine de votre cluster de messagerie. Actuellement, cela peut être trouvé sur votre panneau Dreamhost à Panel > Support > Data Centers
Plus de détails peuvent être trouvés sur leur page de configuration du client de messagerie: https://help.dreamhost.com/hc/en-us/articles/214918038-Email-client-configuration-overview