2016-10-24 4 views
0

ранней версии этого вопроса не получил ответа, поэтому я обновляю всю вещь:gSOAP SSL - преобразование существующего кода ССЛА

У меня есть тест gSOAP клиент и сервер на моей машине. Клиент выполняет загрузку MTOM различных файлов на сервер. При попытке преобразовать код ССЛ я получаю следующее сообщение об ошибке:

В отчетах сервера:

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

Клиентские отчеты:

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". Может ли кто-нибудь посоветовать мне, что я делаю неправильно?

Применимо код клиента -

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

Эта ошибка типична, когда клиент использует HTTP вместо HTTPS для открытия соединения. Вы уверены, что клиент использует URL-адрес HTTPS с «https: // ...»? –

ответ

1

Я работаю над этим сейчас. Я думаю, что ошибки, которые вы видите, связаны с тем, что большинство/все дистрибутивы openSSL больше не поддерживают анонимную аутентификацию из-за человека в средних атаках. Самозаверяющим сертификатом на стороне сервера может быть единственный способ заставить эти примеры работать.

+0

Извините, я не был достаточно активен с этим - Центр сертификации и Сертификат были неправильно настроены. Это связано с привязкой сертификата и его настройкой с помощью старой версии openSSL. Текущая версия содержит множество диагностических данных, тестов и документов, чтобы объяснить все это. – infowanna