ruby - 访问 Litmus API 会导致 SSL 错误。有什么办法解决吗?

标签 ruby ssl openssl httparty

总结:当我通过 gem 连接到 Litmus 时,我收到以下错误:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: tlsv1 unrecognized name

使用相同的凭据通过 curl 访问 api 可以正常工作。

我找到了一个类似错误的解决方案:SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A - Faraday::Error::ConnectionFailed

建议更改 oauth 中的 SSL 选项:

ssl_options[:version] = :TLSv1

有没有办法为 Litmus 设置 ssl 选项?还有其他可能的解决方法吗?

这是完整的轨迹:

2.0.0-p247 :002 > Litmus::Base.new("xxx.litmus.com", "yyy@yyy.com", "zzz", true)
 => #<Litmus::Base:0x007fad4a66dc68> 
2.0.0-p247 :003 > Litmus::EmailTest.list
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: tlsv1 unrecognized name
  from /Users/andrei/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:918:in `connect'
  from /Users/andrei/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:918:in `block in connect'
  from /Users/andrei/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/timeout.rb:52:in `timeout'
  from /Users/andrei/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:918:in `connect'
  from /Users/andrei/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
  from /Users/andrei/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:851:in `start'
  from /Users/andrei/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1367:in `request'
  from /Users/andrei/.rvm/gems/ruby-2.0.0-p247/gems/httparty-0.13.1/lib/httparty/request.rb:93:in `perform'
  from /Users/andrei/.rvm/gems/ruby-2.0.0-p247/gems/httparty-0.13.1/lib/httparty.rb:521:in `perform_request'
  from /Users/andrei/.rvm/gems/ruby-2.0.0-p247/gems/httparty-0.13.1/lib/httparty.rb:457:in `get'
  from /Users/andrei/.rvm/gems/ruby-2.0.0-p247/gems/litmus-0.3.0/lib/litmus/test.rb:4:in `list'
  from /Users/andrei/.rvm/gems/ruby-2.0.0-p247/gems/litmus-0.3.0/lib/litmus/email_test.rb:4:in `list'
  from (irb):3
  from /Users/andrei/.rvm/rubies/ruby-2.0.0-p247/bin/irb:16:in `<main>'

最佳答案

我认为您需要修补 base.rb's初始化方法以接受 ssl 版本参数,然后向该方法添加如下内容:

def initialize(company, username, password, ssl = false, ssl_version)
  protocol = ssl ? 'https' : 'http'
  self.class.base_uri "#{protocol}://#{company}.litmus.com"
  self.class.basic_auth(username, password)
  self.class.ssl_version = ssl_version # <=
end

然后这样调用它:

Litmus::Base.new("xxx.litmus.com", "yyy@yyy.com", "zzz", true, :TLSv1)

希望对您有所帮助,我确实注意到您在他们的 Github 存储库中发布了同一主题的问题。或许您可以 fork 并创建拉取请求。

关于ruby - 访问 Litmus API 会导致 SSL 错误。有什么办法解决吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24703806/

相关文章:

ruby-on-rails - 如何在 rails 中处理 redis pub/sub

ruby-on-rails - :to and => in rails有什么区别

ruby-on-rails - Capistrano 和 Carrierwave

ssl - 运行 Grails 新项目时 PKIX 路径验证失败

PostgreSQL : SSL certificate error unable to get local issuer certificate

PHP - 用 openssl_random_pseudo_bytes() 替换 mcrypt_create_iv()

linux - 无法使用 openssl 获取私钥(没有起始行 :pem_lib. c:703:Expecting: ANY PRIVATE KEY)

c - C 中的 64 位散列/摘要

ruby - $SAFE=4 等同于什么?

http - WebLogic SSL 握手错误