Cada vez mais pessoas estão conectadas à Web e em mais lugares.
Estamos conectados com nossos laptops, smartphones e tablets e, provavelmente, em breve, também com dispositivos pessoais e acessórios. Nós acessamos a Internet de redes não confiáveis e, às vezes, até hostis. Com grande parte das nossas vidas on-line, é fundamental tomar medidas para proteger nossos dados e os de usuários.
Acima de tudo, como desenvolvedores, precisamos entender a necessidade e a praticidade do SSL.
O que é SSL? A sigla em inglês significa "Secure Sockets Layer" e é um protocolo criptográfico projetado para fornecer segurança de comunicação na Internet. Ele garante a privacidade, usando criptografia e integridade, para evitar espionagem ou adulteração da sua conexão de Internet. O SSL tem suas falhas, mas é o principal, e realmente a única maneira, de garantir qualquer tipo de segurança de comunicação de dados na Internet.
De acordo com a SSL Pulse, há um ano, tínhamos pouco menos de 15% de adoção do SSL. Agora, estamos com mais de 50% de adoção.
Duas siglas:
TLS:para a maioria das intents e finalidades, é o mesmo que SSL. O SSL 3.1 foi renomeado como TLS, e TLS é o nome padrão IETF. Mas eles são intercambiáveis!
HTTPS: trata de HTTP sobre SSL, apenas a camada dos recursos de segurança do SSL e do HTTP padrão. Primeiro, o handshake de cliente-servidor, usando a criptografia de chave pública/privada para criar uma chave compartilhada, que é usada pela segunda parte do protocolo SSL para criptografar a comunicação.
Fazer networking na Internet pode parecer seguro, imediato e rápido. Parece que estamos conversando diretamente com o site. Mas, na realidade, não é uma conexão direta. Nossas comunicações passam por um roteador Wifi, um ISP e possivelmente outros proxies intermediários entre seu dispositivo e o site. Sem o HTTPS, todas as nossas comunicações são em texto simples.
O problema é que os usuários raramente digitam um URL completo especificando o HTTPS, ou clicam em um link usando HTTP. E, para piorar, é possível montar um ataque (wo)man-in-the-middle e substituir o HTTPS por HTTP. Uma ferramenta chamada SSLstrip, lançada em 2009, faz exatamente isso. A Firesheep, de 2010, só ouvia redes Wi-Fi abertas para que os cookies fossem enviados de forma clara: isso significava que você podia ouvir no bate-papo ou fazer login na conta do Facebook de alguém.
Mas o SSL é (relativamente) barato, rápido e fácil de implantar. Confira ssllabs.com e o livro High Performance Browser Networking de Ilya Grigorik. Para uso não comercial, é possível receber certificados sem custo financeiro em startssl.com. A fixação de chave pública foi criada para oferecer aos operadores de sites uma forma de restringir quais autoridades de certificação podem emitir certificados para os sites deles.
"Em janeiro deste ano (2010), o Gmail passou a usar HTTPS em tudo por padrão. Para fazer isso, não tivemos que implantar máquinas adicionais nem hardware especial. Em nossas máquinas de front-end de produção, o SSL é responsável por menos de 1% da carga da CPU, menos de 10 KB de memória por conexão e menos de 2% da sobrecarga de rede...
Se você parar de ler agora, só vai precisar lembrar de uma coisa: o SSL não é mais caro do ponto de vista computacional.”
– Overclocking SSL, Adam Langley (Google)
Por último, alguns bugs que vemos com mais frequência:
- Conteúdo misto:sites que usam HTTP e HTTPS. Seu usuário vai ficar irritado porque precisa clicar em um botão de permissão para carregar o conteúdo. O Chrome e o Firefox, na verdade, impedem conteúdo misto de iframes. Verifique se todos os recursos em uma página HTTPS são carregados por HTTPS usando URLs relativos ou relativos a esquemas, por exemplo,
<style src="//foo.com/style.css">
. - Cookies não seguros:são enviados claramente usando uma conexão HTTP. Para evitar isso, defina o atributo "secure" nos cabeçalhos de cookies. Também é possível usar um novo cabeçalho "Strict Transport Security" para exigir segurança de transporte SSL (HSTS).
Takeaways
- Se você se preocupa com a privacidade e a integridade dos dados dos usuários, é necessário usar SSL. Está mais rápido, fácil e barato do que nunca.
- Evite problemas comuns de implementação, como bugs de conteúdo misto ou não configurar os bits de cabeçalho HTTP corretos.
- Use URLs relativos de esquema ou relativos.
- Confira algumas novidades, como HSTS e fixação de certificados
Apresentações: Você tem SSL?