Ruby on Rails SSL_connect错误

时间:2016-04-22 15:42:56

标签: html ruby-on-rails ruby openssl

我有以下控制器 - courses-controller.rb:

class CoursesController < ApplicationController
  def index
    @search_term = params[:looking_for] || 'jhu'
    @courses = Coursera.for(@search_term)
  end
end

关注模型 - coursera.rb:

class Coursera
    include HTTParty

    base_uri 'https://api.coursera.org/api/catalog.v1/courses'
    default_params fields: "smallIcon,shortDescription", q: "search"
    format :json

    def self.for term
        get("", query: { query: term})["elements"]
    end
end

关注view- index.html.erb:

<h1>Searching for - <%= @search_term %></h1>

<table border="1">
    <tr>
        <th>Image</th>
        <th>Name</th>
        <th>Description</th>
    </tr>
    <% @courses.each do |course| %>
    <tr class=<%= cycle('even', 'odd') %>>
        <td><%= image_tag(course["smallIcon"])%></td>
        <td><%= course["name"] %></td>
        <td><%= course["shortDescription"] %></td>
    </tr>
    <% end %>
</table>

但是,当我http://localhost:3000/courses/index时,我收到以下错误:

SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书验证失败 应用程序跟踪|框架跟踪|完整追踪 app / models / coursera.rb:9:for' app/controllers/courses_controller.rb:4:in索引&#39;

请告诉我该怎么做。什么都行不通!

3 个答案:

答案 0 :(得分:0)

看起来它抱怨说没有有效的证书?如果是这种情况,您可以告诉HTTParty现在忽略无效的证书,如下所示:

class Coursera
    include HTTParty

    default_options.update(verify: false)

...

如果可行,那么您可能想弄清楚它认为证书无效的原因。

答案 1 :(得分:0)

上面发布的答案对你有用,因为你忽略了无效的证书。

这可能是解决这个问题的方法。但不建议这样做,因为你无法将这些代码用于生产。

因此,最好忽略仅仅用于开发环境。

只需将以下代码块添加到application.rb的末尾即可 你应该好好去。

if Rails.env.development?
  OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
end

答案 2 :(得分:0)

base_uri 'https://api.coursera.org/api/catalog.v1/courses'
...

证书包含以下DNS名称:

$ openssl s_client -connect api.coursera.org:443 -tls1 -servername api.coursera.org | \
    openssl x509 -text -noout | grep DNS
...
    DNS:*.coursera.org, DNS:coursera.org

当您连接到https://localhost:3000/...时,证书必须包含DNS名称 localhost

通用名称(CN)并不重要。重要的是主题备用名称(SAN),它们必须包含您用户与服务器联系的所有DNS名称。

另请参阅以下有关创建格式良好的SSL证书的信息: