2016-06-19 2 views
0

Я недавно использовал SSL-сокеты для системы обмена сообщениями.Нет наборов шифров в общих сокетах Java

Я наконец начал использовать сертификат, выданный СА. Я импортировал его в свое хранилище ключей, установил свойство хранилища ключей и запустил мой клиент, но при попытке отправить данные я все время получаю исключения для рукопожатия.

Я включил режим отладки, и я обнаружил, что это связано с no cipher suites supported. Любые мысли по этому поводу?

Если это помогает, в нем также говорится, что он игнорирует около 10 наборов шифров от TLSV1 и TLSV1.1.

Я также установил криптографическую политику неограниченной силы.

Клиентский код

public static void Message(String args){ 
    System.setProperty("https.protocols", "TLSv1"); 
    System.setProperty("javax.net.debug", "all"); 

    try 
    { 
     String host = "localhost"; 
     int port = 3498; 
     InetAddress address = InetAddress.getByName(host); 

     socket = (SSLSocket)SSLSocketFactory.getDefault().createSocket(address, port); 

     //Send the message to the server 
     OutputStream os = socket.getOutputStream(); 
     OutputStreamWriter osw = new OutputStreamWriter(os); 
     BufferedWriter bw = new BufferedWriter(osw); 

     String number = "Hello from the other side!"; 

     String sendMessage = number + "\n"; 
     bw.write(args); 
     bw.flush(); 
     System.out.println("Message sent to the server : "+sendMessage); 

     //Get the return message from the server 

    } 
    catch (Exception exception) 
    { 
     exception.printStackTrace(); 
    } 
    finally 
    { 
     //Closing the socket 
     try 
     { 
      socket.close(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

Серверный код

private void initListen() { 
    System.setProperty("javax.net.ssl.keyStore", "/Users/181095/server.jks"); 
    try { 


     SSLServerSocketFactory sf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault(); 

     SSLServerSocket serverSocket = (SSLServerSocket)sf.createServerSocket(Ting.port); 



     System.out.println("Server Started and listening to the port " 
       + Ting.port); 

     // Server is running always. This is done using this while(true) 
     // loop 
     while (true) { 

      // Reading the message from the client 
      socket = (SSLSocket)serverSocket.accept(); 


      InputStream is = socket.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(is); 
      BufferedReader br = new BufferedReader(isr); 
      String input = br.readLine(); 
      System.out.println("Message received from client is " + input); 
      /*if(PacketReader.isPacket(input)){ 
       if(PacketReader.shouldSendDataBack(input)){ 

       } 
      }*/ 
      /* 
      * 
      * if client has data waiting or client has new data 
      * request new data. 
      * else, wait 5 seconds and repeat 
      * 
      * 
      */ 



      // Sending the response back to the client. 
      /*OutputStream os = socket.getOutputStream(); 
      OutputStreamWriter osw = new OutputStreamWriter(os); 
      BufferedWriter bw = new BufferedWriter(osw); 
      bw.write("");*/ 

      //TODO Implement method to send this data to client storage data. 

      //bw.flush(); 
     } 
    //Check for exceptions and try to close the socket. 
    } catch (Exception e) { 

     e.printStackTrace(); 
     } finally { 
      try { 
       socket.close(); 
      } catch (Exception e) { 
     } 
    } 
} 

Edit: Я просто добавил пароль, но мой вход/сертификат не имеет ключа, может это будет способствовать ошибке? Как я могу это исправить?

ответ

1

Удивительно, но это может означать, что сервер не смог найти пару закрытого ключа/сертификата. В этом случае это связано с тем, что вы не указали пароль хранилища ключей через javax.net.ssl.keyStorePassword.

+0

Я сделал это, но он все еще не работает, потому что я получил от внешнего источника, мне нужно установить ключ, потому что, используя keytool, он не может найти ключ. Нужно ли мне генерировать ключ? –

+0

Вы не можете «получить [сертификат] из внешнего источника» и использовать его как свой собственный сертификат. Вы должны начать с создания пары ключей, затем с помощью CSR, затем ее подписать, а затем импортировать подписанный сертификат в одно хранилище ключей с тем же псевдонимом и без опции '-trustcacerts'. – EJP

+0

Хорошо, поэтому я использовал SSL с моего сайта. Мой сайт использует SSL. Я загрузил SSL-сертификат из созданного CSR. Это было сделано через NameCheap, и я считаю, что они делают это через Comodo SSL. Я не верю, что он пришел с ключом, когда я использую keytool на нем, он говорит, что нет ключа. Что здесь происходит? –

Смежные вопросы