【发布时间】:2016-12-29 22:57:07
【问题描述】:
我们正在构建一个网关,该网关将接收来自公司的信息请求,然后将请求转发给持有该信息的选定服务提供商。
EG
A公司---HTTPS请求--->我们的代理--->服务提供商A
A公司---HTTPS请求--->我们的代理--->服务提供商B。
其中一家服务提供商已强制要求提出请求的公司使用他们颁发的客户证书。
这意味着我们必须传递客户端证书,而无需将其安装在我们的服务器上,也不知道私钥。
目前我们正在使用虚拟 c# 客户端进行测试,模拟请求公司,我们可以通过
将客户端证书接收到我们的代理中var clientCertificate = Request.HttpContext.Connection.ClientCertificate;
使用 kestrel 和 asp.net Core 1.0
但是我们需要使用 Web 请求将客户端证书发送给服务提供商,例如
var req = (HttpWebRequest)WebRequest.Create(uri);
req.ClientCertificates.Add(clientCertificate);
我们注意到代理服务器获取的客户端证书没有私钥。鉴于它的私钥,这是预期的。
除非测试客户端有可用的私钥,否则我们无法让我们的测试 C# 客户端(模拟请求公司到我们的代理)发送客户端证书。
这使我们认为,在不知道私钥的情况下,不可能使用客户端证书代理请求。
很遗憾,我们没有可用于测试的服务提供者接口,因为它目前正在构建中。
第一季度 如果您没有可用的私钥,c# 会通过 Web 请求发送客户端证书吗?
第二季度 远程服务器是否会在没有私钥的情况下接受证书,或者远程服务器是否需要请求主机(在本例中为我们的代理)拥有私钥才能执行 SSL 握手并验证客户端证书?
我们正在尝试确定上述方案是否可以在代理不知道私钥的情况下工作。
【问题讨论】:
标签: c# ssl proxy client-certificates