OpenSSL::SSL::SSLError:主机名“smtp.gmail.com”与服务器证书不匹配

OpenSSL::SSL::SSLError:主机名“smtp.gmail.com”与服务器证书不匹配

这是我在 setup_email.rb 文件中设置的内容,

if Rails.env.production?
  ActionMailer::Base.smtp_settings = {
      :address              => "smtp.gmail.com",
      :port                 => "587",
      :domain               => "gmail.com",
      :user_name            => "username",
      :password             => "mypass",
      :authentication       => "login",
      :enable_starttls_auto => true
  }
end

此代码适用于开发和准备环境

这段代码在生产环境中运行良好,几天后它突然停止工作,我收到错误消息。我尝试设置openssl_verify_mode: none仍然不起作用。

然后我更换了 Gmail 账户,但还是出现同样的错误。似乎是服务器端出了问题

错误:

OpenSSL::SSL::SSLError:主机名“smtp.gmail.com”与服务器证书不匹配

我尝试了网上的各种方法,但都没有用。任何帮助我都会很感激。

答案1

在同一生产系统上使用:

openssl s_client -connect smtp.gmail.com:587 -starttls smtp -showcerts

在我的系统上,输出包括:

subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com

您的 smtp 软件可能会检查 CN=smtp.gmail.com,然后发现其中存在其他内容。例如,有人可能将自己插入到您和 gmail.com 之间。不一定是以敌对的方式,可能是简单的/etc/hosts修改,或者是对 socks 代理的更改。

相关内容