これは共通の問題であるように思われ、私はここですべての答えを見ましたが、どれも助けにはなりませんでした。
SSLをiisでホストされているbasichttpbindingおよびWCFサービスで動作させるようにしています。問題はIISまたは証明書にあると思います。 iisマネージャーで自己署名証明書を作成しました。私の証明書は「mycomputer」と呼ばれ、信頼されたルート証明書にも配置されています。クライアントは証明書を見つけるのに問題はありません。
Iisでの私の設定は、匿名認証を有効にし、その他はすべて無効にすることです。また、SSLを要求し、クライアント証明書を受け入れます。あれは正しいですか?無視するとエラーになります。
私の設定で何も問題がありません、これらは正しいですか?
サービス構成:
<system.serviceModel>
<services>
<service behaviorConfiguration="MyBehaviour" name="BasicHttpSecTest.Service1">
<endpoint name="MyEndPoint" address="https://mycomputer/wp/" binding="basicHttpBinding" bindingConfiguration="ClientCertificateTransportSecurity" contract="BasicHttpSecTest.IService1" />
<!--<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />-->
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehaviour">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck"/>
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="ClientCertificateTransportSecurity">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
クライアント構成:
<system.serviceModel>
<client>
<endpoint address="https://mycomputer/wp/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="MyEndPoint" contract="ServiceSSLref.IService1"
name="MyEndPoint1" behaviorConfiguration="ClientCertificateCredential"/>
</client>
<bindings>
<basicHttpBinding>
<binding name="MyEndPoint">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="ClientCertificateCredential">
<clientCredentials>
<clientCertificate findValue="mycomputer" storeLocation="LocalMachine" storeName="My" x509FindType="FindByIssuerName" />
<serviceCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
あなたの問題はクライアント証明書にあるのではないでしょうか。 clientCredentialType = "Certificate"を設定すると、クライアントはサーバーが信頼する証明書を指定する必要があることをWCFに伝えます。私が理解したように、サーバー側で生成された証明書しかありません。設定してみてください
<transport clientCredentialType="None" />
これにより、サーバーが信頼する証明書を必要とせずにメッセージを送信できます。または、クライアント側で証明書を生成して、サーバーの信頼済みフォルダーに配置することもできます。多分この状態はあなたを助けるでしょう http://msdn.Microsoft.com/en-us/library/ms731074.aspx