Início‎ > ‎

Usar sockets com criptografia SSL

A plataforma Java incorporou o protocolo SSL (Secure Sockets Layer) a suas bibliotecas padrão, permitindo portanto sua utilização de forma universal e sem afetar a portabilidade das aplicações. Este é um protocolo criptográfico que garante tanto a integridade quanto a confidencialidade das informações que trafegam na rede, além de permitir o uso de certificados digitais para a autenticação das partes envolvidas.

O protocolo SSL está disponível através do JSSE (Java Secure Sockets Extension), tanto na versão servidor (na classe javax.net.ssl.SSLServerSocket) quanto na versão cliente (classe javax.net.ssl.SSLSocket).

O código abaixo demonstra o uso de SSL num servidor (os trechos em itálico indicam com especificidades para o uso de SSL):

import java.io.<classes necessárias>;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;


public class Server {
  int port = portNumber;
  SSLServerSocket server;

  try {
    SSLServerSocketFactory factory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
    server = (SSLServerSocket) factory.createServerSocket(portNumber);
    SSLSocket client = (SSLSocket) server.accept();


    // Criar os streams de input e output da maneira usual
    // enviar mensagens criptografadas ao cliente usando o stream de output
    // receber mensagens criptografadas dos clientes usando o de input

  } catch(<subclasse de Exception> e) {
    ...
  }
}

O código a seguir demonstra o uso de SSL num cliente (os trechos em itálico indicam com especificidades para o uso de SSL):

import java.io.<classes necessárias>;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLServerSocketFactory;


public class Client {

  ...

  try {
    SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
    SSLSocket client = (SSLSocket) factory.createSocket(serverHost, port);


    // Criar os streams de input e output da maneira usual
    // enviar mensagens seguras ao servidor usando o stream de output
    // receber mensagens seguras do servidor usando o de input

  } catch(<subclasse de Exception> e) {
    ...
  }
}

No caso de aplicações web, o protocolo SSL deve ser configurado no servidor, de forma que os acessos à aplicação ocorram por conexões criptografadas.

Comments