如何在C ++ gSOAP生成的类中使用SSL

| 我需要在C ++中使用gsoap库,并且需要使用https。文档说明了如何在C中使用HTTPS,但在C ++中不能使用(http://www.cs.fsu.edu/~engelen/soapdoc2.html#tth_sEc19.20)。特别是我对
soap_ssl_init();
函数有计算错误。我查看了/ usr / lib / libgsoap *文件,找到ligsoapssl ++。a文件并对其进行了链接。这个错误已经消失了,但是我得到了1英镑。这意味着我需要调用
soap_ssl_client_context
func,但是C ++生成的类中没有。我该怎么办? UPD:我自己解决了这个麻烦。但这是古怪,非常古怪的方式。 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(标志,参数)。在简单的情况下,只需调用一次
soap_ssl_init()
并设置
ssl_flags = SOAP_SSL_NO_AUTHENTICATION
就足够了。这个对我有用。如果有人知道更好的方法,我将很高兴见到。     
已邀请:
        我自己解决了这个麻烦。但这是古怪,非常古怪的方式。 gSOAP生成从ѭ6继承的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(标志,参数)。在简单的情况下,只需调用一次
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.8\\gsoap\\import -j MyWebservice.h -C -1 -SL
    
        我已经在我的C ++程序中的gsoap上使用了SSL支持,并且没有任何问题。我使用-DWITH_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标志内设置的。 一切似乎都很好,直到我用--enable-debug标志从源代码重新编译了gsoap。不久之后,我开始看到以下内容: SSL在深度1处使用证书验证错误或警告:无法获取本地发行者证书 到目前为止,我发现的最佳解决方案是从gsoap网站https://www.cs.fsu.edu/~engelen/cacerts.pem.zip下载cacerts.pem文件,并将其解压缩到可执行文件旁边。 当然,在您的代码中,您应该有类似以下内容:
soap *soap = soap_new();
soap->ssl_flags = SOAP_SSL_DEFAULT;

soap_register_plugin(soap, soap_wsse);
soap->cafile = \"cacerts.pem\";
然后所有警告和错误消息消失。     

要回复问题请先登录注册