2014-03-26 3 views
0

이 문제를 해결하기 전에 certs 또는 SSL이 어떻게 작동했는지 전혀 알지 못했기 때문에 제 n00b-ness를 부담하십시오.SOAP 클라이언트 (savon)를 HTTPS를 통해 SOAP 웹 서비스에 연결할 수 없음

현재 Savon gem (v. 0.9.9)을 사용하여 HTTPS를 통해 SOAP 기반 웹 서비스에 연결하려고합니다. 그러나, 나는 성공적인 호출을하는 데 어려움을 겪고있다.

클라이언트가 SSL/TSL 프로토콜을 이해함에 따라 초기 'client hello'메시지를 서버에 보내면 서버는 서버의 디지털 인증서가 포함 된 'server hello'로 응답합니다. 클라이언트는 해당 인증서의 체인을 로컬 Cert Authority 번들과 대조하여 해당 인증서를 신뢰할 수 있는지 확인합니다. 즉, 내가 시도한 것은 다음과 같습니다.

  1. 업데이트 RVM의 CA 인증서에서 : 처음에 나는이 SO thread에 설명 된 것과 동일한 오류가되었고, 나는 루비는 CA 인증서에서를 점검 것을 배웠다. 또한 RVM이 사용하는 CA 인증서를 업데이트 할 때 these instructions이 발견되었습니다. 그래서 사용하여 ITerm에서 다음을 실행 :

    rvm osx-ssl-certs status all 
    

    을 나는 다음과 같은 출력을 가지고 :

    Certificates for /Users/user-name/.rvm/usr/ssl/cert.pem: Up to date. 
    

    그러나이 아직도 날이 성공적으로 HTTPS를 통해 SOAP 호출을 허용하지 않았다. 원격 서버의 SSL 인증서가 유효

  2. 확인하는 경우 : 나는 here에서하려면 openssl CI 도구에 대해 배웠고, 그래서 문제가 나하지, 아마 생각. 아마도 인증서 자체에 문제가있을 수 있습니다. 인증서 자체 외에도

    openssl s_client -connect [HOST]:[PORT] -showcerts 

    , 내가 출력에 다음있어

    : 그래서 나는하여 ITerm에서 다음 명령을 실행

    이 인증서는 자체 서명 때문에 내가 알고있는 것처럼
    Verify return code: 18 (self signed certificate) 
    

    , 그 자체가 신뢰할 수있는 CA가 아니라면, 그것은 결코 검증 될 수 없습니다. 문제는 인증서가 아니기 때문에 로컬 CA 번들에 문제가 있습니다.

  3. 로컬 CA 번들 업데이트 : 이해할 수있는대로 cert.pem은 신뢰할 수있는 CA 인증서 목록입니다. 사실은 내 로컬 컴퓨터에이 개 같은 파일을 발견

    /Users/user-name/.rvm/usr/ssl/cert.pem 
    

    /System/Library/OpenSSL/cert.pem 
    

    내가 업데이트해야하는 하나 확실하지 않았다, 그래서 난 내 응용 프로그램의 디렉토리에 그 파일 중 하나를 복사 결국 &을 복사하여 인증서를 새로운 로컬 cert.pem에 붙여 넣은 다음 다시 시도했습니다. 불행하게도 나는 이제 다음 얻을 :이 시점에서

    OpenSSL::SSL::SSLError: 
    hostname does not match the server certificate 
    

, 나는 지금까지 내가, 인증서가 현재 신뢰할 수있는 인증서로 처리해야 말할 수 있기 때문에 어떻게 해야할지 정말 모르겠어요.내가 알고있는 것처럼,이 인증서는 자체가 다음의 과정이 확인되지 않을 수있는 신뢰할 수있는 CA이었다 다음하지 않는 한, 자체 서명 된 이후

$SOAP_CORE = Savon::Client.new do |wsdl, http| 
     http.auth.ssl.ca_cert_file = path_to_local_cert.pm 
     http.auth.ssl.verify_mode = :peer 
     wsdl.document = path_to_remote_wsdl_over_https 
    end 
+0

왜 그런 구 버전의 Savon을 사용합니까? –

답변

-1

, 다음은 순간에 내 코드입니다. 문제는 인증서가 아니기 때문에 로컬 CA 번들에 문제가 있습니다.

나는이 결론에 도달하는 방법을 혼동합니다. 자체 서명 된 인증서는 확인되지 않으므로 은 인증서가있는입니다. 자체 서명자가 거기서 끝나지 않으면 CA 묶음을 업데이트하는 것이 도움이되지 않습니다. 어리석은 것 같습니다.

인증을 사용 중지 해보세요.

http.auth.ssl.verify_mode = :none 
+0

나는 어떤 인증서 (자기 서명 또는 기타)가 "신뢰할 수있는 인증서"로 나열되어야한다고 생각했습니다. 셀프 서명자를 추가하는 것은 나에게 어리석은 것처럼 보이지는 않았지만 SSL & 인증서 작업에 매우 익숙하다고 말했던 것처럼 말입니다. 나는 검증을 해제 시도,하지만 지금은 출력으로 다음 받고 있어요 : : – elefont

+0

거부 ​​(S 서버) 액세스가이 사이트에 액세스하기 위해 제공해야하는 인증 정보인가? –