我已在客户端服务器上安装了客户端证书。当使用客户端证书从客户端向目标服务器发出 HTTPS 请求时,IIS 日志会报告500.0.64发生错误(这是目标服务器的 IIS 日志)。从客户端服务器发出调用的客户端应用程序是托管在 IIS 中的 .Net 网站。
在目标服务器上,IIS 配置为“需要 SSL”,客户端证书设置为“需要”。如果我不在请求中包含证书,我会收到 403 Forbidden 错误,这是正确的。如果我将客户端证书设置更改为“接受”,那么我仍然会收到500.0.64如果证书通过,则会出现错误,但如果证书未通过,则可以访问目标服务器上托管的应用程序。
作为测试,我创建了一个简单的控制台应用程序,并将其放在客户端服务器上。它使用客户端证书,运行良好,证书在目标机器上成功验证。它使用与 IIS 中托管的网站相同的代码来生成 http 请求。因此,我得出结论,问题不可能出在客户端应用程序上,也不可能出在目标机器上——不管对错。
那么,为什么在 IIS 托管应用程序的请求中包含客户端证书会导致此错误,而控制台应用程序却没有问题?有人能就如何进一步诊断问题提供任何建议吗?
我已听从建议从这个答案因为场景几乎完全相同。但是,客户端和目标计算机上都不存在有问题的注册表项,因此我不认为这是原因。
答案1
事实证明,客户端上的 aspnet 用户无权访问证书。一旦我授予其读取权限,它就可以正常工作。
您可以通过转到 MMC.exe 控制台中的证书、右键单击证书并管理私钥来执行此操作。
我读完这个答案后发现了这个解决方案: https://stackoverflow.com/a/2859843/976866
答案2
经过几天浏览各种论坛后,我为自己构建了一个解决方案,效果非常好
需要将 SCCM MP 转换为 https
问题 mpcontrol:端口 443 调用 HttpSendRequestSync 失败;SAN2 扩展错误; IIS 日志:500 64 0
SAN2 错误的解决方案:扩展:向证书添加客户端身份验证;主题名称 - 从 AD 构建(选项);
对于 ISS 服务器上的 IIS 错误,请使用以下命令绑定证书:http add sslcert ipport=0.0.0.0:443 certhash="your certhash" appid="your appid" certstorename=Myverifyclientcertrevocation = disableVerifyRevocationWithCachedClientCertOnly=禁用 UsageCheck=启用clientcertnegotiation=启用