SslStream.AuthenticateAsServer证书链

问题描述:

是否可以使用证书链连接到客户端作为服务器?SslStream.AuthenticateAsServer证书链

clientStream.AuthenticateAsServerAsync(certificate, false, System.Security.Authentication.SslProtocols.Tls, false).Wait(); 

我只是尝试连接到自签名证书链的客户端,并没有运气。 SslStream实例的方法AuthenticateAsServer只有一个证书作为参数。但浏览器请求additional root certificate。 你有任何想法或代码示例它是如何做到的?

链不发送根,因为A)你已经拥有了它,所以它对你的根存储是多余的;或者B)你不这样做,在这种情况下你不会相信它,所以为什么要麻烦?

RFC 5246, section 7.4.2

certificate_list: 这是证书的序列(链)。发件人的 证书必须排在第一位。以下每个 证书都必须直接证明其前面的证书。因为 证书验证要求根密钥独立分发 ,所以指定根证书颁发机构 证书颁发机构的自签名证书可以从链中省略,假设该远程终端必须已经拥有它,以便 验证它任何状况之下。

SslStream类将发送服务器身份证书,后面跟随它所知道的任何中间体,但不发送根(除非服务器身份证书是自签名的)。

通常情况下,不受信任的根可以通过他们写入其子/中间CA的颁发机构信息访问记录查找。如果您没有AIA或端点无法访问,则必须通过不同的机制将根传输到客户端计算机。