2015-12-03 4 views
1

У меня есть веб-сервис WCF, который необходимо защищать с использованием протокола SSL/TLS. С другой стороны, у меня есть клиент C++, который использует веб-службу WCF, используя gSOAP library. Уже только сервер должен иметь сертификат. Теперь у меня есть задача заставить клиента иметь сертификат. Моя ранее реализация для клиента, как это:Добавить сертификат для сервера и клиента с использованием WCF и gSOAP

soap_ssl_init(); 
    int soapResult = soap_ssl_client_context(soapPtr, SOAP_SSL_NO_AUTHENTICATION, "client.pem", NULL, 
     NULL, "cacert.pem", NULL); 
    if (soapResult) 
    { 
     soap_print_fault(soapPtr, stderr); 
     throw new ClientLogException("Can not use ssl for comminucations!"); 
    } 
    else 
    { 

    } 

    struct soap mySoap = *soapPtr; 
    WSHttpBinding_USCOREILogServicesProxy proxy(mySoap); 
    input.request = &request; 
    int callCode = proxy.CallWebService(WEB_SERVICE_ADDRESS, NULL, &input, response); 
    if (callCode != 0) 
    { 
     cout << "Web service call code: " + callCode << endl; 
     throw new ClientLogException("Error in calling web service with call code: " + callCode); 
    } 

который я это делает из gSOAP documents. Он отлично работает с сервером, требующим наличия сертификата. Я просмотрел связь с помощью WireShark, и соединение было полностью зашифровано.

Теперь для обеспечения использования клиентом сертификата, я собираюсь использовать статью Nine simple steps to enable X.509 certificates on WCF. Но в статье используется клиент C# WCF. Я должен реализовать клиентскую конфигурацию в моем клиенте gSOAP C++. Я могу добавить сертификат клиента в код выше при вызове soap_ssl_client_context и в третьем параметре.

У меня есть 2 проблемы здесь:

1- я не знаю, есть возможность вызова веб-службы, что клиент и сервер имеют сертификаты и связь крепиться, когда сервер использует WCF и клиент использует gSOAP.

2- В статье CodeProject кажется, что вызов веб-службы использует http, и я удивляюсь, что в связи с этим отсутствует шифрование.

В конце концов, если у кого-то есть лучшее решение или порекомендуется использовать другие инструменты.

ответ

0

HTTPS работает из коробки с gsoap, если вы компилируете с помощью -DWITH_OPENSSL и ссылаетесь на библиотеки OpenSSL. Исходные настройки по умолчанию будут шифровать сообщения с помощью https://, но это не обеспечивает аутентификацию, потому что вам необходимо сначала зарегистрировать сертификаты сервера soap_ssl_client_context(), как вы указываете.

Для проверки подлинности сервера и клиента, то gsoap manual предлагает следующее:

int soapResult = soap_ssl_client_context(soapPtr, 
    SOAP_SSL_DEFAULT, // requires server to authenticate 
    "client.pem",  // client cert (+public key) to authenticate to server 
    "password",  // you need this when client.pem is encrypted 
    NULL,    // capath to certs, when used 
    "cacert.pem",  // should contain the server cert 
    NULL); 

Кроме того, вы, возможно, потребуется преобразовать PEM to CER (или другим способом) для окон.