gpt4 book ai didi

c++ - gSOAP - 如何使用 SSL 和自签名证书

转载 作者:行者123 更新时间:2023-11-30 04:13:47 29 4
gpt4 key购买 nike

我需要将我的跨平台程序连接到 SOAP 网络服务。我编译了 gSOAP 工具 wsdl2h 和 soapcpp2,并使用这些工具从 .wsdl 文件生成了源代码文件。我在 stdsoap2.h 中放入了定义“#define WITH_OPENSSL”,这样就使用了 SSL。问题是,当我调用该服务时,调用返回 ERROR 30,这意味着 SSL ERROR,但我不知道真正的问题是什么。我知道服务器发送自签名证书,因为这是一个测试环境。实际上会打印一条与此相关的错误消息。输出是:

Creating SOAP objects ...
Calling SOAP httpAccessService:
SSL verify error or warning with certificate at depth 0: self signed certificate
certificate issuer /C=IT/ST=Milan/L=Milan/O=Company/OU=Company/CN=company.it
certificate subject /C=IT/ST=Milan/L=Milan/O=Company/OU=Company/CN=company.it
SOAP ERROR 30

我用来调用服务的函数是这样的:

void gSOAPTesting::runTest(){ 整数结果= 0; size_t 请求大小; size_t responseSize;

char endpoint[1024];
char buffer[8192];

string SoapAction;
struct soap *soap_container;

ApplicationConfigurationServiceSoapBindingProxy Proxy1;

_ns1__httpAccessService *httpAccessService;
_ns1__httpAccessServiceResponse *httpAccessServiceResponse;

printf("Creating SOAP objects ...\n");
soap_container = soap_new();
//soap_container->mode
httpAccessService = (_ns1__httpAccessService *) soap_instantiate(soap_container , SOAP_TYPE___ns1__httpAccessService , "" , "" , &requestSize);
httpAccessServiceResponse = (_ns1__httpAccessServiceResponse *) soap_instantiate(soap_container , SOAP_TYPE___ns1__httpAccessService , "" , "" , &responseSize);

soap_ssl_init(); /* init OpenSSL (just once) */

if(soap_ssl_client_context(soap_container ,
SOAP_SSL_DEFAULT ,
NULL,
NULL,
NULL,
NULL,
NULL
) != SOAP_OK)
{
printf("SOAP SSL Initialization Failure\n");
soap_print_fault(soap_container , stderr);
return ;
}

printf("Calling SOAP httpAccessService:\n");

SoapAction.clear();
SoapAction.append(SOAP_NAMESPACE_OF_ns1);
SoapAction.append("/");
SoapAction.append("httpAccessService");

result = Proxy1.httpAccessService("https://XXX.XXX.XXX.XXX:XXXX" , NULL , httpAccessService , httpAccessServiceResponse);

if(result == SOAP_OK)
{
printf("SOAP OK\n");
}
else
{
printf("SOAP ERROR %d\n" , result);

if(soap_check_state(soap_container) ) printf("Error: request soap struct not initialized\n");

if(httpAccessService->soap == NULL)
{
printf("Error: NULL request SOAP struct\n");
return;
}

if(httpAccessService->soap->endpoint == NULL) printf("Error: Empty request endpoint\n");

soap_stream_fault(soap_container , std::cout);
}

感谢任何帮助。

最佳答案

问题与不受信任的证书有关,因为它是自签名的。如果我在 stdsoap2.cpp...

中评论这些行
if (!ok)
{ soap_set_sender_error(soap, "SSL/TLS error", "SSL/TLS certificate host name mismatch in tcp_connect()", SOAP_SSL_ERROR);
soap->fclosesocket(soap, sk);
return SOAP_INVALID_SOCKET;
}

...即使证书是由未知机构颁发的,也会被接受。

关于c++ - gSOAP - 如何使用 SSL 和自签名证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19221108/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com