C#代理客户端证书

时间:2016-12-29 22:57:08

标签: c# ssl proxy client-certificates

我们正在构建一个网关,该网关将接收来自公司的请求以获取信息,然后将请求转发到保存该信息的选定服务提供商。

EG

公司A --- HTTPS请求--->我们的代理--->服务提供商A

公司A --- HTTPS请求--->我们的代理--->服务提供商B.

其中一家服务提供商已要求请求公司使用其颁发的客户证书。

这意味着我们必须传递客户端证书,而不必将其安装在我们的服务器上,或者知道私钥。

目前我们正在使用虚拟c#客户端进行测试,模拟请求公司,我们可以通过

接收客户端证书到我们的代理
var clientCertificate = Request.HttpContext.Connection.ClientCertificate;

使用kestrel和asp.net Core 1.0

然而,我们需要使用Web请求Eg

将客户端证书发送给服务提供商
var req = (HttpWebRequest)WebRequest.Create(uri);

req.ClientCertificates.Add(clientCertificate);

我们注意到代理服务器获取的客户端证书没有私钥。鉴于它的私钥,这是预期的。

我们无法让我们的测试c#客户端模拟请求公司到我们的代理,发送客户端证书,除非测试客户端有私钥可用。

这使我们认为在不知道私钥的情况下用客户端证书代理请求是不可能的。

不幸的是,我们没有可用于测试的服务提供程序接口,因为它正在构建中。

Q1 如果您没有私钥,c#会发送带有Web请求的客户端证书吗?

Q2 远程服务器是否接受没有私钥的证书,或远程服务器是否要求请求主机(在此实例中我们的代理)具有私钥,以便执行SSL握手并验证客户端证书?

我们正在尝试确定上述方案是否可以在代理知道私钥的情况下工作。

1 个答案:

答案 0 :(得分:1)

如果可能,那将违反客户证书的目的,因为任何人都可以拦截并利用它们为自己的利益,假装他们是实际的受让人。换句话说,你正试图成为一个旨在首先消除中间人的计划中的中间人。