今ちょっと調べてみたのですが、答えが見つかりません。 WCF セキュリティのベスト プラクティスでは、可能な場合は Windows 認証を使用するように指示されています。署名が必要な場合、否認防止とデータの完全性を提供できますか?
(ここで最も重要な問題は、否認防止です。私は TLS を使用していますが、TLS または MLS を使用した Windows 認証を介して否認防止を提供できるかどうかを判断しようとしています。理論的には、TLS はホップ間のデータ整合性を提供します。)
今ちょっと調べてみたのですが、答えが見つかりません。 WCF セキュリティのベスト プラクティスでは、可能な場合は Windows 認証を使用するように指示されています。署名が必要な場合、否認防止とデータの完全性を提供できますか?
(ここで最も重要な問題は、否認防止です。私は TLS を使用していますが、TLS または MLS を使用した Windows 認証を介して否認防止を提供できるかどうかを判断しようとしています。理論的には、TLS はホップ間のデータ整合性を提供します。)
Windows 認証は、すべての Microsoft マシンに組み込まれているため、ベスト プラクティス ガイドで推奨されています。多くのインフラストラクチャのセットアップを必要とする証明書は好きではありません。マシンが Active Directory ドメインに参加している場合は、そのまま動作するはずです。
Windows 認証はSPNEGOを使用して、 KerberosまたはNTLMのどちらの認証方法を使用するかをネゴシエートします。可能な限り、クライアントとサーバーは最初にKerberosを選択しようとします。それ以外の場合は、NTLMが使用されます。
メッセージを署名できるかどうかという質問に答えるために、KerberosとNTLMの両方を使用してメッセージの署名と暗号化を行うことができます。WCF プログラマーにとって、それは透過的であるべきです。必要なのは、ProtectedLevelを EncryptAndSign に設定することだけです。信じられない場合は、Windows 認証を設定した後にネットワーク トレースを確認してください。メッセージが暗号化されていることがわかります。
Windows 認証を使用する場合、WCF は SSPI を呼び出して認証とメッセージの暗号化を行います。SSPI の詳細については説明しません。 メッセージを暗号化するNTLMの SSPI 呼び出しと、メッセージを暗号化するKerberosの SSPI 呼び出しを次に示します。それを証明するために、Windbg にブレークポイントを設定できます。
上記のリンクには明示的に記載されていませんが、このリンクは、上記の EncryptMessages メソッドがデータの整合性 (署名) とプライバシー (暗号化) を提供できることを明確に示しています。
Windows認証がサポートされているかどうかについての最初の質問に戻りますnon-repudiation
が、これは実際にはより大きな質問です. データ署名は必要ですnon-repudiation
が、十分ではありません。WCF は、操作またはトランザクションを記録するための監査機能も提供しています。これは、ユーザーが操作の実行またはトランザクションの開始を拒否できないことを保証するためです。したがって、 をサポートするには、 SuppressAuditFailurenon-repudiation
も false に設定して、監査が常に適切に機能するようにする必要があります。