0
我將一個java client的mumble移植到C#,並且我碰到了一堵磚牆。將Java應用程序從Java移植到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? – 2012-03-08 11:48:36
SSL流有一個屬性,告訴你使用的加密類型,在這種情況下,AES,強度爲128.事實證明,我遇到的問題不是服務器忽略的東西,它是包佈局的錯誤文檔。但是,我仍然想知道是否有辦法強制加密到256位。 – Martin 2012-03-09 00:30:23
當然,只啓用服務器上使用AES-256的密碼套件。你可以在客戶端做同樣的事情,但這可能會稍微困難一些。快速谷歌發現:http://stackoverflow.com/questions/91304/nets-sslstream-is-always-negotiating-to-the-least-secure-cipher-i-have-how-ca – 2012-03-10 13:43:24