gpt4 book ai didi

c# - BouncyCaSTLe .NET 自定义 TlsClient for anon CipherSuite 在 Android 上工作,但不是 Windows

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:04 29 4
gpt4 key购买 nike

我可以访问一个 java 应用程序,它使用 CipherSuite TLS_ECDH_anon_WITH_AES_256_CBC_SHA 进行通信(不可能使用另一个)。

前段时间我不得不用 C# 编写一个 Xamarin 应用程序,它使用 Bouncy CaSTLe PCL 成功连接到它。我不得不使用 Bouncy CaSTLe,因为 Android (>=6.0) 默认不允许使用前面提到的密码套件。

现在,我必须在 Windows 上编写一个 .NET 应用程序,它将连接到完全相同的 Java 应用程序,所以我只是复制了用于建立连接的代码并从 NuGet 安装了 Bouncy CaSTLe。 TcpClient 能够建立连接,但是从下面的示例代码调用 protocol.Connect(new CustomTlsClient()); 给我异常“System.IO.IOException:内部 TLS 错误,这可能成为攻击”。

覆盖“CustomTlsClient”的 NotifyAlertRaised 告诉我,Bouncy CaSTLe 无法读取记录(AlertLevel:2,AlertDescription:80,消息:“读取记录失败”,异常:“Org .BouncyCaSTLe.Crypto.Tls.TlsFatalAlert: internal_error(80)").

缩短示例代码:

...
TcpClient client = tryConnect(ip, port); // simply returns a TcpClient on success
NetworkStream targetStream = client.GetStream();
targetStream.ReadTimeout = Config.Network.TcpStreamReadTimeout;
targetStream.WriteTimeout = Config.Network.TcpStreamWriteTimeout;

TlsClientProtocol protocol = new TlsClientProtocol(targetStream, new Org.BouncyCastle.Security.SecureRandom());
protocol.Connect(new CustomTlsClient()); // <---- Here's the problem
...

CustomTlsClient:

private class CustomTlsClient : DefaultTlsClient
{
public override TlsAuthentication GetAuthentication() => new CustomTlsAuthentication();
public override int[] GetCipherSuites() => new[] { CipherSuite.TLS_ECDH_anon_WITH_AES_256_CBC_SHA };

public override void NotifyAlertRaised(byte alertLevel, byte alertDescription, string message, Exception cause)
{
// This gave me further information on the error
base.NotifyAlertRaised(alertLevel, alertDescription, message, cause);
Console.WriteLine("AlertLevel: " + alertLevel);
Console.WriteLine("AlertDescription: " + alertDescription);
Console.WriteLine("Message: " + message);
Console.WriteLine("Exception: " + cause);
}
}

private class CustomTlsAuthentication : TlsAuthentication
{
public TlsCredentials GetClientCredentials(CertificateRequest certificateRequest) => null;
public void NotifyServerCertificate(Certificate serverCertificate) { }
}

由于此代码在带有 Bouncy CaSTLe PCL 版本的 Xamarin 应用程序中运行,我真的不知道我在这里做错了什么……有什么建议吗?任何帮助表示赞赏!提前谢谢你。

最佳答案

这个问题似乎是一个只出现在专用 .NET NuGet 包中的错误;卸载并安装 Portable.BouncyCastle而是在不更改一行代码的情况下解决了问题。

关于c# - BouncyCaSTLe .NET 自定义 TlsClient for anon CipherSuite 在 Android 上工作,但不是 Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48995332/

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