Код: Выделить всё
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);
}
- 5-й параметр говорит, что это должен быть «файл cacert». Все образцы используют формат PEM. Поддерживает ли он другие форматы, такие как DER/PKCS? Или только ПЕМ? Я попытался использовать файл DER, он сгенерировал ошибку «Невозможно прочитать файл сертификата CA».
- 6-й, он говорит, что это должен быть «путь к каталогу», но как это работает? Например. все файлы в этом каталоге ДОЛЖНЫ быть файлами сертификатов? Он будет перебирать все файлы сертификатов в каталоге до тех пор, пока проверка не пройдет успешно?
Что касается вопроса № 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)
//...
}
Эйди
Подробнее здесь: https://stackoverflow.com/questions/187 ... nt-context