【发布时间】:2012-03-08 03:36:00
【问题描述】:
我正在将 mumble 的 java client 移植到 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 进行此连接?
【问题讨论】:
-
如果协议不允许,为什么服务器会接受 AES-128 连接?你怎么知道你的 java 客户端使用的是 AES-256,你怎么知道你的 C# 客户端使用的是 AES-128?
-
SSL 流有一个属性可以告诉您使用的加密类型,在本例中为 AES,强度为 128。事实证明,我遇到的问题不是服务器忽略了一些事情,而是数据包布局的错误文档。但是,我仍然想知道是否有办法强制加密为 256 位。
-
当然,只需在服务器上启用那些使用 AES-256 的密码套件。您可以在客户端做同样的事情,但这可能会稍微困难一些。快速谷歌发现:stackoverflow.com/questions/91304/…
标签: c# java ssl .net-4.0 cryptography