1

gSOAPを使用してHTTPS Webサービスに接続したいのですが、gSOAPを使用して最初にsoap_ssl_client_context()を呼び出す方法について見つけたのは、ここから見つけた例です

 if (soap_ssl_client_context(
   &soap,            //1
   SOAP_SSL_DEFAULT, //2 
   "client.pem",    //3 /* keyfile: required only when client must authenticate to server (see SSL docs on how to obtain this file) */ 
   "password",      //4 /* password to read the key file (not used with GNUTLS) */ 
   "cacerts.pem",   //5 /* cacert file to store trusted certificates (needed to verify server) */    
   NULL,            //6 /* capath to directory with trusted certificates */ 
   NULL             //7 /* if randfile!=NULL: use a file with random data to seed randomness */ 
)) 
{ 
   soap_print_fault(&soap, stderr); 
   exit(1); 
} 

しかし、パラメータの詳細に関するドキュメントが見つかりません。私の質問は次のとおりです。

  1. 5番目のパラメーターは、「cacertファイル」である必要があると述べています。すべてのサンプルは PEM 形式を使用していますが、DER/PKCS などの他の形式をサポートしていますか? それともPEMのみ?DER ファイルを使用しようとしましたが、CA 証明書ファイルを読み取れないというエラーが生成されました。

  2. 6番目のものは、「ディレクトリへのcapath」である必要があると書かれていますが、どのように機能しますか? たとえば、そのディレクトリ内のすべてのファイルは証明書ファイルでなければなりませんか? 検証が成功するまで、ディレクトリ内のすべての証明書ファイルを繰り返しますか?

- - - - - - - - アップデート - - - - - - - -

1 番目の質問については、gSoap と OpenSSL のソース コードを調べたところ、PEM (x.509) 関数を使用して証明書ファイルをロードしていることがわかりました。

soap_init()
{
//...
soap->fsslauth = ssl_auth_init;
//...
}

soap_ssl_client_context()
{
//...
soap->cafile = cafile;
//...
return soap->fsslauth(soap);
}

ssl_auth_init()
{
//...
 SSL_CTX_set_client_CA_list(soap->ctx, SSL_load_client_CA_file(soap->cafile));
//...
}

SSL_load_client_CA_file
{
//...
if (PEM_read_bio_X509(in,&x,NULL,NULL) == NULL)
//...
}

どうもありがとう、

エイディ

4

1 に答える 1

0

パラメータ 3 と 5 では、一般的な PEM 形式がサポートされています。CRT を PEM に変換するには、how-to-convert-crt-to-pemを参照してください。同様に、openssl コマンドを使用して DER を PEM に変換できます。パラメータ 6 は、証明書 (PEM 形式) が配置されている場所へのディレクトリ パスです。このオプションは遅いため、cacerts.pem (または特定の cacert.pem) で NULL 以外のパラメーター 5 を使用することをお勧めします。

于 2013-10-31T02:48:03.190 に答える