ruby-on-rails - 为什么 Rails ActionMailer 6.1/Ruby 3.0 不忽略自签名 SMTP 证书?

标签 ruby-on-rails ruby ssl actionmailer self-signed

我无法让 Rails ActionMailer 6.1(使用 Ruby 3.0)连接到带有自签名证书的 SMTP 邮件程序。
所有可能根本不使用 TLS/SSL 或不验证证书的选项都设置在 config/production.rb 中。并且似乎被 rails 正确拾起。
有什么想法我可能会错过吗?

ruby --version
  ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-linux-musl]

RAILS_ENV=production myapp rails c
Loading production environment (Rails 6.1.4.6)
irb(main):001:0> mailer = ActionMailer::Base.new
=> #<ActionMailer::Base:0x00000000029c48>
irb(main):002:0> ap mailer.smtp_settings
{
                 :address => "smtpout.xxxxx.com",
                    :port => 25,
         :enable_starttls => false,
    :enable_starttls_auto => false,
     :openssl_verify_mode => 0,
                     :ssl => false,
                     :tls => false
}
=> nil
irb(main):003:0> mailer.mail(from: 'user1@example.com', to: 'user2@example.com',
    subject: 'test', body: "Hello, you've got mail!").deliver
/usr/local/lib/ruby/3.0.0/net/protocol.rb:46:in `connect_nonblock': SSL_connect
    returned=1 errno=0 state=error: certificate verify failed (self signed 
    certificate) (OpenSSL::SSL::SSLError)

最佳答案

这归结为以下几点:当我使用设置时

enable_starttls_auto: false,
openssl_verify_mode: OpenSSL::SSL::VERIFY_NONE
它确实执行 TLS 传输并失败并显示 state=error: certificate verify failed (self signed certificate) (OpenSSL::SSL::SSLError) ,这在我看来是双重错误,因为它甚至不应该启动 TLS 握手,如果是这样,应该跳过证书验证。
Rails 使用 Mail-Gem处理这些选项,这确实是 had an incompatible change .
作为我的解决方法,删除 enable_starttls_auto完全设置(从而保持 TLS 传输),仅使用 openssl_verify_mode: OpenSSL::SSL::VERIFY_NONE 禁用证书验证有帮助(但如果您有其他原因避免使用 TLS,而不是拥有伪造的证书,则无济于事)。

关于ruby-on-rails - 为什么 Rails ActionMailer 6.1/Ruby 3.0 不忽略自签名 SMTP 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71202804/

相关文章:

ruby-on-rails - Capybara 和 Select2 版本 4

ruby - 是什么导致了 EventMachine::ConnectionNotBound?

c# - 如何让 WCF 服务运行在 SSL 上?

security - 通过标准输入安全地将密码传递给 openssl

ruby-on-rails - 无法安装 mysql2 0.3.14 gem

ssl - 启动 : Logstash Forwarder

ruby-on-rails - 在 Ruby on Rails 中将 DateTime 转换为简单的 Date

ruby-on-rails - Rails 4 elasticsearch使用多个搜索条件,结合了搜索功能

ruby-on-rails - 为什么设计邀请不发送一些电子邮件

ruby - curl.perform 在多线程环境下抛出无效的容易处理错误