Saudações programadores.
Após investigar na internet eu desnvolvi o seguinte codigo. 8)
CLIENTE:
[code]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();
}
} [/code]
SERVIDOR
[code] 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();
}
} [/code]
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.