安装多个证书时使用“setClientCertificate”

时间:2017-06-12 23:43:13

标签: vba excel-vba ssl certificate winhttp

我在VBA中写了一个WinHttp POST请求。只要计算机上只安装了一个证书,它就可以正常工作。但是,某些用户拥有多个具有相似证书名称的证书,因此会返回错误:“需要证书才能完成客户端身份验证”

当多个证书共享相似名称时,有关如何选择正确证书的任何建议?我已经尝试使用证书的“友好名称”和“CN”名称。

以下是我的代码:

Sub dapull()
Dim URL As String: URL = "https://ce.midwest.org/dart/xml/query"
Dim mfile As String
pulldate = Format(Worksheets("Sheet2").Range("date").Value, "yyyy-mm-dd")
mfile = "<?xml version=" & """" & "1.0" & """" & "?><Envelope xmlns=" & """" & "http://schemas.xmlsoap.org/soap/envelope/" & """" & "><Header/><Body><QueryRequest xmlns=" & """" & "http://markets.midwest.org/dart/xml" & """" & "><QueryResults day=" & """" & pulldate & """" & "><Location>BART</Location></QueryResults></QueryRequest></Body></Envelope>"
Set Req = New WinHttp.WinHttpRequest
With Req
    .Open "POST", URL, False
    .SetClientCertificate "CURRENT_USER\MY\name" '*this is the issue line
    .SetRequestHeader "content-type", "text/xml"
    .Send (mfile)
    .ResponseText
End With
End Sub

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,您设法解决了吗? VBA只选择第一个:(无法列出或标识哪个是哪个(或者至少在获取证书之前按日期或其他方式进行排序)。 如果您这样做了,请告诉我如何

现在,我通过要求人们将自己的权利证书复制到“受信任的人”部分并在我的XLSM中输入一个选项来切换存储,以便从CURRENT_USER \ TrustedPeople \而不是从我的存储中拾取它来“解决”它。 它可以工作,但并不优雅,因为它需要每6或12个月手动重新复制证书(但总比不工作要好:))