【问题标题】:How to fix 'OpenSSL::SSL::SSLError' error in Ruby?如何修复 Ruby 中的“OpenSSL::SSL::SSLError”错误?
【发布时间】:2019-05-28 16:57:23
【问题描述】:

我使用 CloudFlare Flexible SSL 证书。

当我尝试发送用户注册确认时,我收到 500 错误。在日志中:

OpenSSL::SSL::SSLError(SSL_connect 返回=1 errno=0 state=SSLv2/v3 读取服务器hello A:未知协议):

我的production.rb

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
tls: true,
    address: 'smtp.yandex.ru',
    port: 587,
    domain: 'yandex.ru',
    authentication: 'plain',
    user_name: 'admin@site.ru',
    password: 'password',
}

我该如何解决这个错误?

【问题讨论】:

  • 希望您已配置 SSL 密钥和证书。然后使用配置启动服务器。如果您不知道或尚未完成此步骤,请 google 查找教程。 :)
  • 我在 CloudFlare 面板中配置了 SSL 证书。不要使用服务器进行配置。在 apache 规则中,我使用重定向到 https 并且它可以工作。
  • 我的意思是为 puma 或您正在使用的任何 Rails 服务器设置 SSL。
  • 我没有证书文件,因为 CloudFlare 不颁发它们
  • 这个问题与你服务器上的SSL证书无关,也与cloudflare无关。对于典型的 SMTP+STARTTLS 服务器,您的设置看起来是正确的,所以我会说您需要一些较低级别的调试日志记录或其他一些分析工具,例如 testssl.sh。

标签: ruby-on-rails ruby


【解决方案1】:

如果您尝试与不希望出现这种情况的服务器建立加密连接,通常会发生此错误。在第一次建立未加密的连接后,端口 587 通常需要使用STARTTLS。尝试在您的配置中删除 tls: true 并改用 enable_starttls_auto: true

【讨论】:

  • 您能从您的日志中添加更长的摘录吗?是否有任何机会回溯?
  • 现在错误:Net::SMTPFatalError (553 5.7.1 Sender address rejected: not owned by auth user.
  • 这意味着您的邮件正在尝试从无效的源地址发送。尝试使用您的yandex.ru 邮件地址添加default from: 'youraccount@example.com'
  • 问题是在 devise.rb 使用了完全不同的邮件,改变它一切正常。
猜你喜欢
  • 1970-01-01
  • 2014-07-02
  • 2014-06-17
  • 2011-08-08
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
相关资源
最近更新 更多