gpt4 book ai didi

c# - 将 SSL 应用程序从 Java 移植到 C#

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:45 25 4
gpt4 key购买 nike

我正在移植 java client对于 mumble到 C#,我遇到了一些困难。

在 java 中,SSL 套接字是这样初始化的:

final SSLContext ctx_ = SSLContext.getInstance("TLS");
ctx_.init(null, new TrustManager[] { new LocalSSLTrustManager() }, null);
final SSLSocketFactory factory = ctx_.getSocketFactory();
final SSLSocket sslSocket = (SSLSocket) factory.createSocket(hostAddress, port);
sslSocket.setUseClientMode(true);
sslSocket.setEnabledProtocols(new String[] { "TLSv1" });
sslSocket.startHandshake();

我已经将其移植到 C# 中,如下所示:

return ssl = new SslStream(netStream, false, (a, b, c, d) => true); //For now, accept any cert
ssl.AuthenticateAsClient(serverName);

现在,这确实建立了一个连接,但它使用的是 AES128 和 mumble protocol需要 AES256,因此服务器似乎会忽略我在此套接字上发送的任何内容。

我的代码是否正确移植?有没有办法强制 C# 对此连接使用 AES256?

最佳答案

不,您的代码没有问题,但是默认情况下,Windows 似乎未启用 AES256 支持,因为未启用 TLS 1.2。 Java 使用自己的 SSL 实现,显然支持它。结果,在使用c#与服务器协商时,选择了AES128,因为它默认支持最强的密码窗口。

根据这个site运行以下 powershell 脚本应该在 TLS 中启用 AES256 并解决您的问题。在运行它之前,我会确保它没有做任何有趣的事情。

# Enables TLS 1.2 on Windows Server 2008 R2 and Windows 7
# June 27, 2010
# Version 1.2
# These keys do not exist so they need to be created prior to setting values.

md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2"

md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server"

md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client"

# Enable TLS 1.2 for client and server SCHANNEL communications

new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "Enabled" -value 1 -PropertyType "DWord"

new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord"

new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "Enabled" -value 1 -PropertyType "DWord"

new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord"

# Disable SSL 2.0 (PCI Compliance)
md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server"

new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" -name Enabled -value 0 -PropertyType "DWord"

关于c# - 将 SSL 应用程序从 Java 移植到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612540/

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