gSOAP - soap_ssl_client_context()的参数

问题描述 投票:0回答:1

我想使用gSOAP连接HTTPS Web服务,我发现如何使用gSOAP首先调用soap_ssl_client_context(),我从here找到的例子是

 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. 第五个参数,它说它应该是一个“cacert文件”。所有样本都使用PEM格式,是否支持DER / PKCS等其他格式?还是只有PEM?我试图使用DER文件,它生成的无法读取CA证书文件错误。
  2. 第六个,它说它应该是“目录”,但它是如何工作的?例如。该目录中的所有文件必须是证书文件吗?它会迭代目录中的每个证书文件,直到验证成功为止?

----------------更新---------------

关于#1问题,我检查了gSoap和OpenSSL中的源代码,发现它使用PEM(x.509)函数加载certfile。

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)
//...
}

非常感谢,

Aidy

c++ ssl https gsoap
1个回答
0
投票

参数3和5支持通用PEM格式。要将CRT转换为PEM,请参阅:how-to-convert-crt-to-pem,您可以使用openssl命令将DER转换为PEM。参数6是证书(PEM格式)所在位置的目录路径。该选项很慢,因此优选使用cacerts.pem(或特定的cacert.pem)的非NULL参数5。

© www.soinside.com 2019 - 2024. All rights reserved.