如何在C++gSOAP生成的类中使用SSL
how to use SSL in C++ gSOAP generated classes
我需要在C++中使用gsoap库,我需要使用https。文档说明了如何在C中使用HTTPS,而不是在C++中(http://www.cs.fsu.edu/~engelen/soapdoc2.html#tth_sec192.20)。特别是,我在soap_ssl_init();
函数上有计算错误。我查看了/usr/lib/libgsoap*文件,找到了ligsoapssl++.a文件并链接到它。这个错误已经消失,但我得到了error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
。这意味着我需要调用soap_ssl_client_context
函数,但在C++生成的类中没有。我该怎么办?
乌干达人民国防军:我自己解决了这个问题。但这是一种非常古怪的方式。gSOAP生成继承自structsoap的C++类,它包含以下属性:
BIO *bio;
SSL *ssl;
SSL_CTX *ctx;
unsigned short ssl_flags;
const char *keyfile;
const char *password;
const char *dhfile;
const char *cafile;
const char *capath;
const char *crlfile;
const char *randfile;
SSL_SESSION *session;
因此,我们可以像在OpenSSL库中一样自己设置必要的attrs(flags,params)。在简单的情况下,调用soap_ssl_init()
一次并设置ssl_flags = SOAP_SSL_NO_AUTHENTICATION
就足够了。它对我有用。如果有人知道更好的方法,我会很高兴看到的。
这对我有效:
soap_ssl_client_context(m_proxy.soap, SOAP_SSL_NO_AUTHENTICATION, NULL, NULL, NULL, NULL, NULL);
其中m_proxy是使用gSOAP:生成的客户端代理的实例
wsdl2h.exe -o MyWebservice.h ..MyWebservice.wsdl
soapcpp2.exe -IC:gsoap-2.8gsoapimport -j MyWebservice.h -C -1 -SL
我自己解决了这个问题。但这是一种非常古怪的方式。gSOAP生成继承自struct soap
的C++类,它包含以下属性:
BIO *bio;
SSL *ssl;
SSL_CTX *ctx;
unsigned short ssl_flags;
const char *keyfile;
const char *password;
const char *dhfile;
const char *cafile;
const char *capath;
const char *crlfile;
const char *randfile;
SSL_SESSION *session;
因此,我们可以像在OpenSSL库中一样自己设置必要的attrs(flags,params)。在简单的情况下,调用soap_ssl_init()
一次并设置ssl_flags = SOAP_SSL_NO_AUTHENTICATION
就足够了。它对我有效。如果有人知道更好的方法,我会gla
我在c++程序中使用了对gsoap的SSL支持,没有遇到任何问题。我使用-DITH_OPENSSL指令编译了源文件stdsoap2.cpp(它与gsoap一起提供)(您错过了吗?)。我使用了obj文件,并将我的程序与之链接。
我今天也遇到了同样的问题。我在VirtualBox和Gsoap 2.8.21上使用Ubuntu 14.04。
我用命令生成了C++代理类:
soapcpp2 -1 -I/opt/libraries/gsoap/build/2.8.21/share/gsoap/import -C -j temporary.h
首先,我使用了前面提到的解决方案,并将ssl_flags设置为SOAP_ssl_NO_AUTHENTICATION。由于这个错误消失了。
此外,我观察到,当将标志更改为SOAP_TLSv1时,它也会使错误消失。引起头痛的标志是SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION,默认情况下,它设置在SOAP_SSL_default标志内。
一切似乎都很好,直到我从源代码重新编译了带有标志的gsoap——enabledebug。不久之后,我开始看到类似的东西:
SSL验证错误或警告与深度1的证书:无法获得本地颁发者证书
到目前为止,我找到的最好的解决方案是从gsoap站点下载cacerts.pem文件https://www.cs.fsu.edu/~engelen/cacerts.pem.zip,并将它们解压缩到可执行文件旁边。
当然,在你的代码中,你应该有类似的东西:
soap *soap = soap_new();
soap->ssl_flags = SOAP_SSL_DEFAULT;
soap_register_plugin(soap, soap_wsse);
soap->cafile = "cacerts.pem";
然后所有的警告和错误信息都消失了。
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 使用GSoap实现ONVIF
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- gSoap在从.wsdl创建.h期间出现错误
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- Mongocxx无法使用SSL连接到mongoDB
- 如何使用MinGW编译器和SSL支持静态编译Qt
- 如何从客户端在 gsoap C++ 的标头中传递非 xml 数据?
- 在使用 gSoap 链接多个 SOAP 服务时启用保持活动状态
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 如何在 Windows 中通过 SSL 端口枚举域控制器
- 我需要帮助来缩短检索 SSL 证书的执行时间
- 简单的gSoap服务器和带有SSL的客户端
- 运行使用gSOAP创建的web服务客户端时发生SSL错误
- 如何在 OpenSSL 中使用 SSL 证书与 gsoap,使用 C++ 客户端/服务器
- gSoap + SSL:CRL和证书名称检查
- gsoap 2.8.15 SSL Support
- 如何在windows上编译启用ssl的gSoap
- tcp_connect中的gSoap SSL/TLS证书主机名不匹配
- 如何在C++gSOAP生成的类中使用SSL