无法与ServerXMLHTTP对象一起使用HTTPS

我支持通过HTTPS连接到支付网关的传统ASP应用程序。 直到最近还没有问题。 前几天这个破坏没有代码,IISconfiguration或任何本地更改。 它在至less3个独立的服务器上被破坏。 Windows Updates的最后一次运行是在11月下旬,但是将服务器的更新date还没有解决。 下面的代码片段。

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 )认为这是一个代码问题,但进一步的调查似乎指向一个服务器的问题。

这是一个很长的一个镜头,但是由于您没有说明服务器上安装的MSXML版本,因此:

  1. 打开本地计算机商店的证书MMC
  2. 导航到个人 – >证书
  3. 注意任何可能最近过期的证书

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

问题在于,由于SSL在3.0版本的MSXML分析器(msxml2.lib)中执行得不好,ServerXMLHTTP对象期望任何SSL连接都需要服务器和客户端证书身份validation,即使所请求的服务器不需要客户端证书身份validation。

如果xmlparsing器不能提供有效的客户端证书(例如因失效而无效),它只会引发错误。

这是一个很老的bug(在2005年11月的MSXML 3.0 SP2中修复),这个kb文章描述了一个解决方法: http : //support.microsoft.com/kb/302080