使用WCF和gSOAP将证书添加到服务器和客户端

时间:2015-12-03 13:32:29

标签: c++ .net wcf ssl gsoap

我有需要使用SSL / TLS协议保护的WCF Web服务。另一方面,我有使用gSOAP library使用WCF Web服务的C ++客户端。已经只有服务器需要证书。现在我的任务是强制客户获得证书。我之前对客户端的实现是这样的:

    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时,调用Web服务可以使客户端和服务器都具有证书并保证通信安全。

2-在CodeProject文章中,似乎Web服务调用正在使用 http ,我很想知道通信中没有加密。

最后,如果有人有更好的解决方案,或者欢迎推荐其他工具。

1 个答案:

答案 0 :(得分:0)

如果您使用sudo install_name_tool -change libmysqlclient.18.dylib \ /usr/local/mysql-5.6.23-osx10.8-x86_64/lib/libmysqlclient.18.dylib \ /Library/Ruby/Gems/2.0.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle 进行编译并链接到OpenSSL库,则HTTPS可以使用gsoap开箱即用。开箱即用的默认设置将使用-DWITH_OPENSSL加密邮件,但这不会强制执行身份验证,因为您需要首先使用https://注册服务器证书。

要对服务器和客户端进行身份验证,gsoap manual建议如下:

soap_ssl_client_context()

此外,您可能需要为Windows转换PEM to CER(或其他方式)。