在 .NET 4.61 中使用 Cert.pem 作为转发代理 VB.NET 客户端证书



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

 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']

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

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

为清楚起见,请阅读下面的评论以获取基于Python代码的正确答案。 不需要客户端证书和上述内容。 证书只需要受信任。

最新更新