복붙노트

[RUBY-ON-RAILS] 방법은 OpenSSL : SSL 없애 :: SSLError

RUBY-ON-RAILS

방법은 OpenSSL : SSL 없애 :: SSLError

나는 페이스 북이 OmniAuth를 사용하여 사용자를 인증하는 것을 시도하고있다. 처음이 작업을했지만, 그 길을 따라 그냥 작동을 중지하고 나에게이 오류 메시지를 제공하기 시작했다 :

동일한 코드 트위터 잘 작동하고 나는 그것을 페이스 북 작동하지 않는 이유를 알 수없는 것. 나는 도움을 온라인으로 보았다, 그러나 나는 성공하지 않았습니다.

이것은 내가 건물입니다 웹 사이트에 대한 링크입니다 : http://www.bestizz.com/ http://www.bestizz.com/auth/facebook : 그리고 URL을 당신에게 오류 메시지를 줄 것이다

해결법

  1. ==============================

    1.루비는 어떤 루트 인증서를 찾을 수 없습니다. 다음은 디버깅을위한 옵션입니다. 스크립트의 시작에서 다음 코드를 넣습니다 :

    루비는 어떤 루트 인증서를 찾을 수 없습니다. 다음은 디버깅을위한 옵션입니다. 스크립트의 시작에서 다음 코드를 넣습니다 :

       require 'openssl'
       OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
    
  2. ==============================

    2.다음 코드를 추가로 설정 / 초기화 / fix_ssl.rb

    다음 코드를 추가로 설정 / 초기화 / fix_ssl.rb

    require 'open-uri'
    require 'net/https'
    
    module Net
      class HTTP
        alias_method :original_use_ssl=, :use_ssl=
    
        def use_ssl=(flag)
          self.ca_file = "/etc/pki/tls/certs/ca-bundle.crt"  # for Centos/Redhat
          self.verify_mode = OpenSSL::SSL::VERIFY_PEER
          self.original_use_ssl = flag
        end
      end
    end
    

    노트 :

    대부분의 운영 체제는 이미 제공된 인증서 번들로 제공됩니다. 레드햇 엔터프라이즈 리눅스 CentOS는 예를 들어 그것은에 설치되어 :

    /etc/pki/tls/certs/ca-bundle.crt
    

    우분투의의 경우 :

    /etc/ssl/certs/ca-certificates.crt
    
  3. ==============================

    3.구글 인증을하는 동안 나는 요세미티에서 실행되는 루비를 업데이트 한 후 같은 문제에 직면하지만 있었어요.

    구글 인증을하는 동안 나는 요세미티에서 실행되는 루비를 업데이트 한 후 같은 문제에 직면하지만 있었어요.

    이 다음은 https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html 나의 문제를 해결하는 것 같았다.

    역사를 위해서 내가 인용합니다 :

    결국, 나는 실행을했다 :

    rvm uninstall ruby-2.2.4
    rvm install ruby-2.2.4 --disable-binary
    gem pristine --all
    

    도움이 되었기를 바랍니다

  4. ==============================

    4.SSL 검증과 같은 페이스 북에 대한 실패합니다. 나는 더 OpenSSL을 마스터는 아니지만, 나는 이것이 당신을 위해 일한다고 생각합니다.

    SSL 검증과 같은 페이스 북에 대한 실패합니다. 나는 더 OpenSSL을 마스터는 아니지만, 나는 이것이 당신을 위해 일한다고 생각합니다.

    당신이 OmniAuth의 최신 버전을 사용하고있는 가정 (> = 0.2.2을, 나는 당신이 가정)과 패러데이의 버전> = 0.6.1, 당신은 위치를 전달할 수 있습니다 (스택 추적은 당신이 말한다) 당신의 CA의 인증서를 번들. 이에 따라 페이스 북에 대한 OmniAuth 설정을 수정합니다 :

    Rails.application.config.middleware.use OmniAuth::Builder do
      provider :facebook, 'appid', 'appsecret', {:scope => 'publish_stream,email', :client_options => {:ssl => {:ca_path => '/etc/ssl/certs'}}}
      # other providers...
    end
    

    및 번들에 대한 경로로 '/ SSL / 인증서 표시 등 /'교체하십시오. 당신이 일을해야하는 경우,이 파일이 당신을 위해 작동합니다 생각 - 그냥 어딘가에 넣어 그것에게 필요한 권한을 부여하고, 귀하의 응용 프로그램을 가리 킵니다.

    자세한 지침이 SO 응답 알렉스 크레머에게 감사드립니다.

  5. ==============================

    5.이 링크는 작동합니다. https://gist.github.com/fnichol/867550 그냥 지침을 따르십시오. 당신은 설치 레일을 다운로드하고 두 개의 명령 줄 기능을 실행해야합니다.

    이 링크는 작동합니다. https://gist.github.com/fnichol/867550 그냥 지침을 따르십시오. 당신은 설치 레일을 다운로드하고 두 개의 명령 줄 기능을 실행해야합니다.

  6. ==============================

    6.이,이 OpenSSL을 가진 인증서 오류의 탐을 얻을 것이다 마십시오

    이,이 OpenSSL을 가진 인증서 오류의 탐을 얻을 것이다 마십시오

    sudo curl http://curl.haxx.se/ca/cacert.pem -o /opt/local/etc/openssl/cert.pem
    
  7. ==============================

    7.난 그냥 한 못생긴 해결 방법은 인터넷의 클래스를 대체하는 것입니다 : HTTP 및 SSL 인증서에서 확인하지를 알려주는 변수를 설정 :

    난 그냥 한 못생긴 해결 방법은 인터넷의 클래스를 대체하는 것입니다 : HTTP 및 SSL 인증서에서 확인하지를 알려주는 변수를 설정 :

        require 'net/http'
        require 'openssl'
    
        class Net::HTTP   
            alias_method :orig_connect, :connect
    
            def connect
              @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
              orig_connect
            end
        end
    

    나는 이런 식으로 내가 인터넷 : HTTP를 호출하는 보석을 호출하는 보석을 호출하는 보석의 소스 코드와 함께 깨끗이 싶지 않기 때문에 않았다. 정말 돌아 가야하고 조금씩 이동하는 방법을 알아낼 대신 별도의 cacert.pem 파일을 볼 수 있습니다. 나는 서버의 cacert.pem 파일을 수정할 수 없습니다, 또는 그 최적의 경로가 될 것입니다.

  8. from https://stackoverflow.com/questions/5711190/how-to-get-rid-of-opensslsslsslerror by cc-by-sa and MIT license