我遇到的问题是我的开发机器不再需要连接到我的IMAP帐户了。我知道我必须改变一些东西,但不能想到任何相关的东西。但我发现,使用ruby 2.1.0和2.1.2,我的应用程序可以工作,但2.1.5和2.2.1 [编辑:2.2.2也失败了]它不起作用。
所以我开始调试并提取实际连接的部分并抛出SSL错误。缩短的脚本如下:
require 'net/imap'
@imap = nil
begin
@imap = Net::IMAP.new("mail.example.com", {port: 143})
@imap.starttls({}, true)
@imap.login("username", "password")
rescue => e
puts e
end
2.0.0和2.1.2的结果是空的,所以它有效。但是对于2.1.5和2.2.1 [编辑:和2.2.2],我得到以下错误:
SSL_write:证书验证失败
当然我立即检查了服务器的钥匙串,但似乎没问题。它导致
验证返回码:0(ok)
虽然它有一行
验证错误:num = 20:无法获得本地颁发者证书
但我读到这个错误是“正常的”。我无法解释这个错误,因为我正确地将证书包含在我的dovecot服务器中,但是在搜索网络时,看起来其他所有人都获得了大多数证书的这一行,并且它有效。另外,如前所述,验证返回码为0,因此一切都应该有效。
您是否知道这是否是上述行的问题,或者是否是新版ruby版本的错误?我找不到任何关于此的清晰搜索结果。
PS:我需要使用starttls,“ssl:true”给我一个未知的协议错误,因为我只启用了tls。
edit2:我再次重新检查。在生产服务器上,2.1.5工作。可能是开发服务器上的CA证书有问题吗?但为什么旧版本可以正常工作而新版本不工作呢?
---编辑:按要求输出---
我在bin中将我的真实域名更改为domain.com。主机是子域,证书是RapidSSL(* .domain.com)的子域通配符证书。
答案 0 :(得分:0)
最后通过重新安装OS X解决了这个问题。由于某些原因,我的系统存在问题,尽管我对从OpenSSL到rvm,Ruby,系统范围安装的授权证书等所有内容进行了三重检查。
感谢您的帮助: - )