ssl是否必须使用密钥库和信任库?

时间:2013-05-12 13:43:22

标签: java android networking

我有以下使用SSL的客户端和服务器:

客户端代码(桌面):

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

服务器代码(Android):

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

我在没有truststore和keystore的情况下使用它们。它们是强制性的吗?

2 个答案:

答案 0 :(得分:0)

如果要求提供证书,您只需要一个密钥库,即如果您是服务器或服务器需要客户端身份验证。

Java附带了一个默认信任库。如果您没有指定另一个,则使用它。

请勿启用已禁用的密码套件。他们是不安全的。你只是避免了这个问题。解决它。

答案 1 :(得分: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();
   }