【问题标题】:Getting error: "OpenSSL::SSL::SSLError: certificate verify failed" in JRuby出现错误:JRuby 中的“OpenSSL::SSL::SSLError: certificate verify failed”
【发布时间】:2017-09-24 15:09:55
【问题描述】:

我在 CentOS 7.4 上安装了 JRuby 的最新版本 (9.1.13.0) 和 RVM 的最新版本 (1.29.3)

一切正常,但 HTTPS 和 SSL 连接失败并出现以下错误:

OpenSSL::SSL::SSLError: certificate verify failed
    from org/jruby/ext/openssl/SSLSocket.java:228:in `connect_nonblock'
    from /usr/local/rvm/rubies/jruby-9.1.13.0/lib/ruby/stdlib/net/http.rb:938:in `connect'
    from /usr/local/rvm/rubies/jruby-9.1.13.0/lib/ruby/stdlib/net/http.rb:868:in `do_start'
    from /usr/local/rvm/rubies/jruby-9.1.13.0/lib/ruby/stdlib/net/http.rb:857:in `start'
    from /usr/local/rvm/rubies/jruby-9.1.13.0/lib/ruby/stdlib/open-uri.rb:319:in `open_http'
    from /usr/local/rvm/rubies/jruby-9.1.13.0/lib/ruby/stdlib/open-uri.rb:737:in `buffer_open'
    from /usr/local/rvm/rubies/jruby-9.1.13.0/lib/ruby/stdlib/open-uri.rb:212:in `block in open_loop'
    from org/jruby/RubyKernel.java:1114:in `catch'
    from /usr/local/rvm/rubies/jruby-9.1.13.0/lib/ruby/stdlib/open-uri.rb:210:in `open_loop'
    from /usr/local/rvm/rubies/jruby-9.1.13.0/lib/ruby/stdlib/open-uri.rb:151:in `open_uri'
    from /usr/local/rvm/rubies/jruby-9.1.13.0/lib/ruby/stdlib/open-uri.rb:717:in `open'
    from /usr/local/rvm/rubies/jruby-9.1.13.0/lib/ruby/stdlib/open-uri.rb:35:in `open'

我尝试重新安装 OpenSSL 和 ca-certificates 以及 RVM 和 JRuby。另外,我尝试用手动下载的文件替换证书文件,但没有任何效果。

更新: 我已经用医生.rb 测试了我的问题:

export SSL_CERT_DIR='/etc/pki/tls/certs/' ; ruby doctor.rb www.google.com:443

得到:

/usr/local/rvm/rubies/jruby-9.1.13.0/bin/jruby (2.3.3) JRuby-OpenSSL
0.9.21: /etc/ssl SSL_CERT_DIR="/etc/pki/tls/certs/" SSL_CERT_FILE="/etc/pki/tls/certs/ca-bundle.crt"

HEAD https://www.google.com:443 OpenSSL::SSL::SSLError: certificate
verify failed

The server presented a certificate that could not be verified:  
subject: /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA   issuer:
/C=US/O=Equifax/OU=Equifax Secure Certificate Authority   error code
20: unable to get local issuer certificate

更新 2: 有趣的一点是,对其他服务器(如 www.facebook.comwww.apple.com)的 SSL 连接测试工作正常!

【问题讨论】:

  • @CyRossignol 这个问题是关于证书本身的问题。我的问题是 CA 的 OpenSSL 证书问题
  • 对造成的误解深表歉意。您描述的此错误可能是由多种因素引起的,但问题需要更多细节。 The duplicate I linked 建议了几种尝试诊断问题的方法,这有助于缩小问题范围。
  • 感谢您的提示。添加了医生.rb 的响应。只是困惑:(
  • 不幸的是,doctor.rb 的输出并不能真正帮助澄清问题。仍然没有足够的信息来提供明确的答案而不是在黑暗中拍摄,因为这是一个具有许多潜在原因的复杂问题。请尝试来自this question 的一些建议,如果对您的情况有用,请告诉我。
  • 其他服务器正常。问题在于 GeoTrust 和 Google

标签: ruby-on-rails ruby ssl openssl jruby


【解决方案1】:

Jruby 使用自己的 OpenSSL 实现

我相信你有同样的问题:https://github.com/jruby/jruby-openssl/issues/141#issuecomment-332788620

我在 CentOS 上也遇到过类似的问题。

我使用浏览器 (firefox) 解决了这个问题,并将“证书链”保存到“.pem”文件中。

然后设置环境变量:

SSL_CERT_FILE=/tmp/certificate_chain.pem

在 Jruby / openSSL / centOs 上报告了多个错误。

CentOS ca-certificate 结构与其他发行版不同,似乎与 JRuby + openSSL 存在问题。

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多