Взаимная SSL-аутентификация с gSOAP - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь подключиться к службе 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 для этого вызова.

Любая помощь очень ценится.

1 Ответ

1 голос
/ 17 мая 2012

Решение состоит в том, что gSOAP ожидает, что сертификат и ключ находятся в том же файле .

Из Сертификаты SSL и файлы ключей в документации gSOAP:

Файлы ключей (client.pem и server.pem) создаются путем объединения закрытого ключа PEM с сертификатом PEM.

Этого можно добиться, объединяя два файла вместе. Это просто с помощью инструмента Unix cat. В командной строке введите те же имена файлов, что и в вопросе:

$ cat my_cert.pem my_key.pem > my_certkey.pem

Где my_certkey.pem - выходной файл. Теперь вы можете использовать путь к my_certkey.pem в качестве параметра ключевого файла при вызове soap_ssl_client_context().

Такие инструменты, как openssl s_client и curl будут понимать объединенный файл сертификата ключа в качестве аргумента для параметров -cert и использовать оттуда и ключ, и сертификат.

...