我正在为用户设置使用客户端证书登录的支持。不幸的是,IIS 拒绝承认任何未链接到已安装 CA 的证书(请参阅本文)。
由于该功能仅为用户的方便而实施,因此允许任何客户端证书会很棒。有没有办法做到这一点?
我的服务器正在运行 Windows Server 2003 和 IIS 6,但在本地运行的 IIS 7 上的行为没有什么不同。如果可以自定义 IIS 7 以支持任何客户端证书,我将能够进行更改(鉴于没有可用的 IIS 6 解决方案)。
我认为正常的方法是让您向他们颁发证书,然后让您设置 IIS 以接受您的证书作为根。
实现这个类:
public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy
{
public TrustAllCertificatePolicy() {}
public bool CheckValidationResult(ServicePoint sp, X509Certificate cert,WebRequest req, int problem)
{
return true;
}
}
使用以下代码行设置它。之后任何证书,无论是否过期、名称不匹配等都将被接受。
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
我认为您可以通过命令添加新的根CA 证书certmgr
certmgr --add -c -m Trust <CA_cert_DER_fmt>
注意:与 UNIX 不同,Windows同时管理所有应用程序的证书,这可能会产生安全隐患,因此请注意
WCF 允许您编写自定义 X.509 证书处理程序。在代码中,您可以进行一些检查,例如将指纹与数据库中的已知值进行比较。