首页 文章

C#代理客户端证书

提问于
浏览
1

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

例如

公司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 回答

  • 1

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

相关问题