Iis 接受来自任何CA的客户端证书

Iis 接受来自任何CA的客户端证书,iis,ssl,iis-6,Iis,Ssl,Iis 6,我正在设置对用户使用客户端证书登录的支持。不幸的是,IIS拒绝确认任何未链接到已安装CA()的证书 由于该功能的实现只是为了方便用户,所以最好允许使用任何客户端证书。有没有办法做到这一点 我的服务器正在运行Windows server 2003和IIS 6,但在本地运行的IIS 7上,行为没有什么不同。如果可以自定义IIS 7以支持任何客户端证书,我将能够进行更改(假设没有针对IIS 6的解决方案可用)。我认为通常的方法是您向他们颁发证书,然后,您可以设置IIS以接受您的证书作为根。我认为您可以

我正在设置对用户使用客户端证书登录的支持。不幸的是,IIS拒绝确认任何未链接到已安装CA()的证书

由于该功能的实现只是为了方便用户,所以最好允许使用任何客户端证书。有没有办法做到这一点


我的服务器正在运行Windows server 2003和IIS 6,但在本地运行的IIS 7上,行为没有什么不同。如果可以自定义IIS 7以支持任何客户端证书,我将能够进行更改(假设没有针对IIS 6的解决方案可用)。

我认为通常的方法是您向他们颁发证书,然后,您可以设置IIS以接受您的证书作为根。

我认为您可以通过
certmgr
命令添加新的根CA证书

certmgr --add -c -m Trust <CA_cert_DER_fmt>
certmgr--add-c-m信任
注意:与Unix不同,Windows同时管理所有应用程序的证书,这可能会带来安全隐患,因此请注意,WCF允许您编写证书。在代码中,您可以执行一些检查,例如将指纹与数据库中的已知值进行比较。

实现此类:

    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();

这是许多网站正在做的事情,但我认为这不应该是必要的(可能是必要的)。只是澄清一下,您确实不能接受SSL下的任何客户端证书,因为客户端证书交换是SSL握手的一部分(对于任何web服务器,您不能/不应该更改这一点).AFAIK浏览器将允许用户在握手中未发送可接受CA列表的情况下选择任何证书。在Apache中,这是通过SSLNoCAList属性指定的,因此在技术上是可能的。问题是是否可以使用IIS.AFAIK,SSLNoCAList无法完成您的问题。说浏览器将选择任何证书,并不等于说服务器将接受任何未链接到已安装根目录的客户端证书。请澄清您真正询问的“任何”的3个概念中的哪一个。1)。服务器接受任何证书(包括自签名证书或同等证书,但您必须问,“为什么这么麻烦”)。2). 您需要的是与Apache的SSLNoCAList等效的,或3)。您希望IIS能够接受链接到您选择的任何一组根CA的客户端证书。您能否解释一下,如果您不关心谁正在登录,为什么会有“登录”过程?关于我对您的评论的回应以及可能的安全影响,我认为这不是一个有效的答案。实际上,我们上面的评论与我在说明中提到的安全问题无关。在这里,我只是警告您,如果您信任IIS的新根CA,那么默认情况下,您的本地IE也会信任该CA进行出站通信,也就是说,并不总是好的。虽然我确实希望接受任何证书(通过自定义握手),但我无意让服务器决定信任哪个证书。这是我自己的事情,我将评估软件中的证书。主要问题是IIS在SSL握手中发送已知CA的列表。这段代码并没有改变这一点。我需要一些方法来覆盖IIS行为或将其配置为发送通配符。