在 VB.NET .NET 4.61 中使用 Cert.pem 作为客户端证书作为转发代理
Using Cert.pem as Client cert in VB.NET .NET 4.61 for a forward proxy
我一直在尝试在 class 函数中传递自定义证书,但我显然做错了什么,因为它在握手时失败了。请看下面的代码。
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 中,我会像这样为寻找更多 context/understanding 我想做的事情的人做:
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']
我认为您在这里有几个问题需要解决。
- 虽然您可以加载 PEM 文件,但它不是完整的证书,不能用作客户端证书。您需要一个包含 public 和私钥的证书文件,例如 P12 或 PFX。
- 您没有将您的证书分配给网络请求。我对 HttpClientHandler 没有太多经验,但从文档来看,您似乎会将 HttpClientHandler 转换为具有 ClientCertificates 属性 的 WebRequestHandler。
为清楚起见编辑 - 请阅读下面的评论以获得正确答案,基于 Python 代码。不需要客户证书和上述内容。证书只需要被信任。
我一直在尝试在 class 函数中传递自定义证书,但我显然做错了什么,因为它在握手时失败了。请看下面的代码。
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 中,我会像这样为寻找更多 context/understanding 我想做的事情的人做:
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']
我认为您在这里有几个问题需要解决。
- 虽然您可以加载 PEM 文件,但它不是完整的证书,不能用作客户端证书。您需要一个包含 public 和私钥的证书文件,例如 P12 或 PFX。
- 您没有将您的证书分配给网络请求。我对 HttpClientHandler 没有太多经验,但从文档来看,您似乎会将 HttpClientHandler 转换为具有 ClientCertificates 属性 的 WebRequestHandler。
为清楚起见编辑 - 请阅读下面的评论以获得正确答案,基于 Python 代码。不需要客户证书和上述内容。证书只需要被信任。