2013-05-12 44 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(); 
    }