X509証明書で識別された単一のクライアントのみを受け入れるようにWCFサービスを構成する方法

StackOverflow https://stackoverflow.com/questions/2276594

質問

2つのマシン間の安全な通信に依存しているWCFクライアント/サービスアプリがあり、証明書ストアにインストールされたX509証明書を使用してサーバーとクライアントを識別したいと考えています。私はこれを行います <security authenticationMode="MutualCertificate"/>. 。クライアントマシンのみがあります。

サーバーには、server.mydomain.comに発行された証明書がローカルコンピューター/パーソナルストアにインストールされており、クライアントは同じ場所にインストールされているclient.mydomain.comに発行された証明書を持っています。これに加えて、サーバーはローカルコンピューター/信頼できる人にクライアントの公開証明書を持ち、クライアントはローカルコンピューター/信頼できる人にサーバーの公開証明書を持っています。

最後に、クライアントはサーバーの証明書を確認するように構成されています。私はこれを使用してこれを行いました system.servicemodel/behaviors/endpointBehaviors/clientCredentials/serviceCertificate/defaultCertificate 構成ファイルの要素。

これまでのところ、これはすべてうまくいきます。私の問題は、サーバーの構成ファイルで、信頼できるPeople証明書ストアからのMydomain.com証明書を識別するクライアントのみが接続を許可されていることをサーバーの構成ファイルで指定したいということです。

正しい情報はサーバーで利用可能です ServiceSecurityContext, 、しかし、私はapp.configで、コードからセキュリティコンテキストをチェックする必要があるのではなく、このチェックを行う必要があることをapp.configで指定する方法を探しています。

それは可能ですか?どんなヒントも感謝しています。

ちなみに、私のサーバーの構成ファイルはこれまでのところ次のようになります。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="MyServer.Server" behaviorConfiguration="CertificateBehavior">
        <endpoint contract="Contracts.IMyService" binding="customBinding" bindingConfiguration="SecureConfig">
        </endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost/SecureWcf"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CertificateBehavior">
          <serviceCredentials>
            <serviceCertificate storeLocation="LocalMachine" x509FindType="FindBySubjectName" findValue="server.mydomain.com"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <customBinding>
        <binding name="SecureConfig">
          <security authenticationMode="MutualCertificate"/>
          <httpTransport/>
        </binding>
      </customBinding>
    </bindings>
  </system.serviceModel>
</configuration>
役に立ちましたか?

解決

web.configを使用してやりたいことをする方法はないようです。

このタグで動作を追加することになりました。

<clientCertificate>
  <authentication certificateValidationMode="PeerTrust" trustedStoreLocation="CurrentUser" revocationMode="NoCheck"/>
</clientCertificate>

次に、サーバーが実行するユーザーの「信頼できる人」証明書ストアにクライアントの証明書を追加します。

他のヒント

をチェックしてください WCFセキュリティガイダンス CodePlexのページ - 優れた非常に便利なもの!

特に、ハウツー、さらには具体的には

方法 - WINDOWSフォームからのWCF通話で証明書認証とメッセージセキュリティを使用する

クライアントが有効な証明書を提示する必要があるWCFサービスをセットアップする方法と、それを確認する方法を詳細に説明しています。単一のクライアントのみを許可する場合は、その証明書を1つのクライアントに特にのみ展開します。

お役に立てれば!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top