无法将 HTTPS 与 ServerXMLHTTP 对象一起使用

无法将 HTTPS 与 ServerXMLHTTP 对象一起使用

我支持一个通过 HTTPS 连接到支付网关的 Classic ASP 应用程序。直到最近都没有出现问题。几天前,在没有代码、IIS 配置或任何本地更改的情况下,它坏了。它在至少 3 个独立的服务器上坏了。最后一次运行 Windows 更新是在 11 月下旬,但更新服务器的更新并没有解决问题。下面是代码片段。

Dim oHttp
Dim strResult
Set oHttp = CreateObject("MSXML2.ServerXMLHTTP")
oHttp.setOption 2, 13056
oHttp.open "POST", SOAP_ENDPOINT, false
oHttp.setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8"
oHttp.setRequestHeader "SOAPAction", SOAP_NS + "/" & SOAP_FUNCTION
oHttp.send SOAP_REQUEST

以下是错误对象的转储:-

Number: -2147012852
Description: A certificate is required to complete client authentication 
Message: A certificate is required to complete client authentication

我最初在 Stackoverflow 上发布了这个问题(https://stackoverflow.com/questions/9212985/cant-use-https-with-serverxmlhttp-object) 认为这是一个代码问题,但进一步调查似乎指向服务器问题。

答案1

这确实是一个长远的打算,但由于您没有说明服务器上安装的 MSXML 版本,因此如下所示:

  1. 打开本地计算机存储的证书 MMC
  2. 导航至个人 -> 证书
  3. 注意最近可能已过期的任何证书

如果任何证书最近过期,这可能会导致该问题。

问题是由于 SSL 在 3.0 版 MSXML 解析器 (msxml2.lib) 中实现不佳,ServerXMLHTTP 对象期望任何 SSL 连接都要求服务器和客户端证书身份验证,即使请求的服务器不需要客户端证书身份验证。

如果 xml 解析器无法提供有效的客户端证书(例如由于过期而无效),它就会抛出错误。

这是一个非常古老的错误(已于 2005 年 11 月在 MSXML 3.0 SP2 中修复),这篇 kb 文章描述了一种解决方法:http://support.microsoft.com/kb/302080

相关内容