Vba 为ServerXMLHTTP.SetOption标识正确的客户端证书

Vba 为ServerXMLHTTP.SetOption标识正确的客户端证书,vba,client-certificates,serverxmlhttp,internetsetoption,Vba,Client Certificates,Serverxmlhttp,Internetsetoption,我在Windows 7中安装了三个客户端证书,需要使用一个特定的证书来使用VBA对ServerXMLHTTP60调用进行身份验证 使用证书的友好名称调用ServerXMLHTTP60.SetOption不会返回错误。但随后的.send失败,出现“需要证书才能完成客户端身份验证” 代码示例: Public Sub TestCert() Dim myHTTP as New ServerXMLHTTP60 Dim myURL as String ' Open

我在Windows 7中安装了三个客户端证书,需要使用一个特定的证书来使用VBA对ServerXMLHTTP60调用进行身份验证

使用证书的友好名称调用ServerXMLHTTP60.SetOption不会返回错误。但随后的.send失败,出现“需要证书才能完成客户端身份验证”

代码示例:

    Public Sub TestCert()
    Dim myHTTP as New ServerXMLHTTP60
    Dim myURL as String

        ' Open the connection to the secure server
         myHTTP.Open "GET", "https://server/finalpath", False

        ' Attempt to set the correct client certificate
        ' I have also tried just the friendly name as well as 
        ' LOCAL_MACHINE\My\cert friendly name'
        myHTTP.SetOption 3, "CURRENT_USER\My\cert friendly name"

        ' Send request fails with "A certificate is required ..."
        myHTTP.Send
    End Sub

指定的证书通过IE或Firefox与此站点一起正常工作。我必须为证书使用不正确的路径名。有没有办法确定正确的客户端证书路径名以确保成功?

这让我疯狂了好几天,但是。。。 假设您将客户端安装到当前用户下的默认存储,并且您的证书具有subject cn=mycert,那么这似乎是可行的。运行office16、windows 10、winhttp5.1

Dim apiConnection As New WinHttp.WinHttpRequest

' Set the authentication settings
apiConnection.SetClientCertificate "mycert"

apiConnection.Open "Get", "https://localhost:8443", False
apiConnection.Send

我遇到了同样的问题,并最终使用了选项,该选项以与IE相同的方式提供默认客户端证书。WinHTTP也是一个不错的选择,因为它支持您所在的网络使用代理的情况。@Blackhawk,谢谢,但现在出现了一个新问题。WinHTTP.Send现在可以正常工作,但它似乎根本没有发送证书。WinHTTP.ResponseText包含返回的完全相同的身份验证失败错误文档,就像我尝试在没有任何证书或自动登录策略的情况下发送请求一样。您可以使用IE访问该站点吗?我可以。没有问题,而且自动证书提示不会出现任何问题。那么我想它又回到了为工作寻找合适证书的阶段了。为HTTPS站点使用WinHTTP设置客户端证书的步骤。