2012-02-14 2 views
0

Я пытаюсь подключиться к службе SOAP, для которой требуется взаимная аутентификация SSL.Взаимная аутентификация SSL с помощью gSOAP

Мы создали самозаверяющий сертификат и передали его сервисному оператору для проверки наших соединений. Кроме того, они отправили нам копию своего сертификата 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 и его привязки C. Я выполнил документацию по адресу 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

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

Из SSL Certificates and Key Files в документации 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 в качестве параметра keyfile в вызове soap_ssl_client_context().

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