gpt4 book ai didi

c# - 如何获取颁发者证书的指纹或公钥?

转载 作者:太空狗 更新时间:2023-10-29 19:48:01 34 4
gpt4 key购买 nike

我们已经创建了一个自签名的 CA 证书,我们用它来签署其他证书以达到 SSL 目的。这些证书将安装在我们无法访问的其他服务器上,并且将严格用于与移动应用程序等其他客户端通信。

当这些客户端(用 .NET 编写)使用 HTTPS 向服务器发出请求时,我们会收到“从服务器收到的无效证书”错误,因为 CA 证书不是该客户端上受信任的 CA。

我们想使用 ServicePointManager.ServerCertificateValidationCallback 绕过此安全措施,但前提是所使用的证书是由我们的 CA 证书签署的。

我可以检查 certificate.Issuer,但是任何人都可以轻松地对其进行欺骗。如何获取无效证书的颁发者证书的指纹或公钥?如果我可以访问它,我可以轻松地将它与我知道有效的证书进行比较,并忽略证书错误并继续请求。

更新

我想我越来越近了。看起来我们想要做的事情是不可行的,所以走向了一个稍微不同的方向。

使用 X509Chain 我们可以使用以下代码验证证书是否是 CA 的子证书:

var caCert = new X509Certificate2(@"[path]\MyCA.cer");

var newChain = new X509Chain();
newChain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
newChain.ChainPolicy.ExtraStore.Add(caCert);

var res = newChain.Build(certInQuestion);

Build() 仍然返回 false(正如预期的那样,因为客户端不信任 CA),但现在 newChain.ChainStatus[0].Status 正在返回 不受信任的根。根据我的测试,这意味着链已通过验证,因为如果我提供不同的 CA 证书,它会因 InvalidChain 而失败。

总而言之,这告诉我如果状态是 UntrustedRoot,证书用我们的 CA 证书创建的,因此它是有效的,其他任何东西都是假的!

我的假设是否正确?

最佳答案

这是错误的解决方案。您应该将自签名证书作为受信任的 CA 证书安装在所有客户端中,或者更好的办法是让它由已经受信任的 CA 签名。不要为此编写代码。

关于c# - 如何获取颁发者证书的指纹或公钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14633889/

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