我遵循并研究了许多在线教程来创建 WCF 服务,该服务使用证书身份验证来对使用证书连接到我们的 WCF 服务的客户端进行身份验证。
所以,当我测试这个时:
我遇到的问题是,如果我再次测试它并选择我拥有的任何其他证书,它也可以工作。无论我选择什么证书,我始终能够访问 WSDL。
我的服务作为 Web 应用程序在 Azure 上运行。 以下是我的服务配置。
绑定
<wsHttpBinding>
<binding name="wsCertBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
行为
<behavior name="certificateServiceBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerTrust" />
</clientCertificate>
<serviceCertificate findValue="THUMBPRINT-SELF_SIGNED_CERT"
storeLocation="CurrentUser"
storeName="My"
x509FindType="FindByThumbprint"/>
</serviceCredentials>
</behavior>
那么,为什么我通过浏览器访问端点时能够选择随机证书?
我的期望是只有我的自签名证书才能访问我的服务。
您可以使用证书的编码来验证它。因为每个证书的编码都是唯一的。
客户端配置文件加入这段代码:
<client>
<endpoint address="..."
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1"
contract="ServiceReference1.IService1" name="WSHttpBinding_IService1" behaviorConfiguration="Service1Nehavior">
<identity>
<certificate encodedValue="..."
/>
</identity>
</endpoint>
</client>