繁体   English   中英

如何在.NET SslStream中为客户端身份验证指定接受的证书

[英]How to specify accepted certificates for Client Authentication in .NET SslStream

我试图使用.Net System.Security.SslStream类来处理具有客户端身份验证的SSL / TLS流的服务器端。

要执行握手,我使用此代码:

SslStream sslStream = new SslStream(innerStream, false, RemoteCertificateValidation, LocalCertificateSelectionCallback);
sslStream.AuthenticateAsServer(serverCertificate, true, SslProtocols.Default, false);

不幸的是,这会导致SslStream传输一个CertificateRequest,其中包含我的CryptoAPI受信任的根存储中所有证书的主题名。

我希望能够覆盖它。 我不能要求用户在受信任的根存储中安装或删除证书。

看起来SslStream下面使用SSPI / SecureChannel,所以如果有人知道如何使用该API进行等效操作,那也会有所帮助。

有任何想法吗?

目前使用.NET库看起来不太可能。

我通过使用System.Security.SslStream的Mono类库实现解决了这个问题,它可以更好地访问在握手期间覆盖服务器的行为。

证书验证的作用是验证链中的所有证书。 为了真正做到这一点,它只是联系每个cerficates的根商店。

如果这不是您想要发生的事情,您可以在本地部署自己的根存储。

这不是我想要改变的验证部分。 问题出在初始握手中,服务器发送消息通知客户端需要客户端身份验证(即CertificateRequest消息)。 作为此消息的一部分,服务器将发送它将接受的CA的名称作为客户端证书的颁发者。 默认情况下,该列表包含商店中的所有受信任根。

但是,如果可以覆盖单个应用程序的证书根存储,那可能会解决问题。 你是这个意思吗? 如果是这样,我该怎么做?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM