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
一个比被接受的答案更好的解决scheme(就安全性而言)是:
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' }
这样你仍然会使用encryption,但是证书的validation将被禁用(并且你将不会得到任何错误)。
编辑:这个答案不再是最好的解决scheme,并可能不再工作 。 看到这个更安全的答案 。
证书上的名称应该与您运行应用程序的url匹配
没有用…我得到这个错误与dreamhost,我没有select更改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(如果不存在,则将其添加进去)。
警告:这将禁用encryption,这意味着您的用户名和密码将以纯文本方式穿越互联网
我看不出有这样做的更好方法,所以会对任何答案感兴趣。
如果你像我一样使用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)