이 문제를 해결하기 전에 certs 또는 SSL이 어떻게 작동했는지 전혀 알지 못했기 때문에 제 n00b-ness를 부담하십시오.SOAP 클라이언트 (savon)를 HTTPS를 통해 SOAP 웹 서비스에 연결할 수 없음
현재 Savon gem (v. 0.9.9)을 사용하여 HTTPS를 통해 SOAP 기반 웹 서비스에 연결하려고합니다. 그러나, 나는 성공적인 호출을하는 데 어려움을 겪고있다.
클라이언트가 SSL/TSL 프로토콜을 이해함에 따라 초기 'client hello'메시지를 서버에 보내면 서버는 서버의 디지털 인증서가 포함 된 'server hello'로 응답합니다. 클라이언트는 해당 인증서의 체인을 로컬 Cert Authority 번들과 대조하여 해당 인증서를 신뢰할 수 있는지 확인합니다. 즉, 내가 시도한 것은 다음과 같습니다.
업데이트 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 인증서가 유효
확인하는 경우 : 나는 here에서하려면 openssl CI 도구에 대해 배웠고, 그래서 문제가 나하지, 아마 생각. 아마도 인증서 자체에 문제가있을 수 있습니다. 인증서 자체 외에도
openssl s_client -connect [HOST]:[PORT] -showcerts
, 내가 출력에 다음있어
: 그래서 나는하여 ITerm에서 다음 명령을 실행이 인증서는 자체 서명 때문에 내가 알고있는 것처럼Verify return code: 18 (self signed certificate)
, 그 자체가 신뢰할 수있는 CA가 아니라면, 그것은 결코 검증 될 수 없습니다. 문제는 인증서가 아니기 때문에 로컬 CA 번들에 문제가 있습니다.
로컬 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
왜 그런 구 버전의 Savon을 사용합니까? –