2012-03-08 115 views
0

我將一個java clientmumble移植到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進行連接?

+0

如果協議不允許,爲什麼服務器會接受AES-128連接?你怎麼知道你的java客戶端正在使用AES-256,你怎麼知道你的C#客戶端正在使用AES-128? – 2012-03-08 11:48:36

+0

SSL流有一個屬性,告訴你使用的加密類型,在這種情況下,AES,強度爲128.事實證明,我遇到的問題不是服務器忽略的東西,它是包佈局的錯誤文檔。但是,我仍然想知道是否有辦法強制加密到256位。 – Martin 2012-03-09 00:30:23

+1

當然,只啓用服務器上使用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

回答

0

沒有你的代碼是好的,但是,由於默認情況下,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"