Twilio应用程序; twilio-ruby(3.4.2),SSL错误

问题描述:

我遵循Twilio github page上的示例代码,它不起作用。在我的Rails控制台,它看起来像这样:Twilio应用程序; twilio-ruby(3.4.2),SSL错误

irb(main):039:0> require 'twilio-ruby' 
=> nil 
irb(main):040:0* account_sid='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 
=> "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
irb(main):041:0> auth_token='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy' 
=> "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" 
irb(main):042:0> client=Twilio::REST::Client.new account_sid, auth_token 
=> <Twilio::REST::Client @account_sid=AC1322312300a752f6e84a8254535ecce5> 
irb(main):043:0> client.account.sms.messages.create :from=>'16135551234', :to=>'16135551212',  :body=>"Ada is fat" 
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 
    from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:678:in `connect' 
    from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:678:in `block in connect' 
    from C:/Ruby192/lib/ruby/1.9.1/timeout.rb:44:in `timeout' 
    from C:/Ruby192/lib/ruby/1.9.1/timeout.rb:87:in `timeout' 
    from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:678:in `connect' 
    from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:637:in `do_start' 
    from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:626:in `start' 
    from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:1168:in `request' 
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/net_http_ext.rb:51:in `request' 
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/twilio-ruby-3.4.2/lib/twilio-ruby/rest/client.rb:214:in `connect_and_send' 
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/twilio-ruby-3.4.2/lib/twilio-ruby/rest/client.rb:138:in `block (2 levels) in <class:Client>' 
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/twilio-ruby-3.4.2/lib/twilio-ruby/rest/list_resource.rb:73:in `create' 
    from (irb):43 
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.11/lib/rails/commands/console.rb:44:in `start' 
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.11/lib/rails/commands/console.rb:8:in `start' 
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.11/lib/rails/commands.rb:23:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>'irb(main):044:0> 

些什么,我需要做的就是twilio,红宝石成功发送短信?我使用这些号码和凭据来打电话,所以他们很好。

**编辑2011年12月24日* ** 而不是运行在我的电脑上运行此代码,我把它部署到heroku.com。然后我没有SSL错误,我可以拨打电话。我很困惑。

+0

的Heroku在正确的地方有适当的CA证书文件供ruby找到它们。 – amb

这不应该是在twilio-Ruby版本开始3.5.0有问题。它现在“开箱即用”。

在3.5.0之前的twilio-ruby版本中,没有包含在该gem中的SSL CA证书包。因此,要“修理”的唯一途径,这是要么在证书捆绑在初始化时间点你的客户:

client = Twilio::REST::Client.new sid, token, :ssl_ca_file => '/path/to/file' 

,或者完全禁用SSL验证(在生产中不推荐):

client = Twilio::REST::Client.new sid, token, :ssl_verify_peer => false 
+0

第二个让我在测试服务器上运行twilio(又名笔记本电脑)。 –

您可能会缺少根证书文件。这通常不应该是必要的,但你可以尝试通过呼叫前加上几行禁用证书验证:

require 'open-uri' 
require 'openssl' 
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 
+0

我试过了,但我得到了完全相同的错误。我是否需要安装额外的宝石,或者做一些其他配置jiggery-pokery? –

+0

您可以通过将ssl_verify_peer => false作为参数传递给客户端构造函数来禁用SSL对等验证:client = Twilio :: REST :: Client.new sid,token,:ssl_verify_peer => false – amb

+0

嗨Andrew Benton。你的建议奏效了。如果您将其作为正确答案发布,我会接受它。 –