SslStream.AuthenticateAsServer证书链

时间:2017-03-09 14:03:14

标签: c# .net ssl x509certificate

是否可以通过证书链连接到客户端作为服务器?

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

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

1 个答案:

答案 0 :(得分:0)

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

RFC 5246, section 7.4.2

  

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

SslStream类将发送服务器身份证书,后跟其知道的任何中间人,但不是根目录(当然,除非服务器身份证书是自签名的)。

通常可以通过他们写入子/中间CA的授权信息访问记录查找不受信任的根。如果您没有AIA或端点无法访问,则必须通过其他机制将根目录转移到客户端计算机。