VBA - https响应文本解密

时间:2017-10-08 07:33:09

标签: vba ssl certificate

在VBA中,我需要请求http消息并解析响应文本。 我已成功获取http状态为“200”的响应文本,但正文已加密。 (标题不是)所以我一直试图解密这条消息,但由于对SSL概念和编程技巧知之甚少,我已经陷入困境。

With oRequest
    .Open "GET", sUrl, False
    .SetRequestHeader "Accept", "*/*"
    .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
    .SetRequestHeader "Connection", "Keep -Alive"
    '.SetClientCertificate ("HKEY_LOCAL_MACHINE/Software/Microsoft/SystemCertificates/CA/Certificates")   
    .Send 
    sResult = .GetAllResponseHeaders
    Debug.Print sResult
    sResult = .ResponseText
    Debug.Print sResult

上面的脚本是我写的。有了这个,我有一些问题。

1。 'SetClientCertificate()'是必要的吗?我怎样才能成功获得响应文本?

  • 正如我搜索过的那样,'SetClientCertificate()'是将ssl消息发送到服务器的方法。但是,我已成功发送(并获得响应)一条消息而没有该方法。我无法理解这是如何工作的。

2。在VBA中,如何使用证书来解码响应主体

  • 我真的不知道如何解密响应文本。我知道我的本地计算机上有一个合适的证书,证书中的密钥可用于解密消息,但我怎样才能在VBA中执行此操作?我真的找不到任何有用的文章。

请让我知道我误解了什么,并给我任何解决问题的线索。

[+编辑]

在脚本中,有一行:

.SetRequestHeader "Accept-Encoding", "gzip , deflate"

我在问题中省略了这一行。因为我曾经认为这个问题是关于SSL的,所以我故意删除了一些我认为并不是真正必要的行。 (这是完全错误的)

删除该行后,它可以正常工作。

1 个答案:

答案 0 :(得分:2)

  

我已成功获取http状态' 200'的响应文字,但正文已加密。

这没有意义。在HTTPS中,所有内容都是加密的:请求标头和正文以及响应标头和正文。我宁愿期望你得到解密的响应标题和正文,但是主体可能是压缩的,或者是你不认识的格式,所以它看起来像加密。

  

' SetClientCertificate()'有必要的?我怎样才能成功获得响应文本?

如果服务器要求客户端使用客户端证书对自身进行身份验证,则需要此操作。大多数网站都不需要这个。

  

在VBA中,如何使用证书解码响应主体

你不能。您获得的正文可能未加密或至少未使用与TLS(HTTPS)连接相关的任何内容进行加密(参见上文)。