2009-08-03 5 views
9

私は1台のクライアントコンピュータと5台のサーバーボックスがマシンサブネット上で通信するマシンコントロールアプリケーションを持っています。ドメインコントローラはありません。信頼性とトランザクションのサポートを可能にするためにnetTcpBindingを使用したいと思います。Windows資格情報を持たないnetTcpBinding?

ドメインコントローラが存在しない場合、このバインディングでユーザー名/パスワード認証を使用できますか。オフィスLANに接続されない900台のコンピューター(150台のコンピューター)で証明書を管理したくないので、証明書を使用しないことをお勧めします。

答えて

10

はい、メッセージセキュリティ(トランスポートセキュリティではなく)を使用する場合のみです。そのようなあなたのバインディング設定を定義します。その後、

<netTcpBinding> 
    <binding name="UserNameSecurity"> 
     <security mode="Message"> 
     <message clientCredentialType="UserName"/> 
     </security> 
    </binding> 
    </netTcpBinding> 

と(サーバーおよびクライアント上の)あなたのエンドポイントでそのバインディング設定を参照:

<endpoint address="....." 
      binding="netTcpBinding" 
      bindingConfiguration="UserNameSecurity" 
      contract="IMyService" /> 

マルク・

UPDATE:
ああ、はい、サーバー側では、サービスを呼び出すクライアントに対してサービスを認証するための証明書が必要になります。また、メッセージを暗号化+署名するためにも使用されます。これはサーバ上のみです。クライアントは何もインストールする必要はありません。

構成:

<behaviors> 
    <serviceBehavior> 
    <behavior name="ServerInternet"> 
     <serviceCredentials> 
     <serviceCertificate 
      findValue="MyServiceCertificate" 
      storeLocation="LocalMachine" 
      storeName="My" 
      x509FindType="FindBySubjectName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehavior> 
</behaviors> 
<services> 
    <service name="MyServiceInternet" 
      behaviorConfiguration="ServerInternet"> 
    .... 
    </service> 
</services> 

は、あなたの設定で指定した「サブジェクト名」の下で、サーバーの「ローカルマシン」フォルダにサーバーの証明書をインストールしてください。

+0

これは私が元々持っていたものです。しかし、サービス証明書を要求する例外が表示されます。「サービス証明書が提供されていません。ServiceCredentialsでサービス証明書を指定してください」 アイデアはありますか? –

+0

Hmmm。それは私が疑ったものです。それを確認していただきありがとうございます。 –

+0

このアプローチでは、本番環境で自己署名証明書を使用することに何らかの害がありますか?それがメッセージを暗号化するためにのみ使用されているが、アイデンティティを確認するためではない場合メッセージ暗号化のために自己署名証明書を使用しないのはいつですか? – Vitalik

0

最初に試すことができるものがあります。 ServiceNegotiationCredentialsをtrueに設定します。

<message negotiateServiceCredential="true"/> 

これにより、ドメインコントローラなしでクライアントとサービスの間で安全な会話が作成されます。

ただし、ドメインコントローラがない場合、クライアントはサービスを信頼しないため、失敗します。

したがって、予想されるidentity of the serviceを設定する必要があります。これはサービスのWSDLで見つけることができます。あなたは、IISでホストされている場合、デフォルトでは、あるように思わ:

<client> 
    <endpoint> 
     <identity> 
      <servicePrincipalName value="host/NETWORKSERVICE"></servicePrincipalName> 
     </identity> 
    </endpoint> 
</client> 

私はあなたがそれを必要としないと思うが、多分あなたはサービス側で匿名ログオンを許可する必要があります:

<serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
      <windowsAuthentication allowAnonymousLogons="true"/> 
     </serviceCredentials> 
    </behavior> 
</serviceBehaviors> 
+1

ありがとうございます。私は、negotiateServiceCredentialがnetTcpBindingのために存在しないと思います。それは(比較的)まっすぐ進むと思われるので、私は証明書のパスをたどるだろう。 –

関連する問題