Prezados bom dia,
to implementando um servidor e cliente via socket SSL para transferir dados porem ta dando erro o servidor roda e o cliente tb quando o cliente tenta conectar
da um erro mas eu acho qu e do certificado… ja fucei na internet inteira tudo quanto e tipo de tutorial pra poder montar o que to querendo… mas acho que to fazendo errado…
estou especificadamenteo tentando enviar ObjectOutputStream e ObjectInputStream a conexao sem ser ssl eu consegui enviar e receber mas quando fui implementar um servidor ssl ai ja ta dando erro
segue o codigo do servidor e erro
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.tupinamba.src.server;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
/**
*
* @author Saulobt
*/
public class SSLServerSocketImpl extends Server {
private boolean ON_OFF = true;
private int PORT_SSL = Integer.parseInt(br.com.tupinamba.src.util.PropertiesLoaderImpl.getValor("PORT_SSL"));
private SSLServerSocketFactory serverSocketFactory;
private SSLServerSocket serverSocket;
private SSLContext context;
private SSLSocketFactory factory;
private SSLSocket socket;
@Override
public int getPORT() {
return this.PORT_SSL;
}
@Override
public void listening() {
while (ON_OFF) {
try {
System.out.println("Aguardando Conexão !");
System.out.println("Server listening...");
System.out.println("Port: " + getPORT());
socket = (SSLSocket) serverSocket.accept();
new NewResourceImplSSL(socket).start();
} catch (IOException ex) {
Logger.getLogger(ServerSocketImpl.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();
}
}
}
@Override
public void initcomponets() {
try {
/*String keystore = "mySRCKeystore";
char keystorepass[] = "mypassword".toCharArray();
char keypassword[] = "passwordmy".toCharArray();
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keystore), keystorepass);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, keypassword);
context = SSLContext.getInstance("TLS");
context = SSLContext.getInstance("SSLv3");
context.init(kmf.getKeyManagers(), null, null);*/
serverSocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
serverSocket = (SSLServerSocket) serverSocketFactory.createServerSocket(PORT_SSL);
listening();
/* } catch (KeyStoreException ex) {
Logger.getLogger(ServerSocketImpl.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(ServerSocketImpl.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();
} catch (CertificateException ex) {
Logger.getLogger(ServerSocketImpl.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();
} catch (UnrecoverableKeyException ex) {
Logger.getLogger(ServerSocketImpl.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();
} catch (KeyManagementException ex) {
Logger.getLogger(ServerSocketImpl.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();*/
} catch (IOException ex) {
Logger.getLogger(ServerSocketImpl.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();
}
}
@Override
public void Start() {
ON_OFF = true;
}
@Override
public void Stop() {
ON_OFF = false;
}
@Override
public Socket getSocket() {
return this.socket;
}
}
devolvo assim meu recurso…
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.tupinamba.src.server;
import br.com.tupinamba.src.core.Resource;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
/**
*
* @author Saulobt
*/
public class NewResourceImplSSL extends Thread implements Resource {
private SSLSocket sslsocket;
//private final Socket socket;
public NewResourceImplSSL(SSLSocket socket) {
this.sslsocket = socket;
//initComponet();
}
@Override
public void run() {
ObjectOutputStream out = null;
ObjectInputStream in = null;
try {
//super.run();
out = new ObjectOutputStream(sslsocket.getOutputStream());
in = new ObjectInputStream(sslsocket.getInputStream());
//devolve um linkedlist<clientes>
List<Clientes> lista Pesquisa.getCleintes();
out.writeObject(lista);
out.close();
in.close();
sslsocket.close();
} catch (IOException ex) {
Logger.getLogger(NewResourceImplSSL.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
out.close();
} catch (IOException ex) {
Logger.getLogger(NewResourceImplSSL.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
@Override
public Object getResouceObject() {
throw new UnsupportedOperationException("Not supported yet.");
}
}
quando executo e rodo o cliente da esse erro:
server:
Mai 23, 2012 10:49:18 AM br.com.tupinamba.src.server.NewResourceImplSSL run
Grave: null
javax.net.ssl.SSLHandshakeException: no cipher suites in common
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1868)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:266)
at sun.security.ssl.ServerHandshaker.chooseCipherSuite(ServerHandshaker.java:892)
at sun.security.ssl.ServerHandshaker.clientHello(ServerHandshaker.java:620)
at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:167)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:998)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1294)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:685)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:111)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1857)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1766)
at java.io.ObjectOutputStream.<init>(ObjectOutputStream.java:246)
at br.com.tupinamba.src.server.NewResourceImplSSL.run(NewResourceImplSSL.java:45)
Exception in thread "Thread-0" java.lang.NullPointerException
at br.com.tupinamba.src.server.NewResourceImplSSL.run(NewResourceImplSSL.java:59)
client:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1943)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1059)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1294)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:685)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:111)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1857)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1766)
at java.io.ObjectOutputStream.<init>(ObjectOutputStream.java:246)
at br.com.tupinamba.src.client.SSLObjectResource.getResource(SSLObjectResource.java:65)
at JFRecursos.getSSL(JFRecursos.java:181)
at JFRecursos.jButton2ActionPerformed(JFRecursos.java:113)
at JFRecursos.access$100(JFRecursos.java:20)
at JFRecursos$2.actionPerformed(JFRecursos.java:65)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at br.com.tupinamba.src.client.SSLObjectResource.getResource(SSLObjectResource.java:82)
at JFRecursos.getSSL(JFRecursos.java:181)
at JFRecursos.jButton2ActionPerformed(JFRecursos.java:113)
at JFRecursos.access$100(JFRecursos.java:20)
at JFRecursos$2.actionPerformed(JFRecursos.java:65)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
eu to achando que nao to implementando o arquivo de certificado direito, no código do servidor ta comentado a parte que configura o certificado… extraido de varias pesquisa sovre implementação de ssl socket pois cada um dava um exemplo e incompleto… mas eu acho que ta faltando algo!
e gostaria de saber, só consigo rodar um socket ssl com um arquivo de certificado ou pode ser sem e a própria api se encarrega de criptografar od dados sem a checagem de assinaturas…
?