2012-09-05 92 views
1

我正在C++中使用xml-rpc库运行CGI脚本。服务器代码位于/ var/www/cgi-bin /目录中,由Apache运行。 Apache也被配置为允许运行cgi的权限。现在的问题是,由于阿帕奇我的系统上有一个自签名的证书,当我运行的客户端来访问这个地址: “https://开头本地主机/ cgi-bin目录/ xmlrpcserver”忽略C++中自签名证书的“证书验证”

它给了我这个错误: 客户端抛出错误:无法将XML传输到服务器并返回XML响应。 libcurl未能执行HTTP POST事务,解释:SSL证书问题,请验证CA证书是否正确。详细信息: 错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败

目前,如何绕过检查证书验证以运行和测试我的应用程序。我想SSL连接(加密整个通信),而我想忽略证书验证并使用当前的自签名证书。

感谢

回答

2

在xmlrpc_c库卷曲运输no_ssl_verifypeer选择真正使用复杂的客户端模式和no_ssl_verifyhost设置和:

#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; 
} 
+0

感谢您的意见。我认为现在有些事情改变了。它打印网页的内容,同时它仍然给我相同的错误。我应该在我的代码中使用'curl'句柄吗?或者它只是整个应用程序的全局? –

+0

我明白这个问题。我以为你直接使用libcurl,但这不是事实。 xmlrpc_c库自己执行对服务器的HTTP请求。请从您的代码中删除我的建议。相反,使用复杂客户端http://xmlrpc-c.sourceforge.net/doc/libxmlrpc_client++.html#complex_client并使用xmlrpc_c :: clientXmlTransport_curl与xmlrpc_c :: clientXmlTransport_curl :: constrOpt()。no_ssl_verifyhost(true)。请参阅http://xmlrpc-c.sourceforge.net/doc/libxmlrpc_client++.html#class_curl –

+0

代码如下所示: string const serverUrl(“https:// localhost/cgi-bin/xmlrpcserver”); string const methodName(“sample.add”); xmlrpc_c :: clientSimple myClient; xmlrpc_c :: value result; myClient.call(serverUrl,methodName,“ii”,&result,5,7); int const sum = xmlrpc_c :: value_int(result); cout <<“RPC的结果(5和7之和):”<< sum << endl; –