2014-09-12 3 views
20

아래 코드는 다음과 같은 오류를 발생시킵니다 : OpenSSL :: SSL :: SSLError : SSL_connect SYSCALL returned = 5 errno = 0 상태 = SSLv3 읽기 서버 안녕하세요 AOpenSSL :: SSL :: SSLError : SSL_connect SYSCALL returned = 5 errno = 0 state = SSLv3 읽기 서버 안녕하세요

require 'net/https' 
uri = URI.parse("https://<server>.com") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.ssl_version = 'SSLv3' 
http.get(uri.request_uri) 

이유가 무엇입니까? 나는 다른 모든 질문에 언급 된 모든 것을 시도했지만 여전히 운이 없다.

  • 루비 1.9.3p484 (2013년 11월 22일 수요일 수정 43,786) x86_64에-darwin13.3.0]
  • OpenSSL을 0.9.8y 5 이월

업데이트 I

2,013 다음을 시도 :

  • 루비 2.0.0p353 (2013-11-22 수정 43784) [x86_64-darwin13.3.0] 아직 TLSv1_2

운 :

  • 은 OpenSSL 1.0.1i 2014년 8월 6일
  • 업데이트 II

    • 강제 ssl_version합니다.

      업데이트 III

      좋아, 여기에 최종 코드의 - 스테 펜 덕분에 (아래 답변을 참조) : 나는 관련 이후 내 질문에 다른 사람에 관련이있을 것으로 의심

      require 'net/https' 
      uri = URI.parse("https://<server>.com") 
      http = Net::HTTP.new(uri.host, uri.port) 
      http.use_ssl = true 
      http.ssl_version = :TLSv1 
      http.ciphers = ['RC4-SHA'] 
      http.get(uri.request_uri) 
      

      은 원격으로 잘못 구성된 서버.

    +2

    나를 위해 유용 :) – davispuh

    +0

    또한 온/R/asknetsec https://www.reddit.com/r/AskNetse c/comments/64ulgg/what_would_be_a_secure_ssl_configuration_for_the/ – Dorian

    답변

    25

    이것은 서버 사이트에서 발생하는 문제입니다. 서버가 독점적으로 TLS 1.2를 수락하는 것처럼 보이고 클라이언트가 더 적은 (무언가를 요청할 때 SSL 경고를 다운 그레이드하거나 보내는 것처럼) 요청할 때 일반적인 동작을 나타내지 않고 대신 연결을 닫습니다.

    TLS 1.2는 OpenSSL 0.9.8에서 지원되지 않으며 추가로 사용자 코드가 SSLv3을 시행합니다. OpenSSL 1.0.1로 업그레이드 할 때만 TLS 1.2를 얻습니다.

    일부 브라우저는 깨진 서버를 해결할 방법이있는 경우에도이 서버에 연결하지 못합니다. 그러나 파이어 폭스는 Chrome이 TLS 1.2와의 연결을 관리하는보다 적은 SSL 버전 (종종 도움이 됨)으로 연결을 다운 그레이드하려고 시도합니다.

    편집 : 더 이상 문제를 분석했지만 이제는 TLS1.2와의 연결을 더 이상 얻을 수 없지만 TLS1.0 또는 SSL3.0과 연결할 수는 있지만 암호가 RC4로 하드 코딩 된 경우에만 가능합니다. -SHA. 나는 AES128-SHA 나 DES-CBC3-SHA와 같은 다른 것들을 시도해 보았지만 작동하지 않는다. 명시 적으로

    http.ssl_version = 'TLSv1'  -- or SSLv3, but TLSv1 is better 
    http.ssl_cipher = 'rc4-sha' 
    

    작동합니다 설정 정말 엉망 시스템 보이지만 그래서. 나는 루비 사용자가 아니기 때문에 정확한 구문은 다를 수 있지만 OpenSSL s_client로 테스트했습니다.

    +0

    안녕하세요, 귀하의 회신에 감사드립니다! 나는 당신의 의견에 따라 더 많은 정보로 위의 질문을 업데이트했다. – Hesham

    +0

    편집을 참조하십시오. RC4-SHA를 암호로 사용하면 성공할 수 있습니다. –

    +0

    IT WORKED! 도와 줘서 고마워! 제가 한 일은'http.ssl_version = : TLSv1'과'http.ciphers = [ 'RC4-SHA']'입니다. 다시 한 번 감사드립니다! – Hesham

    0

    해결책은 openssl 1.0.2g-1​ubuntu4.6 (1.0.1f-1​ubuntu2.21) (예 : cedar-14에서 heroku-16까지)으로 업그레이드하는 것입니다.

    heroku stack:set heroku-16 -a your-app 
    

    그리고 app.json에 :

    { 
        ... 
        "stack": "heroku-16", 
        ... 
    } 
    
    +0

    이제'SSL_connect SYSCALL returned = 5 errno = 0 state = SSLv2/v3 read server hello A'가 발생하지는 않지만 여전히 발생합니다. – Dorian

    -1

    패스 트레인이 시도를 들어,

    brew install ruby 
    gem install fastlane 
    

    참조가 reference

    관련 문제