MSXML2.ServerXMLHTTP客户端证书

4

我正在使用 JScript / VBA 中的 MSXML2.ServerXMLHTTP,并希望设置客户端证书路径。在 WinHTTP.WinHTTPRequest 中,我可以使用选项'.setClientCertificate',但是在 MSXML2.ServerXMLHTTP 中似乎缺少此选项。

是否有任何参数可用于此以获得相同的效果?我需要使用 MSXML2.ServerXMLHTTP,因为我正在异步使用它,而 WinHTTP 不支持异步。

示例代码 JScript / VBA:

var H = new ActiveXObject('MSXML2.ServerXMLHTTP.6.0')
    H.open('GET', 'https://stackoverflow.com/', true)
    H.setRequestHeader('Cookie', 'yesplease')
    H.setClientCertificate('CURRENT_USER\MY\USERNAME')  <-- this line doesn't work
    H.send

所以在setClientCertificate行上面出现了错误。然而,下面的代码可以工作(但如上所述,我不能使用WinHTTP)。
var H = new ActiveXObject('WinHTTP.WinHTTPRequest.5.1')
    H.open('GET', 'https://stackoverflow.com/', true)
    H.setRequestHeader('Cookie', 'yesplease')
    H.setClientCertificate('CURRENT_USER\MY\USERNAME')  <-- this line DOES work
    H.send

有没有办法在MSXML2.ServerHTTP对象中使用setClientCertificate方法?

1
https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms763811(v%3Dvs.85) - QHarr
1
SXH_OPTION_SELECT_CLIENT_SSL_CERT = 3 '&H3 - QHarr
谢谢,@QHarr!!这最终给了我答案;H.setOption(3, 'CURRENT_USER\MY\USERNAME') - 你能把它提交为答案吗,这样我就可以接受了吗? - JasperD
1
嗨,没问题。已添加。请根据需要编辑。我认为你不需要括号,即 .setOption 3,"\value......."。 - QHarr
@JasperD,您能否详细解释一下'CURRENT_USER\MY\USERNAME'这部分的含义?这是本地证书存储的实际路径吗?还是IE注册表中证书的路径?或者您介意分享一下如何找到它。谢谢! - Gin
1个回答

2

You want

.setOption 3, "\value\......."

以下是详细说明:

https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms763811(v%3Dvs.85) under `SXH_OPTION_SELECT_CLIENT_SSL_CERT`

语法
oServerXMLHTTPRequest.setOption option, value

根据您的代码
H.setOption 3, "CURRENT_USER\\MY\\USERNAME"

针对常量

SXH_OPTION_SELECT_CLIENT_SSL_CERT = 3 '&H3

请问您能否详细解释一下 'CURRENT_USER\MY\USERNAME' 这部分的含义?这是本地证书存储的实际路径吗?还是IE注册表中证书的路径?或者您能否分享一下如何找到它。谢谢! - Gin
它在问题中被使用,但应该是证书路径。 - QHarr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接