2012-09-05 180 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; –