A encriptação protege dados contra uso não autorizado, utilizando algoritmos criptográficos, antes da transmissão. O dado é criptografado em um lado (cliente ou servidor), transmitido, decifrado pelo outro lado e, então, processado.
A autenticação é um método para verificar a indentidade do remetente. A primeira vez que um navegador Web ou outro cliente tenta se comunicar com um servidor Web sobre uma conexão segura, o servidor apresenta ao cliente um conjunto de credenciais na forma de um certificado.
Certificados são emitidos e validados por autoridades confiáveis conhecidas como Autoridades Certificadoras (CAs). Um certificado representa a identidade da chave pública de uma pessoa. É um documento assinado que tem por finalidade dizer: "Eu certifico que a cheve pública presente neste documento pertence a entidade nomeada neste documento. Assinado CA". Algumas CAs bastante conhecidas são a Verisign e Entrust. Vale ressaltar que os certificados utilizados com SSL/TLS são certificados X.509.
A integridade de dados refere-se a uma maneira de assegurar que os dados não foram modificados durante a tranmissão
SSL e a pilha de protocolos TCP/IP
Como o próprio nome indica (Camada de Socket Seguro), conexões SSL agem como sockets conectados por TCP. Portanto, podemos pensar as conexões SSL como conexões TCP seguras desde que o lugar do SSL na pilha de protocolos é imediatamente acima do TCP e logo abaixo da camada de aplicação, como mostra a figura 1. Deve-se ressaltar, entretanto, que o SSL não suporta algumas das habilidades do TCP como dados out-of-band.

O protocolo SSL possui duas camadas: "SSL Record Protocol", que é responsável por encapsular outros protocolos de alto nível e a "SSL Handshake Protocol", que recebe os dados a serem codificados/decodificados. Esta segunda camada é responsável pela autenticação do cliente e/ou servidor, negociação do algoritmo criptográfico e suas chaves antes da aplicação receber ou enviar qualquer dado.
Negociação da Encriptação (Handshake)
Dentre as "facilidades" do SSL que o tornaram o veículo padrão para trnasações seguras de comércio eletrônico é o seu suporte para a negociação da encriptação e dos algoritmos de autenticação. Os projetistas do SSL pereceberma que nem todas as partes envolvidas usam o mesmo software cliente e que, conseqüentemente, nem todos os clientes incluem um algortimo criptográfico em particular. O mesmo vale para os servidores. O cliente e os servidores dos dois lados de uma conexão devem, então, ser capazes de negociar os algoritmos de encriptação e decriptação ("cipher suites") durante o handshake inicial. Se eles não tiverem algoritmos suficientes em comum, o handshake deve ser interrompido e a tentativa de conexão irá falhar.
O protocolo SSL permite que tanto o cliente quanto o servidor autentiquem um ao outro, mas, tipicamente, somente o servidor é autenticado na camada SSL. Clientes são, costumeiramente, autenticados na camada de aplicação, por meio de uso de passwords enviados sobre um canal protegido por SSL. Esse padrão é comum em transações bancárias, dentre outras aplicações Web seguras.
Os parâmetros criptográficos do estado de uma sessão são produzidos pelo Handshake do protocolo SSL, que opera no topo da camada Record Layer do SSL. Quando um cliente SSL e um servidor SSL iniciam a comunicação, eles concordam em uma versão do protocolo, escolhem os algortimos criptográficos, autenticam um ao outro (opcionalmente) e usam criptografia de chave pública para gerar os segredos que compartilham. Esses passos são realizados pelo protocolo handshake, que pode ser resumido como segue:

O Java Secure Socket Extension (JSSE), um conjunto de pacotes que habilita comunicação segura na Internet, é um framework que implementa, totalmente em Java, o Secure Soket Layer. Esses pacotes habilitam a construção de aplicações de rede seguras; isso possibilita a passagem, de forma segura e confiável, de dados entre um cliente e um servidor executando qualquer protocolo, como HTTP, FTP, Telnet, entre outros.
Além disso, o JSSE abstrai a complexidade inerente a certos algortimos criptográficos e, portanto, minimiza o risco de criação de vulnerabilidades. Como veremos, o JSSE torna o desenvolvimento de aplicações habilitadas com SSL bastante simples, nos permitindo integrar o SSL de forma fácil. O framework JSSE é capaz de suportar muitos protocolos de comunicação segura como SSL 2.0 e 3.0 e TLS 1.0.
As APIS JSSE complementam os pacotes java.security e java.net, provendo classes que implementam
sockets de rede, gerenciadores de chaves e um framework que funciona como uma fábrica para o encapsulamento do comportamento
de sockets. Essas classes estão incluídas nos pacotes javax.net e
javax.net.ssl.
O principal pacote para a criação de sockets seguros baseados em SSL é o javax.net.ssl. A seguir,
há uma breve descrição de algumas das classes e interfaces desse pacote.
>keytool -genkey -keystore kservidor -keyalg rsa -alias servidorsimples |
>keytool -genkey -keystore kcliente -keyalg rsa -alias clientesimples |
KeyStore ks = Utils.getKeyStore("JKS"); |
SSLContext contextoSSL = Utils.criaSSLContext("SSLv3"); |
ServerSocketFactory ssf = contextoSSL.getServerSocketFactory(); |
if (autCliente){ |
KeyStore ks = Utils.getKeyStore("JKS"); |
>javac ServidorSimplesSSL.java |
>java ServidorSimplesSSL |





>java -Djavax.net.ssl.trustStore=kservidor ClienteSimplesSSL localhost |



import java.io.*; |
import java.io.*; |
import javax.net.ssl.*; |