我正在使用xml-rpc库在C ++中运行CGI脚本。服务器代码位于/ var / www / cgi-bin /目录中,由Apache运行。 Apache还配置为允许运行cgi的权限。现在的问题是,由于我系统上的Apache有自签名证书,当我运行客户端访问此地址时: “https://开头本地主机/的cgi-bin / xmlrpcserver”
它给了我这个错误: 客户端抛出错误:无法将XML传输到服务器并返回XML响应。 libcurl无法执行HTTP POST事务,解释:SSL证书问题,验证CA证书是否正常。细节: 错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
目前,如何绕过检查证书验证以运行和测试我的应用程序。我希望SSL连接(加密整个通信),而我想忽略证书验证并使用当前的自签名证书。
由于
答案 0 :(得分:2)
在xmlrpc_c库中使用Complex Client模式,并在curl transport中设置no_ssl_verifyhost和no_ssl_verifypeer选项为true:
#include <string>
#include <iostream>
#include <xmlrpc-c/client.hpp>
int main()
{
std::string const serverUrl("https://localhost/cgi-bin/xmlrpcserver");
std::string const methodName("sample.add");
xmlrpc_c::clientXmlTransport_curl myTransport
(xmlrpc_c::clientXmlTransport_curl::constrOpt()
.no_ssl_verifyhost(true)
.no_ssl_verifypeer(true)
);
xmlrpc_c::client_xml myClient(&myTransport);
xmlrpc_c::paramList sampleAddParms;
sampleAddParms.add(xmlrpc_c::value_int(5));
sampleAddParms.add(xmlrpc_c::value_int(7));
xmlrpc_c::rpcPtr myRpcP(methodName, sampleAddParms);
xmlrpc_c::carriageParm_curl0 myCarriageParm(serverUrl);
myRpcP->call(&myClient, &myCarriageParm);
int const sum((xmlrpc_c::value_int(myRpcP->getResult())));
std::cout << sum << std::endl;
}