Я пытаюсь подключиться к службе SOAP, для которой требуется взаимная аутентификация SSL.
Мы создали самозаверяющий сертификат и передали его сервисному оператору для проверки наших соединений. Кроме того, они прислали нам копию своего сертификата SSL.
Мне удалось успешно подключиться к получению ожидаемого SOAP-ответа от службы, используя openssl s_client и вручную вводя HTTP-запрос, заголовки и содержимое SOAP.
Для успешного подключения я использую следующие параметры:
openssl s_client -connect example.com:443 -key my_key.pem -cert my_cert.pem -pass file:my_passphrase
- my_key.pem - это имя моего личного ключа
- my_cert.pem - имя файла самозаверяющего сертификата, пересылаемого оператору службы.
- my_passphrase содержит кодовую фразу для закрытого ключа.
Я сейчас пытаюсь получить доступ к той же службе, используя gSOAP и его привязки к Си. Я следовал документации по http://www.cs.fsu.edu/~engelen/soapdoc2.html, чтобы создать привязку из службы WSDL, и добавил вызов к soap_ssl_client_context()
, чтобы установить соединение SSL, но я столкнулся с проблемой.
Я предположил, что должен использовать путь к my_key.pem в качестве параметра keyfile
, но, используя gdb, я вижу, что это вызов SSL_CTX_use_certificate_chain_file()
, который не удался.
gSOAP передает параметр keyfile
в качестве аргумента file
для этого вызова.
Любая помощь очень ценится.