0

Web サービス (WCF) と、この Web サービスを使用する Web クライアントを実装する一般的なユース ケースがあります。クライアントとサービスの両方が、署名付きおよび暗号化されたメッセージを送受信しています (メッセージ レベル セキュリティ)。

サービスを使用している複数のクライアントを持つことができるため、サービス プロジェクトが実行されているサーバーに複数のクライアント証明書をインストールする必要があります。

個人および信頼されたルート証明機関の下のローカル マシン ストアに 2 つの証明書 (サービス証明書とクライアント証明書) をインストールしました。

makecert -sr LocalMachine -ss My -a sha1 -n "CN=WCFServer" -len 2048 -sky exchange -pe

makecert -sr LocalMachine -ss My -a sha1 -n "CN=WCFClient" -len 2048 -sky exchange -pe

証明書で「ライセンスの整合性を保証できません」というエラーが表示されますが、今はこの問題は気にしません。

Web クライアントは、独自の秘密鍵を使用して要求メッセージに署名し、サービス証明書の公開鍵を使用してメッセージを暗号化する必要があります。

サービスはリクエストを受け取り、クライアントの公開鍵を介してメッセージの署名を検証し、独自の秘密鍵を介してコンテンツを復号化します

リクエストを処理し、レスポンス オブジェクトを作成します。サービスは、独自の秘密鍵で応答に署名し、クライアントの公開鍵でメッセージを暗号化する必要があります。

これで、クライアントは署名済みおよび暗号化された応答を取得します。ここで、サービスの公開鍵を使用して応答を検証し、独自の秘密鍵でメッセージを復号化します。

これがセネリオ全体です。ローカル開発マシンに (クライアントとサービス) X.509 証明書の両方をインストールしました。私は使用してwsHttpBindingおり、通信は正常に機能しています。

私は[ServiceContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]ServuceContractと[OperationContract(ProtectionLevel = ProtectionLevel.EncryptAndSign, IsOneWay = false)]OperationContractに使用しています。

次の質問があります。コードで要求または応答メッセージに署名して暗号化/復号化する必要がありますか (クライアントで 1 回、サービス コードで 1 回)、またはサービス プロジェクトとクライアント プロジェクトの web.config の構成で十分です。 ?

私は次のコードプロジェクトを実行し、正常に動作しています。 http://www.codeproject.com/Articles/36683/simple-steps-to-enable-X-certificates-on-WCF

私のソース コード (Visual Studio プロジェクト) 両方の証明書を含むものは、Bitbucket でダウンロードできます。

誰でも教えてもらえますか、このすべてをコードで行う必要がありますか、それとも現在の構成で行う必要がありますか。

前もって感謝します。

4

3 に答える 3

0

ここで、MSDN チームから別の良い回答 (ステップ バイ ステップ ガイド) を取得しました。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/a9d85e9f-6d35-425c-ac6d-b3cd883760e4/wcf-message-level-security-using-certificate-x509-message-signed-and-暗号化?forum=wcf&prof=必須

于 2016-04-29T08:58:36.910 に答える
0

MSDNフォーラムから次の回答を得ました。

コードで要求または応答メッセージに署名して暗号化/復号化する必要がありますか (クライアントで 1 回、サービス コードで 1 回)、またはサービス プロジェクトとクライアント プロジェクトの web.config の構成で十分ですか?

構成ファイルで証明書認証を使用するようにサービスを構成した場合、すべての応答および要求メッセージは、クライアント証明書の秘密鍵/公開鍵およびサービス証明書の秘密鍵/公開鍵によって暗号化/復号化されます。したがって、私の考えでは、構成ファイル内のすべてのものを実行するだけで十分です。

詳細については、次の記事を参照してください。

証明書認証:

https://msdn.microsoft.com/en-us/library/ff648360.aspx .

メッセージとトランスポートのセキュリティ:

https://msdn.microsoft.com/en-us/library/ff648863.aspx .

于 2016-04-27T07:48:22.597 に答える
0

誰でも答えられるかもしれないいくつかの質問があります。

  1. サービスにアクセスする複数のクライアント (外部 Web アプリケーション) があります。各クライアントは独自の証明書を作成する必要がありますか? クライアントは、サービスホストサーバーにインストールする必要がある秘密鍵なしで証明書を提供しますか? これは正しい方法ですか?

  2. 各クライアント証明書は web.config で構成する必要がありますか?

  3. 秘密鍵なしでサービス証明書をエクスポートし、クライアントに送信する必要があります。クライアントはアプリケーション サーバーに証明書をインストールして構成する必要がありますか? これは正しいです?

于 2016-04-27T07:51:01.113 に答える