x509 証明書を使用して、リッチ クライアントからインターネット経由で安全な WCF Web サービスへの安全なメッセージ レベル認証を取得する必要があります。
具体的には、「dev」証明書の作成、インストール、本番用の「実際の」証明書の取得など、セットアップ、構成、コーディング、および展開に関する実用的なステップバイステップガイドを探しています。
次の手順は、開始するためのガイドです。
1) まず、クライアントとサーバーの証明書を生成するためのルート認証局が必要です。外部機関プロバイダ (Verisign など) を使用するか、Microsoft Certificate Server などを使用して独自に生成することができます。
開発ルート認証局証明書を生成するには、Visual Studio に付属の「makecert」ツールを使用できます。
makecert -n "CN=MyRootCA" -r -sv RootCA.pvk RootCA.cer
2) 次に、クライアント証明書とサーバー証明書を要求/生成する必要があります。どちらの種類の証明書もローカル マシンの証明書としてインストールでき、両方とも同じルート認証局を使用して署名する必要があります。などの Microsoft Certificate Server の Web インターフェイスからクライアント証明書を要求できますhttp://mycertserver/certsrv
。
各マシンの開発クライアント証明書を生成するには、「makecert」を再度使用できます。クライアント証明書は、手順 1 で作成した開発ルート認証局証明書で署名されていることに注意してください。
makecert -pe -n "CN=MyCert" -ss my -sky exchange -sk MyCert
-iv MyRootCA.pvk -ic MyRootCA.cer -sr localmachine MyCert.cer
これにより、コマンドが実行されているマシンのローカル コンピューター ストアの個人証明書フォルダーに証明書がインストールされます。
サーバーがクライアント証明書を信頼できるようにするには、サーバーの信頼されたルート証明機関ストアに開発ルート証明機関証明書をインストールする必要があります (これを行うには、mmc 証明書スナップインを使用します)。クライアントには、独自の証明書を信頼できるように、同じ方法でルート証明書もインストールする必要があります。
3) 証明書 (web.config など) を使用してクライアント認証を要求するように WCF サービスを構成します。
<services>
<service
name="TestService"
behaviorConfiguration="wsHttpCertificateBehavior">
<endpoint name="TestEndPoint"
address=""
binding="wsHttpBinding"
bindingConfiguration="wsHttpEndpointBinding"
contract="TestService.IMyContract">
<identity>
<dns value=""/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndpointBinding">
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<behavior name="wsHttpCertificateBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
<serviceCredentials>
<clientCertificate>
<authentication
certificateValidationMode="PeerOrChainTrust"
revocationMode="NoCheck"/>
</clientCertificate>
<serverCertificate findValue="CN=MyCert"/>
</serviceCredentials>
</behavior>
</behaviors>
4) 次に、呼び出し元を構成します (たとえば、app.config を介して)。
<client>
<endpoint name="wsHttpBinding"
address="https://localhost/TestService/TestService.svc"
binding="wsHttpBinding"
bindingConfiguration="wsHttpBinding"
behaviorConfiguration="wsHttpCertificateBehavior"
contract="TestService.IMyContract">
<identity>
<dns value="MyCert"/>
</identity>
</endpoint>
</client>
<bindings>
<wsHttpBinding>
<binding name="wsHttpBinding">
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="wsHttpCertificateBehavior">
<clientCredentials>
<clientCertificate findValue="MyCert" storeLocation="LocalMachine"/>
<serviceCertificate>
<authentication
certificateValidationMode="PeerOrChainTrust"
revocationMode="NoCheck"
trustedStoreLocation="LocalMachine"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
MicrosoftのWCFセキュリティガイダンスを読むことをお勧めします
これは、このシナリオだけでなく、他の多くのシナリオを扱います