2009-04-23 29 views
6

データベースに対して何らかのユーザー認証が必要なクライアント/サーバーWCFアプリケーションがあります。アプリケーション(クライアントとサーバーの両方)は、イントラネット上で使用するために数十の顧客に販売されるように開発されています。私たちは、認証の過程を除いて、ほとんどのデータを暗号化してデータを暗号化することを心配していません。WCF、セキュリティと証明書

WCFのセキュリティについて考えると、私はx509証明書を使用するべきであるという考えに戻っていきます。ただし、お客様は、これらの証明書を申請し、購入し、インストールする必要があることの詳細については絶対に知りたくありません。

このシナリオでは、まず、ユーザー名とパスワードの認証を実装する方法を教えてください。証明書を使用する必要がある場合は、顧客が信頼できるCAから独自の証明書を申請する必要がありますか、またはソフトウェアプロバイダが顧客が使用する証明書を生成することはできますか?

本当に私は顧客との摩擦を最小にして、ベストプラクティスを探しています。

ありがとうございます!

編集:私はNetTcpBindingを使用しています。私のサーバーはWindowsサービスとして動作しています。

答えて

5

ユーザー名とパスワードにはクライアント証明書は必要ありません。わかっていると思いますが、WCFサービスをホストしているサーバーにはHTTPS証明書が必要です。標準のユーザー名/パスワードauthビット(WCFでは、HTTPSを使用しないメッセージベースの認証は許可されません)。

クライアント証明書のルートを控えておきたい場合は、否認防止の利点があります。マシンの送信は、それが誰であるかを確かめることができます(証明書を盗んだ場合を除きますユーザー名とパスワードの組み合わせについての情報があります)。ソフトウェアプロバイダが独自の認証局として機能し、独自のクライアント証明書を生成することができます(インフラストラクチャに応じてこれを行う方法はいくつかあります)が、ルートCAを信頼するようにクライアントを設定する必要があります。サーバとクライアントがドメイン環境で実行している場合

あなたはtransport security with Windows authentication(あなたは、TCPバインディング使用しているので、相互運用性は、とにかく窓の外です!)を使用することができ、これに追加ボーナスがあり、認証が透明であり、あなたがドン」どこでも証明書が必要です。サーバーのIDを確認したい場合は、message security with Windows authenticationがそのトリックを行います。

+0

ありがとうございました!私が言及することを忘れた何かは、NetTcpBindingを使用しているということです。また、サーバーは、証明書に関する私の問題の主な原因である複数の顧客にも展開されていることに注意してください。 – chris

+0

OK回答を – blowdart

1

ファイアウォールの境界を越える場合は、証明書が最適なソリューションになります。証明書やアプリケーションのアプリケーションに関する詳細についてはあまりよく分かりません。残念ながら、私が知る限り、私はあなたが証明書を申請する手助けをしなければならないと思います。あるいは、自分の証明書サーバーをインストールする過程で自分の責任を果たさなければなりません。アプリケーションが内部にある場合、Windows認証は非常に簡単ですが、クライアントにファイアウォールの境界を越えたアプリケーションを持っていると思うなら、証明書はどこでも使えるので、証明書を使う際に時間を費やすかもしれません。現在、認証の許可を別のエンティティに委任するフェデレーションセキュリティと呼ばれるものがあります。私はこれがあなたがドメインを持っていると言い、許可を委任したいと思うのは、あなたのドメインに自分のドメインではない他のドメインの誰かが言っているが、その非常に複雑で、証明書は行く方法です。

は、セキュリティは、私はあなたのシナリオに類似している生産のプロジェクトを持っている簡単:)

2

ことになっていません。 netTCPBinding経由でエンドポイントをホストするWindowsサービスがあり、x509証明書を使用しています...私の場合は、信頼できないセキュリティ境界を超えているため、トランスポート層とメッセージ層の両方を暗号化します。私は、証明書の提示以外の認証/認可の提供にはあまり関心がありませんでした。

私は想定しているイントラネットのシナリオと同じように、私はインストール時にサーバーとクライアントマシンに対する権限を持っていました...または少なくともインストール条件の一部を指示する可能性があります。

x509証明書を購入し、その費用をクライアントに負担させるのではなく、私は自分自身をロールバックすることにしました。 Win2003サーバーの1台をCAとして設定し、独自の証明機関証明書を発行します。次に、サーバー用のx509証明書とクライアント用のx509証明書を作成しました。

クライアントとサーバーの両方の証明書は、コンピュータレベルの個人用ユーザーストアにクライアントとサーバーの両方に(必要に応じて)インストールされています。また、CA証明書を信頼されたルート証明機関のセクションに直接インストールし、クライアント証明書とサーバー証明書を信頼できるようにしました。

私は認証/認可にあまり関心がなかったので、個々のユーザーにバインドする証明書を処理し、マシンレベルより細かく処理するためのベストプラクティスとして推奨するものはわかりません(私のソリューションはWindowsサービスサービス通信 - 完全に無人)。私は証明書MMCの個人的なユーザーストアにインストールする、各ユーザーの証明書が必要だと思います。ランタイム実装は、WCFを構成して証明書ルックアップを行う方法によってガイドされるので、かなり簡単に行う必要があります。

この偉大なCodeProjectの記事:Securing WCF Services with Certificatesから学んだことに、私は大いに頼っていました。これは、証明書の生成/インストールをお手伝いします。サンプルのWCFアプリケーションはIISでホストされていますが、web.configの設定セクションをapp.configに変換するのはかなり簡単でした。

私の場合、Win2003の証明書を要求するためのWebインターフェイスがWeb自体に公開されているため、クライアントは将来証明書を直接要求できます。承認管理があるので、うまく機能します。私はまだ新しい証明書を生成する必要はありませんでしたので、どれだけの摩擦が伴うかは言えません。

+0

ありがとうございましたCodeProjectリンクありがとうございます。 –

関連する問題