証明書に基づいて、トランスポート セキュリティ認証のプロセスを理解しようとしています。8732 ポートで開かれた https を使用して、次の構成でサービスを作成しているとします。
<wsHttpBinding>
<binding name="SecurityTest">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
<service name="MyNamespace.MyService">
<host>
<baseAddresses>
<add baseAddress="https://localhost:8732/MyService/" />
</baseAddresses>
</host>
<endpoint
address=""
binding="wsHttpBinding" bindingConfiguration="SecurityTest"
contract="MyNamespace.IContract" >
</endpoint>
</service>
次に、新しい証明書を作成できるように、ルート機関の自己署名証明書を作成します。
makecert -n "CN=MyAuthority" -r -sv MyAuthority.pvk MyAuthority.cer -sky exchange
MyAuthority.cer
次に、ローカル マシンの「ルート」カタログに追加します。この後、MyAuthority 証明書を使用して別の証明書を作成し、ローカル マシンの「My」カタログに配置します。
makecert -sky exchange -sk local -iv MyAuthority.pvk -n "CN=local" -ic MyAuthority.cer local.cer -sr Localmachine -ss My
次に、netsh を使用して local.cer 証明書を 8732 ポートにバインドします。
netsh http add sslcert ipport=0.0.0.0:8732 certhash=02b751d7f71423c27141c9c385fc3d3976 d7 aa b5 appid={C4BFC5DC-2636-495B-9803-8DD8257C92C3}
サーバーサービス側が出来上がり、起動して動きます。次に、クライアントを作成します。
<bindings>
<wsHttpBinding>
<binding name="SecurityTest" >
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint name="testPoint"
address="https://localhost:8732/MyService/"
binding="wsHttpBinding" bindingConfiguration="SecurityTest"
behaviorConfiguration="ep"
contract="MyNamespace.IContract">
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="ep" >
<clientCredentials>
<clientCertificate findValue="local"
storeLocation="CurrentUser" storeName="My"
x509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
それを開始してサービス メソッドを使用すると、エラーが発生します。
MessageSecurityException: リモート コンピューターから資格情報で保護された WCF サービスにアクセスするときに、クライアント認証スキーム 'Anonymous' で HTTP 要求が禁止されました
このスキームのすべてをよく理解しているかどうかを尋ね、このエラーを解決する方法についてアドバイスを得ることができます。
サービスは local.cer を使用してトランスポート レベルでメッセージを暗号化しますか?
MyAuthority.cer
クライアントが個人的な検証ハンドラーを作成せずにメッセージを復号化できるようにするには、各クライアント コンピューターの信頼できる公開カタログに追加する必要がありますか?現在の例のクライアントは、資格情報として local.cer を使用しており、この証明書はサービス側に送信されますか?
サーバー側はクライアント証明書をどのように処理しますか? MyAuthority.cer によって署名されているかどうかを確認しますか、それとも ssl 証明書で確認しますか? 証明書のチェック対象を確認するにはどうすればよいですか?
エラーが発生するのはなぜですか?
前もって感謝します