2016-07-11 3 views
0

Java 웹 서비스는 양방향 SSL 인증을 지원합니다. 따라서 신뢰할 수있는 저장소에 서버 인증서가 있고 신뢰할 수있는 저장소에 클라이언트 인증서가있는 서버 키 저장소가있는 클라이언트 키 저장소 (client.p12)가 있습니다.양방향 SSL 인증을위한 Ruby 클라이언트

나는 쉽게 브라우저 또는 우편 배달부 (브라우저 인증서 관리에서 client.p12을 가져와야 함)를 사용하여 내 서비스를 쉽게 호출 할 수 있지만 루비 클라이언트에 문제가 있습니다.

나의 현재 버전 :

connect_nonblock': SSL_connect SYSCALL returned=5 errno=0 state=unknown state (OpenSSL::SSL::SSLError) 

내 클라이언트 코드에 어떤 문제가 :

require 'rest_client' 

p12 = OpenSSL::PKCS12.new(File.read('client.p12'), 'password') 

client = RestClient::Resource.new('https://localhost:8080/service', 
            :ssl_client_cert => p12.certificate, 
            :ssl_cert_key => p12.key, 
            :verify_ssl => OpenSSL::SSL::VERIFY_NONE, 
            :ssl_version => 'TLSv1_2', 
            :ssl_ciphers => 'ECDHE-RSA-AES128-GCM-SHA256').get 

는 실패?

하려면 openssl s_client가 출력 :

$ openssl s_client -connect localhost:8080 
.... 
SSL-Session: 
    Protocol : TLSv1.2 
    Cipher : ECDHE-RSA-AES128-GCM-SHA256 
... 

답변

0

client.p12 파일을 nssdb 위치로 가져와야합니다.

mkdir /root/nssdb 
pk12util -i /path-to/your/client.p12 -d /root/nssdb 
certutil -L -d /root/nssdb/ 
export SSL_DIR = /root/nssdb 

curl -X POST -H "Content-Type: text/xml" --data "#{xml}" --cert cert:password "https://localhost:8080/service" -v -k 
chmod -R 777 /root/nssdb 
chown -R user /root/nssdb 

이 curl 호출을 루비 클라이언트에 포함 시키십시오. 효과가있을 것입니다.

참고 : 다른 SSL 버전을 사용하는 경우는 설명을 요청하거나 비하기 위해

+0

테스트 용도로 적합합니다. 그러나 들어오는 요청이 많을 때 Curl이 시간 초과되어 중단되면 확장 성이 문제가됩니다. –

1

키를 전달하는 옵션은 없습니다 :ssl_cert_key입니다, 그것은 :ssl_client_key입니다. 그게 어떤 차이가 있습니까?

+0

응답 기능을 오용하지 마십시오 컬 명령에 --tlsv1.0를 추가해야 대답 비고. 그 대신에 주석을 사용하십시오. 당신이 아직 코멘트 할 수 없다면, 그 때까지 명확한 질문에 대답함으로써 필요한 평판을 얻으십시오. – Magisch

+0

@ Magisch ... 이것은 답변입니다. 설명 된 문제로 인해 작성자의 코드가 작동하지 않습니다. – alberge

+0

아니요, 대답이 아닙니다. 그것의 현재 벌거 벗은 논평. 당신은 "이게 차이를 만들지"에 대한 초점을 제거하여 대답을 만들도록 편집 할 수 있습니다. 그러나 "xy로 키를 전달하기위한 옵션을 변경해보십시오"로 바꿀 수도 있습니다. – Magisch

관련 문제