gpt4 book ai didi

c# - 无法为 AuthenticateAsServer 指定证书链?

转载 作者:太空狗 更新时间:2023-10-29 20:41:40 24 4
gpt4 key购买 nike

我正在努力解决 SslStream AuthenticateAsServer 中明显缺乏灵 active 的问题。我有一个自签名 rootCA、一个中间 CA 和一个终端实体(主机)证书。我只做服务器身份验证。客户端内置了 rootCA 证书,我正在尝试想出一些方法将整个链从服务器发送到客户端,以便客户端可以验证服务器,我还可以比较信任的指纹将 rootCA 锚定在客户端中。

理想情况下,我想避免使用证书存储并显式发送证书。如果有人知道如何做到这一点,这是解决我的问题的直接最佳方法。

但似乎 SslStream AuthenticateAsServer 不会以任何记录的方式让您明确指定要发送的链。您必须只发送底部证书,然后让它从证书存储中挖掘其余部分。这不太理想,但它似乎是唯一的选择,所以我正在尝试这种方式。现在的问题是(使用受信任的根证书颁发机构中的自签名 CA,以及服务器上的中间根证书颁发机构中的中间证书)只有主机证书和中间证书被“自动”发送到客户端。我只在客户端获得这两个证书,而不是 rootCA 证书。为什么?

有没有办法使用证书链进行 AuthenticateAsServer?

如果不是,它会在发送之前将根证书从链的顶部切掉吗?

如果以上问题没有答案,是否至少有一种方法可以避开将链条的其余部分从商店中挖掘出来的(自动)魔法,在那里我可以查看结果,而不必去通过AuthenticateAsServer,到客户端CertValidationCallback?至少这样我会调试一个黑盒子,而不是一串几个黑盒子。

最佳答案

更新我 4 年前问的这个问题。我从来没有找到任何方法来做上面描述的任何事情。 SslStream 真的只有这么死板的接口(interface)。有时我会在链中取回根证书(如果身份验证方是 xamarin?),大多数时候我不会,而且没有办法以一种或另一种方式强制它。所以我最终做了两件事来解决这个问题:

  1. 由于客户端已将根证书作为资源嵌入,我在证书验证回调期间将其取出并显式将其添加到 chain.ChainPolicy.ExtraStore 中,然后验证链是否已构建。
  2. 假设链已构建,然后我检查条件 (chain.ChainElements[chain.ChainElements.Count - 1].Certificate.Thumbprint == rootCert.Thumbprint) 这验证了添加 true 之后根证书,即真正用作构建链的根证书的证书,确实是真正的根证书。这可以防止有人使用其他一些根证书,并且它仅仅因为链构建就通过了验证。

因此我们确保 #1 添加了根证书的链可以构建,#2 构建的链包含我们的根证书。

关于c# - 无法为 AuthenticateAsServer 指定证书链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27493225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com