gpt4 book ai didi

c# - 无法通过 SslStream 发送客户端证书

转载 作者:太空狗 更新时间:2023-10-30 00:12:42 25 4
gpt4 key购买 nike

我正在使用 SslStream 进行 SSL3 握手,但是,尽管我尽了最大努力,SslStream 从未代表我发送客户端证书。这是代码:

SSLConnection = new System.Net.Security.SslStream(SSLInOutStream, false, new System.Net.Security.RemoteCertificateValidationCallback(AlwaysValidRemoteCertificate), new System.Net.Security.LocalCertificateSelectionCallback(ChooseLocalCertificate));

X509CertificateCollection CC = new X509CertificateCollection();
CC.Add(Org.BouncyCastle.Security.DotNetUtilities.ToX509Certificate(MyLocalCertificate));

SSLConnection.AuthenticateAsClient("test", CC, System.Security.Authentication.SslProtocols.Ssl3, false);

然后我让 AlwaysValidRemoteCertificate 返回 true,而 ChooseLocalCertificate 返回数组的第零个元素。

代码可能看起来有点奇怪,因为项目有点奇怪,但我认为这不是重点。 SSL 握手完成。问题是,SslStream 没有代表我发送证书消息(在握手过程中),而是使用 ASN.1 编码证书 (MyLocalCertificate),而是发送 SSL 警报编号 41(无证书),然后继续。我从数据包嗅探中知道这一点。握手完成后,SslStream将IsAuthenticated标记为true,IsMutuallyAuthenticated标记为false,其LocalCertificate成员为null。

我觉得我可能在这里遗漏了一些非常明显的东西,所以任何想法都将不胜感激。我是 SSL 的新手,这个项目不走寻常路,所以我有点不知所措。

附言1:我的 ChooseLocalCertificate 例程在握手期间被调用了两次,并且两次都返回了一个有效的(据我所知)非空证书。

附言2:SSLInOutStream是我自己的类,不是NetworkStream。不过就像我说的那样,握手通常是正常进行的,所以我怀疑这是罪魁祸首……但谁知道呢?

最佳答案

出于某种原因,该网站不允许我对上面发布的解决方案发表评论,但它解决了我的问题。这是我的评论:

嘿,这是一个很好的猜测,它解决了我的问题。非常感谢你。 C# X509Certificate 类似乎不支持设置私钥,但子类 X509Certificate2 支持。我不得不对 BouncyCaSTLe 的东西进行一些修改,但是实现(如果将来有人需要的话)是这样的:

X509CertificateCollection CC = new X509CertificateCollection();
X509Certificate2 C2 = new X509Certificate2(MyLocalCertificate.GetEncoded());
C2.PrivateKey = Org.BouncyCastle.Security.DotNetUtilities.ToRSA((Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters)MyPrivateKey.Private);
CC.Add(C2);

MyLocalCertificate 是 bouncycaSTLe 的 X509Certificate 类的实例,而 MyPrivateKey 是 bouncycaSTLe 的 AsymmetricCipherKeyPair 的实例。

关于c# - 无法通过 SslStream 发送客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2932787/

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