Create app with SSLSocket Java

前端 未结 3 1536
再見小時候
再見小時候 2020-12-09 18:19

I want to create an app use SSLSocket: client send a String to server and server will uppercase that String and send back to client fo

相关标签:
3条回答
  • 2020-12-09 18:39

    Check the certificates that you have installed. Make sure they are supporting the cipher suites that you are negotiating.

    0 讨论(0)
  • 2020-12-09 18:51

    @corVaroxid's answer is right. But if you want to set configurations programmatically to avoid global settings (like me), you can go like below (Kotlin):

    val password = "yourPassword".toCharArray()
    
    val keyStore = KeyStore.getInstance(File("yourKeystorePath.jks"), password)
    
    val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
    trustManagerFactory.init(keyStore)
    
    val keyManagerFactory = KeyManagerFactory.getInstance("NewSunX509")
    keyManagerFactory.init(keyStore, password)
    
    val context = SSLContext.getInstance("TLS") //"SSL" "TLS"
    context.init(keyManagerFactory.keyManagers, trustManagerFactory.trustManagers, null)
    
    val factory = context.serverSocketFactory
    
    (factory.createServerSocket(LISTENING_PORT) as SSLServerSocket).use { serverSocket ->
        logger.trace("Listening on port: $LISTENING_PORT")
    
        // ...
    }
    

    Or in Java:

    final char[] password = "yourPassword".toCharArray();
    
    final KeyStore keyStore = KeyStore.getInstance(new File("yourKeystorePath.jks"), password);
    
    final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    trustManagerFactory.init(keyStore);
    
    final KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("NewSunX509");
    keyManagerFactory.init(keyStore, password);
    
    final SSLContext context = SSLContext.getInstance("TLS");//"SSL" "TLS"
    context.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
    
    final SSLServerSocketFactory factory = context.getServerSocketFactory();
    
    try (SSLServerSocket serverSocket = ((SSLServerSocket) factory.createServerSocket(LISTENING_PORT))) { 
        logger.trace("Listening on port: " + LISTENING_PORT);
    
        // ...
    }
    
    0 讨论(0)
  • 2020-12-09 18:55

    This will generate certificate:

    keytool -genkey -keystore yourKEYSTORE -keyalg RSA
    

    Enter yourPASSWORD and than start your server with ssl debug information(put yourKEYSTORE into directory with SSLServer.class):

    java -Djavax.net.ssl.keyStore=yourKEYSTORE -Djavax.net.ssl.keyStorePassword=yourPASSWORD -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.debug=ssl SSLServer
    

    Than start your client(put yourKEYSTORE into directory with SSLClient.class):

    java -Djavax.net.ssl.trustStore=yourKEYSTORE -Djavax.net.ssl.trustStorePassword=yourPASSWORD SSLClient
    
    0 讨论(0)
提交回复
热议问题