升级到Windows 11后,一个本地ASP.Net应用程序不再提示我输入CAC,所以我无法通过https访问该站点。我可以通过http访问它。我四处查看了一下,我的绑定被设置为一个友好名称为“IIS Express Development Certificate”的证书,但当我在证书存储库中查找该证书时,我相信它是由“localhost”颁发的,所以我继续通过powershell创建了一个新的自签名证书:
New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "localhost" -FriendlyName "IIS Dev Express Take 2" -NotAfter (Get-Date).AddYears(10)
我将此证书复制到证书存储区中受信任的根证书颁发机构和中间颁发机构文件夹,并在绑定中选择了此新证书,但仍然存在相同的问题。此时,我不确定还可以尝试哪些方法来解决此问题。
我已经做了几天了,再补充一点:
我尝试过多次删除和添加服务器证书,将它们从我的个人存储区复制到受信任的存储区和中间存储区,等等。我尝试过复制同事的applicationhost.config文件,或者至少复制与我的文件不同的特定于身份验证的部分。我尝试过直接从Visual Studio运行站点,而不是在IIS中独立运行。我甚至尝试过删除和重新添加IIS Express,它重新生成了最初安装的IIS Express Development Certificate。我做什么似乎并不重要。该应用程序具有以下内容:
_cert = Context.Request.ClientCertificate;
if (_cert.IsPresent)
{
transferCACLoginToConsent = ProcessCAC();
}
但是它永远不会到达内部代码,因为在我逐步执行这个过程时,Context.Request.ClientCertificate总是计算为false,并且不会提示用户输入CAC/客户端证书。
1条答案
按热度按时间pftdvrlh1#
我现在也遇到了这个问题,也是在升级到Windows 11之后。我还没有完全理解这个问题,但相信我可以为你提供一个实质性的解决方案。这个问题与TLS有关,以及Windows使用的默认值-适用于Windows 10的TLS 1.2和适用于Windows 11的TLS 1.3。我能够恢复本地站点的CAC身份验证/通过修改注册表强制TLS 1.2进行授权。(显然,长期或永久的解决方案需要允许TLS 1.3工作;我打算在这方面继续努力。)
特别是,在现有的计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\机码下,新增(根据需要)TLS 1.2和TLS 1.3密钥,然后在这两个新密钥下分别添加一个服务器密钥。在新的服务器密钥中,添加一个名为Enabled的DWORD,并将TLS 1.2路径的DWORD值设置为1。并将其保留为0(默认值)以用于TLS1.3路径。
本网站将带您完成这些编辑:https://thesecmaster.com/how-to-enable-tls-1-2-and-tls-1-3-on-windows-server/。它还要求您创建客户端密钥和DisabledByDefault DWORD,但我觉得没有必要。
由于这个解决方案确实需要编辑系统注册表,因此为了可还原性,最好事先导出它的状态。