"certificate verify failed" 在 Ruby 控制器中

"certificate verify failed" in Ruby controller

我是新手,我尝试创建一个应用程序来列出租船公司并允许用户对其进行评论。首先,我想允许用户创建 Renters。我将 omniauth 用于 Facebook 连接。它适用于生产但不适用于本地主机。

当我尝试添加承租人时,在承租人视图上的提交按钮之后,出现错误:

Started POST "/renters" for ::1 at 2016-02-10 11:20:00 +0100
Processing by RentersController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxx...xxx", "renter"=>{"name"=>"bastia", "address"=>"bastia", "latitude"=>"", "longitude"=>"", "website"=>"", "email"=>"", "phone"=>"", "user_id"=>""}, "commit"=>"Valider"}
(0.3ms)  BEGIN
(0.4ms)  ROLLBACK
Completed 500 Internal Server Error in 34ms (ActiveRecord: 0.7ms)

OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed):
  app/controllers/renters_controller.rb:44:in `create'

这是renters_controller.rb

class RentersController < ApplicationController
  before_action :set_renter, only: [:show, :edit, :update, :destroy]

  def create
    @renter = Renter.new(renter_params)

    if @renter.save
      gflash notice: "Le loueur a bien été enregistré"
      redirect_to '/'
    else
      gflash :now, notice: "Une erreur est survenue."
      render :new
    end
  end

  def renter_params
    params.require(:renter).permit(:name, :address, :website, :email, :phone, :review, :latitude, :longitude, :user_id)
  end

end

和模型 renter.rb

class Renter < ActiveRecord::Base
  geocoded_by :address
  after_validation :geocode
  reverse_geocoded_by :latitude, :longitude
  after_validation :reverse_geocode  # auto-fetch address
end

有人可以帮助我吗?

要使 Facebook 连接在开发环境中工作,您必须首先在您的 Facebook 开发者帐户中创建一个测试应用程序:

设置: - 应用域:localhost - 站点 url:http://localhost:3000/

然后在您的应用程序中输入 app idapp secret(如果您使用 Figaro,则在您的 application.yml 中),如下所示:

application.yml

development:
    OAUTH_FACEBOOK_ID: 'facebook-id'
    OAUTH_FACEBOOK_SECRET: 'facebook-secret' 

然后你就可以在你的devise.rb

中使用它了

devise.rb

config.omniauth :facebook, ENV['OAUTH_FACEBOOK_ID'], ENV['OAUTH_FACEBOOK_SECRET'], 
scope: 'public_profile', image_size: {height: 1600}, info_fields: 'name, id, first_name, 
last_name, gender, hometown, cover, email, link' # list of permissions

It works on production but not on localhost...

在本地主机上开发时,您可以通过创建 CA、为本地主机创建 CSR,然后让您的 CA 签署 CSR 来为 public 齿轮建模。最后,您将证书与您的开发网络服务器一起使用,并将您的 CA 安装在您的本地信任库中。

成为您自己的 CA 意味着浏览器和其他用户代理会 "just work"。如果您尝试使用自签名证书路由(下面讨论),那么您可以使用大多数用户代理,但浏览器将是一个痛点。

有关成为您自己的 CA 和为您的开发人员工作站颁发证书的信息,请参阅 How do you sign Certificate Signing Request with your Certification Authority?


您也可以创建自签名证书来避免 CA 和 CSR 问题。在这种情况下,您会告诉 Ruby 信任本地主机的自签名证书而不是 CA。

大多数用户代理应该没问题,但浏览器将是一个痛点,因为它们已经反对自签名证书。

要创建自签名证书,请参阅How to create a self-signed certificate with openssl? and How can I generate a self-signed certificate with SubjectAltName using OpenSSL?


你不应该这样做::use_https => false.