2016-06-19 19 views
0

私は最近、メッセージングシステムにSSLソケットを使用しています。一般的なjavaソケットに暗号スイートがありません

私はついにCA発行の証明書を使い始めました。キーストアにキーストアをインポートし、キーストアプロパティを設定してクライアントを起動しましたが、データを送信しようとするとハンドシェイクの例外が発生します。

私はデバッグモードを有効にしましたが、その原因はno cipher suites supportedです。これについての考えは?

TLSV1とTLSV1.1から約10の暗号スイートを無視しているとも言われています。

また、無制限強度暗号化ポリシーもインストールしました。

クライアントコード

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(); 
     } 
    } 
} 

Serverコード

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) { 
     } 
    } 
} 

編集: 私はパスワードを追加したが、私のエントリ/証明書がキ​​ーを持っていない、可能性これはエラーの原因になりますか?どうすれば修正できますか?

答えて

1

驚いたことに、これはサーバーが秘密キーと証明書のペアを見つけることができなかったことを意味します。この場合は、キーストアのパスワードをjavax.net.ssl.keyStorePasswordで指定していないためです。

+0

私はこれをしましたが、外部ソースから取得したため、キーを設定する必要があります。なぜなら、keytoolを使用するとキーを見つけることができないからです。鍵を生成する必要はありますか? –

+0

「外部ソースから[証明書]を取得する」ことはできませんし、独自の証明書として使用してください。まず、鍵のペアを作成してからCSRを作成し、署名を取得してから、同じエイリアスと「-trustcacerts」オプションを使用せずに同じ鍵ストアに署名付き証明書をインポートする必要があります。 – EJP

+0

さて、私は自分のウェブサイトからSSLを使いました。私のウェブサイトはSSLを使用しています。私は生成したCSRからSSL証明書をダウンロードしました。これはNameCheapを通じて行われました。私は彼らがComodo SSLを通じてそれをすると信じています。 keytoolを使用するときにキーが付いてきたとは思わないが、キーがないと言う。ここで何が起こっているのですか? –

関連する問題