我有一个在 IIS 8.5 中运行良好的应用程序,它在 web.config 文件中使用此设置作为路径的客户端证书登录(智能卡)。我不得不将此应用程序迁移到 IIS 10.0,一切正常,只是应用程序不提示输入证书,只是在代码中抛出一个错误,提示没有证书。
我已经仔细检查了 IIS 中的所有设置,证书和 SSL 设置都一样。该应用程序是一个简单的 .netcore 应用程序,除了证书提示之外,它运行正常。IIS 10 和 8.5 中是否存在我可能遗漏的不同之处。我认为 web.config 中允许浏览器提示证书的部分就是此处的这一部分。执行此操作的开发人员已经离职,如果您能提供任何帮助,我将不胜感激。除了已经检查的内容之外,我还需要在 IIS 中检查哪些内容?
我浏览了一些其他帖子,并确保根证书和中间证书位于证书存储区等中。应用程序本身可以使用 SSL 证书正常加载。
<location path="SmartCard">
<system.webServer>
<security>
<access sslFlags="Ssl,SslNegotiateCert" />
</security>
</system.webServer>
答案1
全部事物平等的, 它应该工作一样!
但这是关键部分——也许并非所有事物在水平之上都是平等的web.config
(或之下)是平等的 - web.config 将仅适用于属于同一 HTTP URL 路径的 SmartCard 文件夹,基于此地点标签)
Windows\System32\InetSrv\config\ApplicationHost.config
趋于累积事物随着时间的推移,人们会忘记所做的服务器级配置更改。
因此,可能的选择:
检查是否存在服务器证书使用私钥安装并且站点绑定包含 HTTPS
- 我知道你提到过通过 SSL 使用网站是可行的——这应该可以证明
从工作服务器转储出网站的有效设置,并与非工作服务器的转储设置进行比较
- 为了加分,像 Web Deployment Tool 这样的工具可能会有所帮助
- 手动方法:
APPCMD LIST CONFIG http://site/pathabovesmartcard/ /text:* >working.txt
(在工作服务器上)APPCMD LIST CONFIG http://site/pathabovesmartcard/ /text:* >NONworking.txt
(在...您猜对了,在不工作的服务器上!)- 进而比较用文本编辑器或明智的眼光
- 如果您更喜欢 XML,请忽略 /text:*
添加上述
NETSH SHOW SERVICESTATE
比较,以便快速查看 HTTP.SYS 队列
这实际上是删节版 - 您还可以applicationhost.config
在 中查看未按站点过滤的完整内容(最初是合理组织的,然后是线性组织的,随后发生变化)Windows\System32\InetSrv\Config
,并且可能变得更容易(或者更难)。