web-dev-qa-db-fra.com

Rails 3: OpenSSL :: SSL :: SSLError: le nom d'hôte ne correspond pas au certificat du serveur

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
55
JP Silvashy

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).

134
Bozhidar Batsov

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.

25
user208769

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) 
1
CharlesC

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
}

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

0
user208769