-1

我一直在尝试在类函数中传递自定义证书,但我显然做错了,因为握手失败。请看下面的代码。

 Public Shared Async Function RevealViaForwardProxy(ByVal redactData As String) As Task(Of String)
        Dim proxy = New WebProxy($"http://{forwardProxy}")
        Dim cert As X509Certificate = X509Certificate.CreateFromCertFile("c:/Users/User/vb/cert.pem")
        Dim credentials = New NetworkCredential(username, password)
        proxy.Credentials = credentials
        Dim client = New HttpClientHandler()
        client.Proxy = proxy
        client.BaseAddress = New Uri("https://httpbin.org/")
        Dim response = Await client.PostAsync("/post", New StringContent(redactData))
        Dim responseBody = Await response.Content.ReadAsStringAsync
        Return JObject.Parse(responseBody)("data").ToObject(Of String)
    End Function

例如,在 Python 中,对于寻找更多上下文/理解我想做的所有事情的人,我会这样做:

def reveal_via_forward_proxy(tokenized_data):
r = requests.post(
    'https://httpbin.org/post',
    data=tokenized_data,
    headers={"Content-type": "application/json"},
    proxies={"https": "https://{}:{}@{}".format(username, password, forward_proxy)},
    verify='cert.pem'
)
assert r.status_code == 200
return r.json()['data']
4

1 回答 1

1

我认为你有几个问题需要在这里解决。

  1. 虽然您可以加载 PEM 文件,但这不是完整的证书,不能用作客户端证书。您需要一个带有公钥和私钥的证书文件,例如 P12 或 PFX。
  2. 您没有将证书分配给 Web 请求。我对 HttpClientHandler 没有太多经验,但从文档看来,您会将 HttpClientHandler 转换为具有 ClientCertificates 属性的 WebRequestHandler。

为清楚起见进行编辑- 请根据 Python 代码阅读下面的评论以获取正确答案。不需要客户证书和上述证书。证书只需要被信任。

于 2017-11-06T20:08:12.643 回答