【发布时间】:2022-01-03 23:18:43
【问题描述】:
我有一个使用 C# 中的HttpListener 实现的 Web 服务器,有一个 Go 客户端与该服务器通信。作为要求的一部分,我需要在服务器上验证从客户端发送的证书,并且我正在从客户端发送证书链。我找到了方法HttpListenerRequest.GetClientCertificate() 来获取服务器上的证书,但我只能接收叶证书,但不能接收阻止我执行链验证的整个链。有没有办法使用 HttpListener 作为服务器来接收整个链。
PS:我尝试将相同的证书链发送到 Go 服务器,Go 在 Tls Config 中有 ssl 回调处理程序(VerifyPeerCertificate),使用它我可以读取整个证书链。我只想用 C# 中现有的 HttpListener 服务器来实现这一点。
编辑:我的客户端证书是一个链(客户端证书 + 中间 CA + 根 CA)。我将根 CA 预存储在受信任的根证书颁发机构中。我需要在 Windows 信任存储中获取中间 CA,以便我可以为客户端证书构建链,并且由于我无法预先存储中间 CA,因此我的想法是从客户端发送链并在何时提取中间 CA客户端与服务器对话。
由于我能够使用具有相同客户端的 Go 服务器接收完整的链,因此我可以确认客户端始终发送链,但不知何故,我们在 C# 中为HttpListener 提供的方法似乎忽略了该链。
【问题讨论】:
标签: c# httplistener httplistenerrequest