【问题标题】:C# proxy a client certificateC#代理客户端证书
【发布时间】: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


    【解决方案1】:

    如果可能的话,那将违背客户证书的目的,因为任何人都可以截获并使用它们来谋取利益,假装他们是实际的受让人。换句话说,您正试图在一个旨在消除中间人的计划中充当中间人。

    【讨论】:

    • 谢谢你,简洁的回答将我们被要求做的事情置于上下文中,这是不可能的。正是因为它的设计目的是完全停止所询问的内容。
    • 是的!现在尝试向您的管理层以及您的服务提供商 A 和 B 的管理层解释这一点:)
    • 我几乎在我的回复中提出了一些有趣的对话!至少明天是星期五:)
    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多