如何在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
就足够了。这个对我有用。如果有人知道更好的方法,我将很高兴见到。
没有找到相关结果
已邀请:
4 个回复
冲汉
因此我们可以自己在OpenSSL库中设置必要的attrs(标志,参数)。在简单的情况下,只需调用一次
并设置
就足够了。这个对我有用。如果有人知道更好的方法,我会
铰齐插
其中,m_proxy是使用gSOAP生成的客户端代理的实例:
砷竣阿
暑袜眠退
首先,我使用了上述解决方案,并将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文件,并将其解压缩到可执行文件旁边。 当然,在您的代码中,您应该有类似以下内容:
然后所有警告和错误消息消失。