首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法对ServerXMLHTTP对象使用HTTPS

无法对ServerXMLHTTP对象使用HTTPS
EN

Stack Overflow用户
提问于 2012-02-09 22:48:09
回答 5查看 39.9K关注 0票数 14

我支持一个经典的ASP应用程序,通过HTTPS连接到支付网关。直到最近还没有出现任何问题。几天前,服务器上安装了最新的更新(Windows Server2003),导致网站崩溃。下面是一个代码片段。

代码语言:javascript
复制
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

下面是error对象的转储:-

编号:-2147012852说明:客户端鉴权需要证书信息:客户端鉴权需要证书

起初,我认为这是因为支付网关的SSL证书没有经过身份验证,或者他们需要客户端证书。我在服务器上的浏览器中测试了URL,它正确无误地显示,并确认Payment Gateway服务器不需要客户端证书。

我不知所措。我所做的所有研究都无济于事。我甚至尝试了在Stackoverflow上找到的以下内容:

Getting XMLHTTP to work with HTTPS

xmlHttp, XML request,asp

最后一个声明XMLHTTP需要客户端证书,即使服务器不需要它,并指向了一篇关于如何安装客户端证书的知识库文章,但这已经过时了,不起作用。

EN

回答 5

Stack Overflow用户

发布于 2012-02-11 13:43:19

尝试添加oHttp.setOption 2, 13056

票数 7
EN

Stack Overflow用户

发布于 2017-11-18 01:16:45

刚刚找到了解决方案,并通过了测试:

  • Windows10(IIS10)
  • Windows2012 R2 (IIS8.5)

这是客户的问题。MSXML2.ServerXMLHTTP确实要求您在调用由SSL保护的端点时使用客户端证书(即使该端点不需要它),正如OP所指出的那样。

在the服务器上,您需要:

对于certificate

  • Set
  1. ServerXMLHTTP object

上的证书,创建客户端certificate

  • Assign权限

详细说明:

1.创建客户端证书

使用以下PowerShell命令创建新的自签名证书:

代码语言:javascript
复制
New-SelfSignedCertificate -DnsName "ServerXMLHTTP", "ServerXMLHTTP" -CertStoreLocation "cert:\LocalMachine\My"

请注意,此命令创建的证书的有效期仅为1年。

2.为证书分配权限

使用MMC查看计算机帐户How to: View Certificates with the MMC Snap-in的证书存储区

上面创建的证书可以在本地证书(本地Computer)\Personal\Certificates (“颁发者”和“颁发给”列显示"ServerXMLHTTP") )中找到。

右键单击ServerXMLHTTP证书,选择"All Tasks“-> "Manage Private Key”,弹出权限对话框。

添加运行ASP网站应用程序池的用户。默认情况下,它将作为"ApplicationPoolIdentity“运行,但您的设置可能使用特定的用户帐户。如果应用程序池使用ApplicationPoolIdentity,则要添加的用户名为"IIS AppPool\应用程序池名称“,例如IIS AppPool\DefaultAppPool

用户将被添加“完全控制”,可以取消选择。似乎只需要"Read“权限。单击[确定]确认权限。

3.在ServerXMLHTTP object上设置证书

在您的代码中,设置ServerXMLHTTP对象以使用上面创建的证书。例如,为访问令牌调用PayPal:

代码语言:javascript
复制
Dim strAuthToken: strAuthToken = "<Base64 encoded version of ClientId:Secret>"
Dim oHttp: Set oHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")

With oHttp
    Call .Open("POST", "https://api.sandbox.paypal.com/v1/oauth2/token", False)
    Call .SetOption(3, "LOCAL_MACHINE\My\ServerXMLHTTP")
    Call .SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
    Call .SetRequestHeader("Authorization", "Basic " & strAuthToken)
    Call .Send("grant_type=client_credentials")
End With

希望这仍然是有帮助的。

票数 5
EN

Stack Overflow用户

发布于 2015-02-23 19:35:42

我知道这是一个老问题。此问题可能是由于不支持的密码套件造成的。尝试添加- TLS_RSA_WITH_AES_128_CBC_SHA AES128-SHA - TLS_RSA_WITH_AES_256_CBC_SHA AES256-SHA

这意味着你必须遵循这个kb:http://support.microsoft.com/kb/948963,如果你还在使用windows2003,这个更新也很有趣。这将允许使用SHA2 - http://support.microsoft.com/kb/968730连接到站点

请注意,Windows Server 2003支持将于2015年7月14日()终止

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9212985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档