Rails 3: OpenSSL:: SSL:: SSLError: имя хоста не совпадало с сертификатом сервера


при попытке доставить письмо через консоль я получаю эту ошибку:

OpenSSL::SSL::SSLError: hostname was not match with the server certificate

дело в том, что я действительно не знаю много о сертификатах и таких, или действительно, как начать устранение неполадок, я попытался провести некоторое расследование с openssl а вот сертификат, который возвращается.

Я не знаю, если его проблема с Postfix, который работает на сервере, или мое приложение rails, любая помощь или подсказки действительно ценится.

~% 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
4 54

4 ответа:

бесконечно лучшее решение (с точки зрения безопасности), чем принятый ответ:

ActionMailer::Base.smtp_settings = {
  :address              => "mail.foo.com",
  :port                 => 587,
  :domain               => "foo.com",
  :user_name            => "addy@foo.com",
  :password             => "foofoo",
  :authentication       => "plain",
  :enable_starttls_auto => true,
  :openssl_verify_mode  => 'none'
}

таким образом, вы все равно будете использовать шифрование, но проверка сертификата будет отключена (и вы не получите никаких ошибок).

EDIT: этот ответ больше не является лучшим решением и может больше не работать. Смотрите ответ что более безопасно.

имя на сертификате должно совпадать с url-адресом, на котором вы запускаете свое приложение

Не полезно... Я получаю эту ошибку с dreamhost, где у меня нет возможности изменить сертификат ssl. (ну, я знаю, но это стоит.)

один из вариантов-отключить TLS. Надеюсь, у вас есть что-то вроде этого в ваших инициализаторах:

ActionMailer::Base.smtp_settings = {
  :address              => "mail.foo.com",
  :port                 => 587,
  :domain               => "foo.com",
  :user_name            => "addy@foo.com",
  :password             => "foofoo",
  :authentication       => "plain",
  :enable_starttls_auto => true
}

измените параметр включить starttls auto на false (или добавьте его, если он отсутствует).

предупреждение: это отключит шифрование, то есть ваше имя пользователя пароль будет проходить через интернет в виде обычного текста

Я не вижу лучшего способа сделать это, поэтому был бы заинтересован в любых ответах.

Если вы используете библиотеку ruby mail, как и я,вот настройка для 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) 

как многие люди, обсуждающие этот вопрос, упомянули dreamhost, есть лучший dreamhost-конкретный ответ на этот вопрос.

ваше программное обеспечение электронной почты, в последние годы, вероятно, начал получать более агрессивно на вас за использование неправильных имен серверов на ваших сертификатах. В качестве ответа Dreamhost теперь рекомендует использовать их доменное имя а не свой собственный при настройке учетной записи электронной почты.

вам нужно выяснить, какой почтовый кластер ваш учетная запись назначается, то ваш конфиг будет выглядеть следующим образом:

ActionMailer::Base.smtp_settings = {
  :address              => "mail.foo.com",
  :port                 => 587,
  :domain               => "subX.mail.dreamhost.com" # instead of "foo.com",
  :user_name            => "addy@foo.com",
  :password             => "foofoo",
  :authentication       => "plain",
  :enable_starttls_auto => true,
  # :openssl_verify_mode  => 'none' # hopefully, no longer needed
}

здесь subX - это поддомен, на котором находится ваш почтовый кластер. В настоящее время это можно найти на панели Dreamhost по адресу Panel > Support > Data Centers

более подробную информацию можно найти на странице конфигурации почтового клиента:https://help.dreamhost.com/hc/en-us/articles/214918038-Email-client-configuration-overview