1

xml-rpc ライブラリを使用して C++ で CGI スクリプトを実行しています。サーバー コードは /var/www/cgi-bin/ ディレクトリにあり、Apache によって実行されます。Apache も、cgi を実行する許可を許可するように構成されています。問題は、私のシステムの Apache には自己署名証明書があるため、クライアントを実行してこのアドレスにアクセスすると、「https://localhost/cgi-bin/xmlrpcserver」になることです。

次のエラーが表示されます: クライアントがエラーをスローしました: XML をサーバーに転送して XML 応答を取得できません。libcurl は HTTP POST トランザクションの実行に失敗しました。説明は次のとおりです。SSL 証明書の問題です。CA 証明書が正常であることを確認してください。詳細: エラー: 14090086: SSL ルーチン: SSL3_GET_SERVER_CERTIFICATE: 証明書の検証に失敗しました

当分の間、証明書の検証をバイパスしてアプリケーションを実行およびテストするにはどうすればよいですか。SSL 接続 (通信全体を暗号化するため) が必要ですが、証明書の検証を無視して現在の自己署名証明書を使用したいと考えています。

ありがとう

4

1 に答える 1

2

xmlrpc_c ライブラリで複合クライアント パターンを使用し、curl トランスポートで 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;
}
于 2012-09-05T14:22:41.220 に答える