0

WCFサービスは、「トランスポートセキュリティ」+「証明書認証」を使用して、「クライアント証明書」をクライアント側にインストールせずにセットアップできることを理解していますか?

私のシナリオは次のようになります。

  • リモートサーバー上のWCFサービス
  • Windowsフォームクライアントは、数百人のユーザーに出荷される可能性があります((DBに対して)ユーザーを認証し、WCFサービスメソッドを介してアクションを実行します)

メッセージをSSLで暗号化したいので、「トランスポート」方式を選択しました。サーバー証明書も必要だと思います。

上記のすべてを私に与えたウォークスルーに従いましたが、クライアント証明書をインストールする必要がありましたか?このWindowsフォームアプリをクライアントに出荷している場合、これを要求するように強制された場合、クライアントはどのように証明書をインストールできますか?ユーザーのマシンに証明書をインストールすることは非常に大きな質問になると思うので、ここで大きなポイントを見逃しているようです。

PS。私がここで読んでいることから、私は手元のタスクを過度に複雑にしている可能性がありますか?WebサーバーにSSL証明書をインストールし、HTTPS経由でWCFサービスにアクセスするだけで、basicHttpBindingを使用できる可能性がありますか?事実上、「証明書認証」メカニズムについて心配する必要はありませんか?

4

2 に答える 2

1

クライアント証明書は必要ありません。単純に ssl です。IIS を使用してサービスをホストしている場合、これは簡単です。証明書をインストールするだけです。メッセージ レベルのセキュリティは少し複雑ですが、ssl 証明書については問題ありません。

basicHttpBinding を使用する場合、認証をシャットオフする必要はありません。デフォルトでは、WSHttpBinding はメッセージ レベルの認証をオンにします。これは、認証モード (私が信じている) を none に設定することで Web 構成でシャットオフできます。SSL のみが必要な場合は、basic を使用してください。SSL とおそらく Windows 認証が必要な場合は、WSHttpBinding を使用します。

于 2009-05-08T01:10:46.623 に答える
1

ジョシュアが言ったように、ユーザー名を使用してクライアントを認証する場合、クライアント証明書は必要ありません。このシナリオでは、クライアントはユーザー名とパスワードを渡し、サーバーは相互認証/ハンドシェイク プロセス用の証明書を提供します。

私は最近、同様のシステム (win form over www) 用に wcf セキュリティ システムをセットアップしました。CodePlexからのガイダンスを使用しました。すべての手順に従う必要はありません。たとえば、ロール機能は使用していませんが、メンバーシップ ストアを使用しています。

以下は、ユーザー名とサーバー証明書を使用した wsHttpBinding のセットアップ/構成の簡単な要約です。

クライアント構成:

      <security mode="Message">
        <message clientCredentialType="UserName" negotiateServiceCredential="true"
          algorithmSuite="Default" establishSecurityContext="false" />
      </security>

プロキシに設定されたユーザー名パスワード:

'ClientCredentials added to service call for authentication
    objServiceClient.ClientCredentials.UserName.UserName = MyAppContext.Username
    objServiceClient.ClientCredentials.UserName.Password = MyAppContext.Password

サーバー構成:

  • バインディング:

            <wsHttpBinding>
            <binding name="MyApp.wsHttpBindingMessageUname">
                <security mode="Message">
                    <message clientCredentialType="UserName" negotiateServiceCredential="true"
                      establishSecurityContext="false" />
                </security>
            </binding>
            </wsHttpBinding>
    
  • 行動:

            <serviceBehaviors>
            <behavior name="MyApp.DefaultServiceBehavior">
                <serviceCredentials>
                    <serviceCertificate findValue="localhost" storeLocation="LocalMachine"
                     storeName="My" x509FindType="FindBySubjectName" />
                    <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
                     membershipProviderName="AspNetSqlMembershipProvider" />
                </serviceCredentials>
            </behavior>
        </serviceBehaviors>
    

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2009-05-08T09:49:03.850 に答える