0

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

自己署名証明書を作成し、それをサービス オペレーターに転送して、サービス オペレーターが接続を確認できるようにしました。同様に、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 接続をセットアップするための呼び出しを追加しましたが、問題が発生しています。 .

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

どんな助けでも大歓迎です。

4

1 に答える 1

1

解決策は、gSOAP が証明書とキーが同じファイルにあることを期待することです。

gSOAP ドキュメントのSSL 証明書とキー ファイルから:

キーファイル (client.pem および server.pem) は、秘密キー PEM と証明書 PEM を連結することによって作成されます。

これは、2 つのファイルを連結することで実現できます。これは、Unix ツールを使用すると簡単ですcat。シェル プロンプトで、質問と同じファイル名を使用します。

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

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

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

于 2012-05-17T15:37:50.497 に答える