2014-10-17 104 views
0

好的朋友,所以我創建了一個使用TCP客戶端/服務器套接字的Java聊天。 我創建服務器,然後創建連接到服務器的客戶端,以便它們可以通過服務器彼此進行通信! 代碼:服務器:Java客戶端/服務器SSL套接字聊天

public ServerChat() throws Exception{ 
    ServerSocket soc=new ServerSocket(5217); 


    while(true) 
    {  
     Socket CSoc=soc.accept();   
     //and then the code for handling the messages, we don't need that 

    } 
} 

而且客戶端:

Server soc=new Socket("127.0.0.1",5217); 
Thread t=new Thread(this); 
t.start(); 
//i Have ommited many parts of the code, but you know, i focus on the connection part of the problem!` 

所以,現在,我想用SSL保護(這樣我就可以看到在Wireshark中的變化)。 我使用OpenSSL(它是我的assingment必需的)來創建根CA和設備證書。我將這些文件放在netbeans上的src文件夾中,並將代碼複製到兩個新類SSLServer和SSLClient中,並嘗試了一下SSL部分!所以:

public SSLServer() throws Exception{ 
SSLContext sslContext=????//supposed to add the files somehow here? 
SSLServerSocketFactory factory=(SSLServerSocketFactory)slContext.getServerSocketFactory(); 
SSLServerSocket sslserversocket=(SSLServerSocket) factory.createServerSocket(1234); 
while(true) 
{ 
SSLSocket sslsocket=(SSLSocket)sslserversocket.accept();     
} 
} 

客戶端的東西是一樣的。所以我有點卡在SSLContext部分!我在這裏閱讀了很多線索,但仍然... SSLContext下面的部分是否正確?我如何在SSLContext中使用證書?編輯:也許這會工作? :

KeyStore ks = KeyStore.getInstance("JKS"); 
ks.load(new FileInputStream("keystoreFile"), "keystorePassword".toCharArray()); 

KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509"); 
kmf.init(ks, "keystorePassword".toCharArray()); 

TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); 
tmf.init(ks); 

SSLContext sc = SSLContext.getInstance("TLS"); 
TrustManager[] trustManagers = tmf.getTrustManagers(); 
sc.init(kmf.getKeyManagers(), trustManagers, null); 

SSLServerSocketFactory ssf = sc.getServerSocketFactory(); 
SSLServerSocket s = (SSLServerSocket) ssf.createServerSocket(serverport); 
SSLSocket c = (SSLSocket) s.accept(); 

回答