我有需要使用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 ,我很想知道通信中没有加密。
最后,如果有人有更好的解决方案,或者欢迎推荐其他工具。
答案 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(或其他方式)。