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 ответа
Бесконечно лучшее решение (с точки зрения безопасности), чем принятый ответ:
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'
}
Таким образом, вы все равно будете использовать шифрование, но проверка сертификата будет отключена (и вы не получите никаких ошибок).
РЕДАКТИРОВАТЬ: Этот ответ больше не является лучшим решением и может больше не работать. Смотрите этот ответ, который является более безопасным.
Имя в сертификате должно совпадать с 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
}
Измените опцию enable starttls auto на false (или добавьте ее, если она отсутствует).
Предупреждение: это отключит шифрование, означающее, что ваше имя пользователя и пароль будут проходить через Интернет в виде простого текста.
Я не вижу лучшего способа сделать это, поэтому был бы заинтересован в любых ответах.
Если вы используете почтовую библиотеку ruby, как я, здесь есть настройка для 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 теперь рекомендует использовать свое доменное имя, а не свое собственное при настройке учетной записи электронной почты.
Вам нужно выяснить, к какому почтовому кластеру относится ваша учетная запись, тогда ваш конфиг будет следующим:
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