2012-02-14 11 views
0

相互SSL認証が必要なSOAPサービスに接続しようとしています。gSOAPによる相互SSL認証

自己署名入りの証明書を作成し、サービスオペレーターに転送して接続を確認しました。同様に、彼らは私たちに彼らのSSL証明書のコピーを送った。

私は、openssl s_clientを使用してHTTPリクエスト、ヘッダー、およびSOAPコンテンツを手動で入力することで、サービスから期待される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接続をセットアップしましたが、問題が発生しています。

私はkeyfileパラメータとしてmy_key.pemへのパスを使用する必要があることが推測が、GDBを使用して、私はそれが失敗しているSSL_CTX_use_certificate_chain_file()への呼び出しであることがわかります。 gSOAPはkeyfileパラメータをfile引数としてこの呼び出しに渡します。

ご迷惑をおかけして申し訳ありません。

答えて

1

gSOAPは、証明書と鍵が同じファイルにあると想定しています()。 gSOAPのドキュメントのSSL Certificates and Key Filesから

鍵ファイル(にclient.pemとserver.pem)は、証明書のPEMとプライベートキーPEMを連結して作成されます。

これを達成するには、を2つのファイルを連結します。これはUnixツールcatを使って簡単です。シェルプロンプトで、そして問題のと同じファイル名の使用:

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

my_certkey.pemは、出力ファイルです。これで、soap_ssl_client_context()への呼び出しで、鍵ファイルのパラメータとしてmy_certkey.pemへのパスを使用できるようになりました。

openssl s_clientcurlのようなツールは、連結されたkey-certファイルを-certオプションの引数として認識し、そこでキーと証明書の両方を使用します。

関連する問題