2012-09-05 4 views
1

xml-rpc 라이브러리를 사용하여 C++에서 CGI 스크립트를 실행하고 있습니다. 서버 코드는 Apache가 실행할/var/www/cgi-bin/디렉토리에 있습니다. 또한 Apache는 cgi를 실행하는 권한을 허용하도록 구성됩니다. 이제 문제는 내 시스템의 Apache가 클라이언트를 실행하여이 주소에 액세스 할 때 자체 서명 인증서가 있다는 것입니다. "https : // localhost/cgi-bin/xmlrpcserver"C++에서 자체 서명 된 인증서의 "인증서 확인"을 무시하십시오.

이 오류가 발생합니다. : 클라이언트 던져 오류 : XML을 서버로 전송할 수없고 XML 응답을 다시 가져올 수 없습니다. libcurl이 설명하는 HTTP POST 트랜잭션을 실행하지 못했습니다. SSL 인증서 문제, CA 인증서가 올바른지 확인하십시오. 세부 정보 : 오류 : 14090086 : SSL 루틴 : SSL3_GET_SERVER_CERTIFICATE : 인증서 확인에 실패했습니다.

당분간 인증서 확인을 거치지 않고 응용 프로그램을 테스트하고 테스트 할 수 있습니다. 인증서 확인을 무시하고 현재 자체 서명 인증서를 사용하려는 동안 SSL 연결 (전체 통신을 암호화)을 원합니다.

감사

답변

2

를 사용하여 복잡한 클라이언트 xmlrpc_c 라이브러리의 패턴과 no_ssl_verifyhost 설정하고 진정한 컬 운송 no_ssl_verifypeer 옵션 : 주석에 대한

#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 :: constrOpt(). no_ssl_verifyhost (true)와 함께 xmlrpc_c :: clientXmlTransport_curl을 사용하십시오. http://xmlrpc-c.sourceforge.net/doc/libxmlrpc_client++.html#class_curl –

+0

코드는 다음과 같습니다. string const serverUrl ("https : // localhost/cgi-bin/xmlrpcserver"); 문자열 const methodName ("sample.add"); xmlrpc_c :: clientSimple myClient; xmlrpc_c :: 값 결과; myClient.call (serverUrl, methodName, "ii", & result, 5, 7); int const sum = xmlrpc_c :: value_int (result); cout << "RPC 결과 (5와 7의 합) :"<< sum << endl; –

관련 문제