2014-10-21 5 views
4

AWS의 한 서버 (A)에서 Tomcat 7 + SSL을 사용하는 AWS의 다른 서버 (B)에 연결하려고합니다.curl : 연결에 알 수없는 SSL 프로토콜 오류

서버 A :

  • 우분투 14.04
  • OpenSSL을 1.0.1f

서버 B :

  • 우분투 13.04
  • 톰캣 7
  • 은 OpenSSL 1.0.1c
  • SSL 인증서

I는 서버 A에서 다음 명령을 시도하고있다 :

curl https://Server.B -v 

을 그리고 나는 다음과 같은 예외 얻을 :

* Connection #0 to host test.salespredict.com left intact 
[email protected]:~$ curl https://Server.B.com -v 
* Rebuilt URL to: https://Server.B.com/ 
* Hostname was NOT found in DNS cache 
* Trying 54.245.81.*... 
* Connected to Server.B.com (54.245.81.*) port 443 (#0) 
* successfully set certificate verify locations: 
* CAfile: none 
    CApath: /etc/ssl/certs 
* SSLv3, TLS handshake, Client hello (1): 
* Unknown SSL protocol error in connection to Server.B.com:443 
* Closing connection 0 
curl: (35) Unknown SSL protocol error in connection to Server.B.com:443 

내가 확인하는 노력을 OpenSSL과 함께

openssl s_client -connect Server.B.Address:443 
(210)

나는 다음과 같은 결과를 얻을 :

CONNECTED(00000003) 
140284858304160:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184: 
--- 
no peer certificate available 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 0 bytes and written 307 bytes 
--- 
New, (NONE), Cipher is (NONE) 
Secure Renegotiation IS NOT supported 
Compression: NONE 
Expansion: NONE 
--- 

나는 내 자신의 컴퓨터 (OS X 매버릭스), 컬 성공하지만 openssl 명령이 동일한을 반환에서 연결려고합니다. BTW

내가 노력하고있어 경우

:

curl https://Server.B -v -ssl3 

그것은 서버 A에서 일하지만 나는 SSL 프로토콜을 지정하지 않습니다.

편집

서버 B - 톰캣 구성 :

<Connector SSLEnabled="true" acceptCount="100" clientAuth="false" disableUploadTimeout="true" 
        enableLookups="true" maxThreads="200" port="443" keystoreFile="/var/lib/tomcat7/conf/Path/Path_keystore" keystorePass="******" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" 
        secure="true" sslProtocol="TLS" /> 
+1

"-ssl3"은 "--sslv3"과 같지 않지만 -s -s -l -3 ... –

답변

4

클라이언트가 SSL3.0보다 높은 버전에 대한 지원을 발표하지 않습니다, 그것이 설정 --sslv3을 설정하고하지의 주요 차이점 초기 ClientHello 메시지에서. 일반적으로 클라이언트와 서버는 양측이 지원하는 버전에 동의하므로 클라이언트가 지원하는 최상의 SSL 버전을 발표하는 것이 옳습니다.

서버 (또는 일부 middlebox)가 최신 TLS 버전을 말할 수 없을뿐만 아니라 SSL 3.0을 제대로 처리 할 수없는 상황에 직면 한 것처럼 보입니다. 클라이언트가 최신 버전에 대한 지원을 발표하는 경우 서버 소프트웨어 자체가 오래되어 보이지 않으므로 적절한 TLS를 처리 할 수없는 정말 이상한 서버 설정 또는 일부 middlebox (즉,로드 밸런서, 방화벽 ...)가 있습니다.

서버에 대한 추가 정보를 게시하는 경우 자세한 정보가 표시 될 수 있습니다. 또한 서버를 SSLLabs과 비교하여 확인할 수도 있습니다.

EDIT : 서버가 TLS1. *을 지원하지만 클라이언트가 ECDHE-RSA-AES256-SHA 암호를 제공하면 연결이 끊어지는 것처럼 보입니다. openssl s_client -cipher 'ALL:!ECDHE-RSA-AES256-SHA'을 사용하면 curl --ciphers 'ALL:!ECDHE-RSA-AES256-SHA'처럼 작동합니다. 나는 이것이 서버 측의 문제라고 가정한다. 실제로는 자바가 자체 구현을 가지고 있기 때문에 OpenSSL이 아닌 Tomcat에서 SSL 구현에 의해 지원되지 않는 암호를 구성하고 Java를 사용하려고 할 때 Java croaks를 구성했다. .

+0

과 동일합니다. Tomcat 구성 (지원 TLS)을 추가했습니다 ... 수 있습니까? 더 많은 정보를 얻으시겠습니까? 그냥 AWS의 서버라고 생각하면 ... – Yakiros

+0

내가 제안한 것처럼 ssllabs에 대해 서버를 확인하려고 했습니까? –

+0

예, 인증서 100 개, 프로토콜 지원 90 개, 키 교환 40 개 및 암호 강도 60 개 (다음 갱신시 해결할 예정입니다 ...). 핸드 셰이크 시뮬레이션에서 거의 성공했습니다 ... (대부분의 안드로이드는 실패했습니다) ... – Yakiros

관련 문제