我有一个WCF服务,我需要一个自定义SSL验证器用于客户端证书。但是,当我尝试告诉我的服务使用哪个类时,我会得到一个TypeLoadException
说:
无法从程序集“ConnectorExtras”加载“ConnectorExtras.Validator”类型。
以下是引用该类的Web.Config部分。
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="Custom"
customCertificateValidatorType="ConnectorExtras.Validator, ConnectorExtras" />
</clientCertificate>
</serviceCredentials>
我知道该部分是问题所在,因为如果我在配置文件中省略了程序集名称, ConnectorExtras
,则错误会更改为
无法从程序集'System.ServiceModel,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'加载类型'ConnectorExtras.Validator'。
这是我的Validator类。代码位于网站上的~\App_Code\Validator.cs
。
using System.IdentityModel.Selectors;
using System.IdentityModel.Tokens;
using System.Security.Cryptography.X509Certificates;
using ConnectorExtras.App_GlobalResources;
namespace ConnectorExtras
{
public class Validator : X509CertificateValidator
{
public Validator()
{
_certToCompare = new X509Certificate(ValidatorResources.TestCert, "a");
}
private readonly X509Certificate _certToCompare;
public override void Validate(X509Certificate2 certificate)
{
if(certificate.Equals(_certToCompare) == false)
throw new SecurityTokenValidationException();
}
}
}
但是如果我在构造函数中放置一个断点,它就永远不会被击中。
使用验证器进行自定义证书验证需要做什么?