带有自签名证书的 VBA ServerXMLHTTP https 请求

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11573022/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 13:36:37  来源:igfitidea点击:

VBA ServerXMLHTTP https request with self signed certificate

vbahttpsssl-certificate

提问by Javier Novoa C.

I'm using a ServerXMLHTTP object to make some http requests on an excel 2007 vba script.

我正在使用 ServerXMLHTTP 对象在 excel 2007 vba 脚本上发出一些 http 请求。

But I need to connect to an https server which uses a self-signed SSL Certificate, so by default I get the message "The certificate authority is invalid or incorrect". Is there a way to configure the ServerXMLHTTP object so that it doesn't requires a CA Certificate?

但是我需要连接到使用自签名 SSL 证书的 https 服务器,因此默认情况下我收到消息“证书颁发机构无效或不正确”。有没有办法配置 ServerXMLHTTP 对象,使其不需要 CA 证书?

Some sample code follows:

一些示例代码如下:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
  objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
  objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
  objHTTP.send ("")

回答by Romain

I used to have this problem for a while, and I only managed to get past it thanks to this:

我曾经遇到过这个问题一段时间,由于这个,我才设法解决了这个问题:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)
objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

I have found this here setOption Methodand getOption Method

我在这里找到了setOption 方法getOption 方法

Here in this code I have just used SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORSbut you can try with others more specific:

在我刚刚使用的这段代码中SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS,您可以尝试使用其他更具体的代码:

  • SXH_SERVER_CERT_IGNORE_WRONG_USAGE
  • SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID
  • SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID
  • SXH_SERVER_CERT_IGNORE_UNKNOWN_CA
  • SXH_SERVER_CERT_IGNORE_WRONG_USAGE
  • SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID
  • SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID
  • SXH_SERVER_CERT_IGNORE_UNKNOWN_CA

回答by Ian Flynn

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)
objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

Got the above solution to work with a minor change. Instead of:

得到了上述解决方案,只需稍作改动即可。代替:

objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)

I used:

我用了:

objHTTP.SetOption(2) = (objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)

Otherwise I get an error of:

否则我会收到以下错误:

Microsoft VBScript compilation error '800a0414' Cannot use parentheses when calling a Sub objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)

Microsoft VBScript 编译错误 '800a0414' 调用 Sub objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS) 时不能使用括号

referenced from: SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS

引用自: SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS