在WCF服务自定义证书验证(Custom certificate validation in WCF

2019-07-23 01:44发布

我要检查客户端证书,在我的WCF服务。

我的目标是只允许与特定的指纹证书的客户端能够与我的服务进行通信。

我的WCF服务托管在IIS中,我使用basicHttpBinding的和安全模式=“运输”与凭据类型“证书”。 IIS要求客户端证书与服务的通信。

预先感谢帮助。

更新:我的配置:

<basicHttpBinding>
<binding 
             name="testBinding"
         maxReceivedMessageSize="2147483647">
         <readerQuotas 
                    maxDepth="2147483647"
                maxStringContentLength="2147483647"
                maxArrayLength="2147483647"
                maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647" />
 <security mode="Transport">
              <transport clientCredentialType="Certificate"/> 
             </security>

</binding>
</basicHttpBinding>

行为:

<serviceBehaviors>
    <behavior name="SomeServiceBehavior">
      <serviceMetadata httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceCredentials>
        <clientCertificate>
          <authentication certificateValidationMode="Custom" customCertificateValidatorType="SomeService.CustomCertificateValidator,SomeService"  />
        </clientCertificate>
      </serviceCredentials>         
     </behavior> 
   </serviceBehaviors>

服务配置:

<service 
               behaviorConfiguration="SomeServiceBehavior"
               name="SomeService">
        <endpoint 
                  address=""
                  binding="basicHttpBinding"
                  bindingConfiguration="testBinding"
                  contract="ISomeService">
        </endpoint>
      </service>

而对于测试的目的,我实现这种方式验证:

public class CustomCertificateValidator : X509CertificateValidator
    {
        public override void Validate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate)
        {                
            throw new SecurityTokenValidationException("TEST Certificate was not issued by a trusted issuer TEST");
        }
    }

这是行不通的。 我可以用任何有效证件连接到我的服务。

Answer 1:

您可以从X509CertificateValidator派生的类,并用它做传入证书的自定义验证。 如果你想验证失败出于某种原因抛出SecurityTokenValidationException。

在certificateValidationMode设置为自定义,并在配置文件中则ClientCertificate服务行为部分指定您的验证。

如何创建它采用的自定义证书验证服务



Answer 2:

我不认为有反正有“自定义证书验证”与“交通运输安全”。 它仅适用于“信息安全”。



Answer 3:

是的,你可以使用basicHttpBinding的安全设置为运输和你需要挂钩到ServiceHost的创作IIS -看到自定义服务主机 。 如果您创建自定义配置部分定义的验证标准列表,你应该能够验证指纹值,证书或任何其它数据。

上述所有的实施示例代码是从下载的代码可用此CodeProject上artticle 。



文章来源: Custom certificate validation in WCF service