2016-10-24 3 views
0

이전 버전의 SSL하기 위해 기존 코드를 변환, 그래서 모든 게를 통해 업데이트 :gSOAP SSL - 아무런 응답이 없어이 문제의

나는 내 컴퓨터에서 테스트 gSOAP 클라이언트와 서버가 있습니다. 클라이언트는 다양한 파일을 서버에 MTOM 업로드합니다. 나는 다음과 같은 오류 얻을 SSL하기 위해 코드를 변환하려고 시도하는 경우 : "SSL"옵션을 사용하지 않고

An SSL error occured 
SOAP 1.2 fault SOAP-ENV:Receiver [no subcode] 
"SSL_ERROR_SSL 
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure" 
Detail: SSL_connect error in tcp_connect() 

가 실행 :

서버 보고서 :

"SSL_ERROR_SSL 
error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher" 

클라이언트 보고서를. 누군가 내가 잘못하고있는 것에 관해서 나에게 충고 할 수 있습니까?

적용 클라이언트 코드 -

if(fSSL) 
    soap_ssl_init(); 
. . . 
soap_init1(&my_soap, SOAP_ENC_MTOM); /* Enable MTOM */ 
. . . 
if(fSSL) 
{ 
    if (soap_ssl_client_context(&my_soap, 
     SOAP_SSL_NO_AUTHENTICATION + SOAP_TLSv1_2, 
     NULL, // client keyfile 
     NULL, // passphrase for keyfile 
     NULL, // certified authority certificate 
     NULL, // directory for trusted certificates 
     NULL))// random data for seed 
     { 
      soap_print_fault(&my_soap, stderr); 
      ... 
     } 
} 
... 
long gsoap_status = soap_call___ns1__upload(&my_soap, endpoint.c_str(), NULL, &upload_parms, &upload_response); 

적용 서버 코드 -

if(fSSL) 
    soap_ssl_init(); 
. . . 
soap_init1(&my_soap, SOAP_ENC_MTOM); /* Enable MTOM */ 
. . . 
if(fSSL) 
{ 
    if (soap_ssl_server_context(&my_soap, 
     SOAP_SSL_NO_AUTHENTICATION + SOAP_TLSv1_2, // per EMAIL - option 1 
     NULL, // Keyfile - required for authentication 
     NULL, // passphrase 
     NULL, // password to read Keyfile 
     NULL, // optional cacert file 
     NULL, // DH Filename or DH key len bits 
     NULL, // Randfile 
     NULL)) // optional server identification (enable SSL session cache) 
     { 
      soap_print_fault(&my_soap, stderr); 
      exit(0); 
     } 
} 
. . . 
my_soap.connect_timeout = 20; 
my_soap.send_timeout = 60; 
my_soap.recv_timeout = 60; 
if(!soap_valid_socket(soap_bind(&my_soap, NULL, port, 100))) 
{ 
    soap_print_fault(&my_soap, stderr); 
    exit(1); 
} 
fprintf(stderr, "Bind to port %d successful\n", port); 

// server loop starts 
for (;;) 
    printf("server loop sta\n"); 
    int t_socket = soap_accept(&my_soap); 
    struct soap* t_soap = 0; 
    t_soap = soap_copy(&my_soap);  
    if(fSSL) 
    { 
     if(soap_ssl_accept(&my_soap)) <------ FAILS HERE 
     { 
      printf("NOT Accepting (ssl) socket=%d connection from IP: %d.%d.%d.%d ...", t_socket, 
         (int)my_soap.ip>>24&0xFF, 
         (int)my_soap.ip>>16&0xFF, 
         (int)my_soap.ip>>8&0xFF, 
         (int)my_soap.ip&0xFF);    
      soap_print_fault(&my_soap, stderr); 
      soap_destroy(&my_soap); 
      soap_end(&my_soap); 
      continue; 
     } 
    } 
    . . . 
    if(soap_serve(&my_soap)) 
     ... 

서버 콘솔 출력 : 내가 지금 일하고 있어요

Bind to port 8080 successful 
server loop sta 
NOT Accepting (ssl) socket=364 connection from IP: 127.0.0.1 ...Error 30 fault is internal [no subcode] 
"SSL_ERROR_SSL 
error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher" 
Detail: SSL_accept() failed in soap_ssl_accept() 
+0

이 오류는 클라이언트가 HTTPS 대신 HTTP를 사용하여 연결을 열 때 발생하는 일반적인 오류입니다. 클라이언트가 "https : // ..."와 함께 HTTPS URL을 사용하고 있습니까? –

답변

1

. 나는 openSSL의 대부분/모든 배포판이 중간 공격에서 더 이상 익명 인증을 지원하지 않기 때문에보고있는 오류가 있다고 생각합니다. 서버 측에서 자체 서명 된 인증서가이 예제를 작동시키는 유일한 방법 일 수 있습니다.

+0

죄송합니다. 인증 기관과 인증서가 잘못 구성되어 있기 때문에 충분히 활발하게 활동하지 않았습니다. 이것은 인증서를 연결하는 것과 관련이 있으며 고대 버전의 openSSL로 구성되었습니다. 현재 버전에는 진단, 테스트 및 문서가 풍부하게 포함되어 있습니다. – infowanna