クライアント マシンにクライアント証明書をインストールする必要がない NetTcpBinding で WCF SSL を使用する方法はありますか? (私が間違っていなければSSL V2)。
サーバー証明書が認証のためにクライアントの信頼できるストアにあり、そのメッセージをサーバーの公開鍵で暗号化する必要があります。つまり、サーバー マシンだけが秘密鍵証明書を保持します。
両側で customBinding ではなく NetTcpBinding を使用しています。それができる場合、それの正しい構成は何ですか? (クライアントとサーバーの構成上)
前もって感謝します。
これが私のwcf構成です。
サーバー構成:
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="TcpSecureBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceCredentialsBehavior">
<serviceDebug includeExceptionDetailInFaults="True" />
<serviceMetadata httpGetEnabled="true" />
<serviceAuthorization
principalPermissionMode="UseWindowsGroups">
</serviceAuthorization>
<serviceCredentials>
<windowsAuthentication includeWindowsGruops="true"
allowAnonymousLogons="false"/>
<clientCertificate>
<authentication certificateValidationMode="none"/>
</clientCertificate>
<serverCertificate
findValue="thumbprint"
storelocation="LocalMachine"
x509FindType="FindMyThumbprint"
storeName="My"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceCredentialsBehavior"
name="ServiceModel.Calculator">
<endpoint address="net.tcp://localhost:8040/Calculator"
binding="netTcpBinding"
bindingConfiguration="TcpSecureBinding"
contract="ServiceModel.ICalculator" >
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
クライアント構成:
<configuration>
<system.serviceModel>
<client>
<endpoint address="net.tcp://localhost:8040/Calculator"
behaviorConfiguration="endpointCredentialBehavior"
binding="netTcpBinding"
bindingConfiguration="Binding1"
contract="ServiceModel.ICalculator">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="endpointCredentialBehavior">
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="Binding1">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
</configuration>
現在のサーバーとクライアントの構成を追加しています。別の質問:
認証レベルでは、クライアントにサーバーの証明書を認証させたいのですが (サーバーの公開鍵は trustedPeople ストアにある必要があると思います)、これは可能ですか?
Transport Security と Message のどちらを使用することをお勧めしますか?
クライアントとサーバーを NTLM (clientCredentialType=Windows) で認証したい場合、サーバーの証明書認証に加えて行うことができますか、それともそのうちの 1 つだけを適用できますか? これまで、NTLM 認証を使用してきました。
現在、例外が発生しています:「要求されたアップグレードは、「net.tcp://servername:8040/ **」ではサポートされていません。これは、バインディングの不一致が原因である可能性があります(たとえば、サーバーではなくクライアントでセキュリティが有効になっているなど) ." クライアントが Windows セキュリティと OM 証明書のサーバーを使用しているためにこのエラーが発生したことは理解していますが、クライアント セキュリティを証明書に変更すると、「クライアント証明書が提供されていません」というエラーが表示されます。しかし、私はクライアントの証明書を設定したくありません。それが私の主な問題の一部です。
サーバーの証明書認証にこのタグを使用できることを読みました。
<identity> <certificate encodedValue="encoded certificate"/> </identity>
しかし、この ID による認証は、クライアントのストア (trustedPeople) でサーバーの公開鍵を検索することによって証明書の識別を実行することを好む場合、エンコードされた証明書によって行われると思います。この情報は本当ですか?このアイデンティティのタグは、クライアントの信頼できるストアで公開鍵を検索する代わりに使用できますか?
このマナーでお手伝いできることを願っています。ありがとうございます。