如何自定义 Microsoft.Owin.Security.OAuth 以使用证书但不让 IIS 验证它

How to customize Microsoft.Owin.Security.OAuth to use a certificate but not have IIS Validate it

希望我问的问题正确。

我有以下用例。我有一个应用程序,我想在 https 上 运行,并让用户通过 x509。但是,我想将该身份验证转发给外部 LDAP,并且没有 IIS authenticate/check 证书。

如果我进入 IIS 并设置为 Accept/Require,我会收到 403 错误。如果我不需要,那么我永远不会收到证书提示。

我的启动 class 如下所示


        public void Configuration(IAppBuilder app) {

            app.UseClientCertificateAuthentication(new DefaultClientCertificateValidator());
        }
    }
}

我然后我有

    public class DefaultClientCertificateValidator : IClientCertificateValidator
    {
        public ClientCertificateValidationResult Validate(X509Certificate2 certificate)
        {
            Console.WriteLine($"Attempting to validate cert {certificate.SubjectName}");
            // For now just return true
            ClientCertificateValidationResult res = new ClientCertificateValidationResult(true);
            return res;
        }
    }

如果我不传递证书,它会因为找不到证书而抛出错误。但是,如果我尝试发送证书,我会收到服务器错误

403 - Forbidden: Access is denied. You do not have permission to view this directory or page using the credentials that you supplied.

我需要在 IIS 中做些什么来基本上说“获取证书,转发它但不验证它?”

看来答案有点“奇怪”。对于 IIS,您需要执行以下操作

netsh http show sslcert

这将为您获取 ssl 证书

然后把这些信息复制下来,你以后会用到的。

然后执行以下操作

netsh http delete sslcert ipport=YOUR_HOST:YOUR_PORT

然后运行以下

http add sslcert ipport=YOUR_PORT:YOUR_HOST certhash=[FROM THE FILE EARLIER] appid={[FROM THE FILE EARLIER]} certstorename=MY verifyclientcertrevocation=enable VerifyRevocationWithCachedClientCertOnly=disable UsageCheck=Enable clientcertnegotiation=enable

通过将该位翻转为启用,它允许验证 X509 下游