我在 VBA 中写了一个 WinHttp POST 请求。只要计算机上只安装了一个证书,它就可以正常工作。但是,某些用户拥有多个证书名称相似的证书,因此会返回错误:
a certificate is required to complete client authentication
关于当多个证书共享相似名称时如何选择正确证书的任何建议?我试过同时使用证书的“友好名称”和“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
最佳答案
我遇到了同样的问题,请问您解决了吗? VBA 只选择第一个 :( 无法列出或识别哪个是哪个(或者至少在获取证书之前按日期或其他方式排序)。 如果你做到了,请告诉我怎么做
现在我“解决”了这个问题,方法是让人们将他们自己的权利证书复制到受信任的人部分,并在我的 XLSM 中放入一个选项来切换商店,以便从 CURRENT_USER\TrustedPeople\而不是我的商店中获取。 它可以工作,但并不优雅,因为它需要每 6 或 12 个月手动重新复制一次证书(但总比根本不工作好:))
关于excel - 安装多个证书时使用 "setClientCertificate",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44510284/