web-dev-qa-db-ja.com

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

受け入れられる答えよりもはるかに優れたソリューション(つまり、セキュリティの観点から)は次のようになります。

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'
}

この方法では暗号化を引き続き使用しますが、証明書の検証は無効になります(エラーは発生しません)。

134
Bozhidar Batsov

編集:この答えはもはや最良の解決策ではなく、機能しない可能性がありますこの回答 を参照してください。これはより安全です。

証明書の名前は、アプリケーションを実行しているURLと一致する必要があります

役に立たない... SSLエラーを変更するオプションがない夢ホストでこのエラーが発生します。 (まあ、私はしますが、費用がかかります。)

1つのオプションは、tlsを無効にすることです。初期化子に次のようなものがあることを願っています:

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
}

Enable starttls autoオプションをfalseに変更します(または存在しない場合は追加します)。

警告:これは暗号化を無効にします。つまり、ユーザー名とパスワードはプレーンテキストでインターネットを通過します

私はこれを行うより良い方法を見ることができないので、どんな答えにも興味があります。

25
user208769

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

この質問を議論する多くの人々がドリームホストについて言及しているように、この質問に対するより良いドリームホスト固有の回答があります。

あなたの電子メールソフトウェアは、近年、証明書に誤ったサーバー名を使用しているため、おそらくより好戦的になり始めています。応答として、Dreamhostは、メールアカウントをセットアップするときに、自分のドメイン名ではなく自分のドメイン名を使用することを推奨しています。

アカウントが割り当てられているメールクラスターを確認する必要があります。設定は次のようになります。

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は、電子メールクラスターが存在するサブドメインです。現在、これはDreamhostパネルのPanel > Support > Data Centers

詳細については、メールクライアントの設定ページをご覧ください。 https://help.dreamhost.com/hc/en-us/articles/214918038-Email-client-configuration-overview

0
user208769