2014-11-30 3 views
0

Я пишу специальный сервер для телефона android для обработки запросов https. Он начинается с прослушивания на определенном порту и после установления соединения он выполняет рукопожатие с клиентом. Вот snipet кода:Исключение при использовании SSLEngine

ServerSocket sock = new ServerSocket(8080); 
Socketclient client = sock.accept(); 
doHandshake(client); 

... 

void doHandshake(Socket socket) throws Exception { 
     try { 

      SSLContext context = SSLContext.getDefault(); 
      SSLEngine engine = context.createSSLEngine(); 
      engine.setUseClientMode(false); 

      SSLSession session = engine.getSession(); 
      // Create byte buffers to use for holding application data 
      ByteBuffer myAppData = ByteBuffer.allocate(session.getApplicationBufferSize()); 
      ByteBuffer peerAppData = ByteBuffer.allocate(session.getApplicationBufferSize()); 

      ByteBuffer myNetData = ByteBuffer.allocate(session.getPacketBufferSize()); 
      byte[] peerNetData = new byte[session.getPacketBufferSize()]; 

      // Begin handshake 
      engine.beginHandshake(); 
      SSLEngineResult.HandshakeStatus hs = engine.getHandshakeStatus(); 
      InputStream inputStream = socket.getInputStream(); 
      OutputStream outputStream = socket.getOutputStream(); 

      int bytesRead; 
      // Process handshaking message 
      while (hs != SSLEngineResult.HandshakeStatus.FINISHED && 
        hs != SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) { 

       switch (hs) { 

        case NEED_UNWRAP: 
         // Receive handshaking data from peer 
         bytesRead = inputStream.read(peerNetData); 
         if (bytesRead < 0) { 
          // The channel has reached end-of-stream 
         } 

         ByteBuffer peerData = ByteBuffer.wrap(peerNetData, 0, bytesRead); 

         SSLEngineResult res = engine.unwrap(peerData, peerAppData); 

Когда я указал браузер этого seerver (URL = https://localhost:8080) я получил исключение на "engine.unwrap (peerData, peerAppData)"

javax.net .ssl.SSLProtocolException: SSL-соединение завершено: ssl = 0xb8347db8: ошибка в библиотеке SSL, обычно ошибка протокола ошибка: 1408A0C1: процедуры SSL: SSL3_GET_CLIENT_HELLO: нет общего шифрования (внешний/openssl/ssl/s3_srvr.c: 1394 0xace00e61: 0x00000000)

Что мне не хватает?

ответ

0

Вы должны выбросить этот код. Избавьтесь от SSLEngine и просто используйте SSLSocket, если вы собираетесь использовать потоки. SSLEngine предназначен для использования в неблокирующем режиме с SocketChannels, и достаточно сложно получить это право без добавления потоков в микс.

0

no shared cipher

Неисправность в правильной настройке SSL-сервера. Одна из причин может заключаться в том, что вы не устанавливаете какие-либо сертификаты, и поэтому можно использовать только анонимные шифровые комплекты. Но браузер не поддерживает эти небезопасные шифровые сюиты, и этого нет общего набора шифров между браузером и сервером.

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