【问题标题】:Ruby Imap OpenSSL::SSL::SSLError: read server certificate B: certificate verify failedRuby Imap OpenSSL::SSL::SSLError:读取服务器证书 B:证书验证失败
【发布时间】:2012-09-26 16:11:23
【问题描述】:

我正在尝试使用 IMAP,但它不起作用。 我对“https”进行了同样的尝试,并且成功了。


require 'net/imap' 
=> true
irb(main):002:0> Net::IMAP.new("xxx", 993, true).login("redmine", "redmine")
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
    from /usr/local/lib/ruby/1.9.1/net/imap.rb:1439:in `connect'
    from /usr/local/lib/ruby/1.9.1/net/imap.rb:1439:in `start_tls_session'
    from /usr/local/lib/ruby/1.9.1/net/imap.rb:1036:in `initialize'
    from (irb):2:in `new'
    from (irb):2
    from /usr/local/bin/irb:12:in `<main>'
irb(main):003:0> 

ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux]
gem -v 1.8.24

这类似于:https://www.chiliproject.org/boards/1/topics/2076


openssl s_client -connect klevas.mif.vu.lt:imaps 

显示证书已过期。但是,在另一个系统上,其中 Ruby 和 Gem 一样,IMAP 连接有效。

【问题讨论】:

  • 你为什么用“redmine”标记这个?您是尝试在 Redmine 中运行它却失败了,还是尝试从命令行运行?
  • 我试图用 imap 将邮件提取到 redmine 中,但出现错误。之后,我使用 irb 进行了测试,您可以在上面看到输出。错误是一样的。
  • 好的。只要您在Redmine之外对错误进行三角测量。有时(经常)人们不这样做,然后发现问题出在编辑器/IDE 中。

标签: ruby openssl imap redmine


【解决方案1】:

如果我们在这里讨论 redmine,以下内容会有所帮助。

在第 29 行的 lib/redmine/imap.rb 中有一个调用

imap = Net::IMAP.new(host, port, ssl)

根据从/usr/lib/ruby/1.9.1/net/imap.rb了解到的信息

    def initialize(host, port_or_options = {},
               usessl = false, certs = nil, verify = true)

我改成

imap = Net::IMAP.new(host, port, ssl, nil, false)

错误消失了

【讨论】:

  • 我宁愿在某处进行配置,而不是修改应用程序代码,但这是唯一对我有用的解决方案。
【解决方案2】:

试试这个: imap = Net::IMAP.new('xxx', {:ssl => {:verify_mode => 0 }})

【讨论】:

  • 阅读 net/imap.rb 你会发现初始化的最后一个选项是 verify=true,但即使将其设置为 false 也不起作用。你的解决方案奏效了。你也可以说:{:ssl =&gt; {:verify_mode =&gt; OpenSSL::SSL::VERIFY_NONE}}
猜你喜欢
  • 2017-08-06
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
相关资源
最近更新 更多