2013-05-12 43 views
0

我有以下的客戶端和服務器,它使用SSL:ssl是必需的密鑰庫和信任庫嗎?

客戶端代碼(桌面):

 SSLSocket socket= (SSLSocket)sslsf.createSocket(ip,Constants.CHAT_SERVER_PORT); 
     final String[] enabledCipherSuites = socket.getSupportedCipherSuites(); 
     socket.setEnabledCipherSuites(enabledCipherSuites); 

服務器代碼(安卓):

 SSLServerSocket ss=(SSLServerSocket)sslssf.createServerSocket(Constants.CHAT_SERVER_PORT); 
     final String[] enabledCipherSuites = ss.getSupportedCipherSuites(); 
     ss.setEnabledCipherSuites(enabledCipherSuites);   
     while(true){     
      Socket s=ss.accept(); 
     } 

我使用他們不信任和密鑰庫。他們是強制性的?

+0

看到這個職位,我只是舉了一個例子,以建立一個沒有任何HTTPS連接(使用默認值) :http://stackoverflow.com/questions/16504527/android-https-post-how-to-do/16507195?noredirect=1#comment23697931_16507195 – tbkn23 2013-05-12 14:06:31

回答

0

如果您將被要求提供證書,即您是服務器還是服務器需要客戶端身份驗證,則只需要密鑰存儲庫。

默認信任庫隨Java一起提供。如果您不指定另一個,則使用它。

請勿啓用已禁用的密碼套件。他們不安全。你只是避免了這個問題。解決這個問題。

+0

如果我寫的只是「SSLServerSocket ss =(SSLServerSocket)sslssf.createServerSocket( Constants.CHAT_SERVER_PORT); \t「它顯示一條錯誤消息。該消息是「javax.net.ssl.SSLException:找不到任何密鑰庫條目以支持啓用的密碼套件。」在桌面系統(Oracle VM)上,它不會發生。 – 2013-05-13 03:11:33

+0

正是我所說的。你是服務器,所以你需要一個密鑰庫。 – EJP 2013-05-13 06:25:53

+0

好吧,我明白了。謝謝。 – 2013-05-14 04:00:44

0

最後用下面的代碼我已經解決了Android的服務器密鑰庫問題: -

try{     
     String keyStoreType = KeyStore.getDefaultType(); 
     KeyStore keyStore = KeyStore.getInstance(keyStoreType); 
     keyStore.load(Dummy.class.getResourceAsStream("IPMessengerServerKeystore"), "dhar9654".toCharArray());     

     String keyalg=KeyManagerFactory.getDefaultAlgorithm(); 
     KeyManagerFactory kmf=KeyManagerFactory.getInstance(keyalg); 
     kmf.init(keyStore, "dhar9654".toCharArray()); 

     SSLContext context = SSLContext.getInstance("TLS"); 
     context.init(MainActivity.kmf.getKeyManagers(), null, null);   
     SSLServerSocket ss=(SSLServerSocket)context.getServerSocketFactory().createServerSocket(Constants.CHAT_SERVER_PORT); 

    }catch(Exception e){ 
    e.printStackTrace(); 
    }