Problemas na socket SSl parte 2

0 respostas
S

Saudações programadores.

Após investigar na internet eu desnvolvi o seguinte codigo. 8)

CLIENTE:

package socket_seguro_cliente;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
import java.security.Security;
import javax.net.ssl.SSLSocket;

import javax.net.ssl.SSLSocketFactory;

public class Main {

  public static void main(String args[]) throws Exception {

    System.setProperty("javax.net.ssl.trustStore", "c:\\cliente.jks");
    System.setProperty("javax.net.ssl.trustStorePassword", "123456");

    System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

    System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
    System.setProperty("javax.net.ssl.trustStore", "c:\\cliente.jks");
    System.setProperty("javax.net.ssl.keyStorePassword", "123456");//Aqui a senha deste certificado

    System.setProperty("javax.net.ssl.trustStoreType", "JKS");
    System.setProperty("javax.net.ssl.trustStore", "c:\\keystore.keystore");//Aqui vem o arquivo criado através do comando keytool no passo 3
    System.setProperty("javax.net.ssl.trustStorePassword", "123456");//Aqui a senha deste keystore


    SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory.getDefault();

    SSLSocket socket = (SSLSocket) ssf.createSocket("localhost",9999);;

    socket.setEnabledCipherSuites(socket.getEnabledCipherSuites());

    socket.startHandshake();

    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    
    String x = in.readLine();
    System.out.println(x);
    in.close();

  }
}

SERVIDOR

package socket_seguro_servidor;

import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.Security;
import javax.net.ssl.SSLServerSocket;

import javax.net.ssl.SSLServerSocketFactory;

public class Main {
  public static void main(String args[]) throws Exception {

    System.setProperty("javax.net.ssl.trustStore", "c:\\servidor.jks");
    System.setProperty("javax.net.ssl.trustStorePassword", "123456");

    System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

    System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
    System.setProperty("javax.net.ssl.trustStore", "c:\\servidor.jks");
    System.setProperty("javax.net.ssl.keyStorePassword", "123456");//Aqui a senha deste certificado

    System.setProperty("javax.net.ssl.trustStoreType", "JKS");
    System.setProperty("javax.net.ssl.trustStore", "c:\\keystore.keystore");//Aqui vem o arquivo criado através do comando keytool no passo 3
    System.setProperty("javax.net.ssl.trustStorePassword", "123456");//Aqui a senha deste keystore

    SSLServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();

    SSLServerSocket servidorSSL = (SSLServerSocket) ssf.createServerSocket(9999);

    servidorSSL.setEnabledCipherSuites(servidorSSL.getSupportedCipherSuites());

    Socket s = servidorSSL.accept();


      
      PrintStream out = new PrintStream(s.getOutputStream());
      out.println("Hi");
      out.close();
      s.close();
    

  }
}

O programa Servidor vai enviar uma mensagem "Hi" ao programa Cliente. No entanto ao executar os programas eu obtenho a seguinte excepcao.

run:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1682)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:932)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1139)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
        at socket_seguro_cliente.Main.main(Main.java:104)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

Por favor quem souber alguma coisa sobre certificados ou sockets SSL em java , ou que ja tenha enfrentado um problema semelhante , eu agradecia imenso que me desse umas dicas ou me dissesse o que é que eu posso fazer para corrigir este problema. :roll:

Muito obrigado pela atenção e felicidades. :)

Criado 12 de julho de 2010
Respostas 0
Participantes 1