WCF 证书身份验证适用于所有客户端证书

问题描述 投票:0回答:1

我遵循并研究了许多在线教程来创建 WCF 服务,该服务使用证书身份验证来对使用证书连接到我们的 WCF 服务的客户端进行身份验证。

所以,当我测试这个时:

  • 我尝试通过网络浏览器连接到我们的服务
  • 浏览器要求提供证书
  • 我选择我的自签名证书
  • 我得到了我的 WSDL 页面 这意味着它有效。

我遇到的问题是,如果我再次测试它并选择我拥有的任何其他证书,它也可以工作。无论我选择什么证书,我始终能够访问 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>
  • 在 Azure 上,我已在证书下安装了我的自签名证书。
  • 在 Azure 上,我设置了环境变量 WEBSITE_LOAD_CERTIFICATES,其值是我的自签名证书的指纹

那么,为什么我通过浏览器访问端点时能够选择随机证书?

我的期望是只有我的自签名证书才能访问我的服务。

wcf azure-web-app-service client-certificates
1个回答
0
投票

您可以使用证书的编码来验证它。因为每个证书的编码都是唯一的。

客户端配置文件加入这段代码:

<client>
    <endpoint address="..."
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1"
        contract="ServiceReference1.IService1" name="WSHttpBinding_IService1" behaviorConfiguration="Service1Nehavior">
        <identity>
            <certificate encodedValue="..."
/>
            </identity>
        </endpoint>
    </client>

:这里的值是你的证书的编码值。如果有差异,则无法完成验证。

© www.soinside.com 2019 - 2024. All rights reserved.