Protocolo de Transmissão de Dados O HyperText Transfer Protocol nasceu quando Tim Bernard Lee, em 1991, escreveu o 1° cliente e o 1° servidor web. Surgia o HTML e o HTTP. Ele foi criado porque os protocolos existentes na época não atendiam às necessidades da comunidade científica. Surgiu da necessidade de distribuir informações pela rede, e para que essa distribuição fosse possível, foi necessário criar uma forma padronizada de comunicação entre os clientes e os servidores da Web, para ser entendido por todos os computadores ligados à Internet. Ao ser criado, o protocolo HTTP passou a ser utilizado para a comunicação entre computadores na Internet e passou a especificar como seriam realizadas as transações entre clientes e servidores, através do uso de regras básicas. O HTTP é um protocolo de aplicação responsável pelo tratamento de pedidos e respostas entre cliente e servidor na Internet. Normalmente, este protocolo utiliza a porta 80 e é usado para a comunicação de páginas web, comunicando na linguagem HTML. Contudo, para haver comunicação com o servidor do sítio, é necessário utilizar comandos adequados, que não estão em linguagem HTML. Para que o protocolo HTTP consiga transferir seus dados pela Web, é necessário que os protocolos TCP e IP (Internet Protocol) tornem possível a conexão entre clientes e servidores. O HTTP utiliza o modelo cliente/servidor como a maioria dos protocolos de rede, baseando-se no paradigma de requisição e resposta. Um programa requisitante (cliente) estabelece uma conexão com um outro programa receptor (servidor) e envia-lhe uma requisição, contendo a URL, a versão do protocolo, uma mensagem MIME (padrão utilizado para codificar dados em formato de textos ASCII para serem transmitidos pela Internet) contendo os modificadores da requisição, informações sobre o cliente e, possivelmente, o conteúdo no corpo da mensagem. O servidor responde com uma linha de status (status line) incluindo sua versão de protocolo e um código de operação bem sucedida ou um código de erro, seguido pelas informações do servidor. Com a necessidade de enviar/receber dados de forma segura, o protocolo HTTP foi “combinado” com o SSL, formando o HTTPS. É a maneira mais comum atualmente de trafegar documentos via web de maneira segura. O HTTPS provê encriptação de dados, autenticação de servidor, integridade de mensagem e autenticação de cliente por meio de certificados e assinaturas digitais. A porta usada pelo HTTPS é a 443. O protocolo HTTPS é utilizado, em regra, quando se deseja evitar que a informação transmitida entre o cliente e o servidor seja visualizada por terceiros, como por exemplo no caso de compras online. A existência na barra de tarefas (normalmente do lado direito) de um cadeado demonstra a certificação de página segura (SSL). SSL (do inglês security sockets layer) é um aplicativo cliente/servidor que permitem trocas de informações em total segurança, protegendo a integridade e a veracidade do conteúdo que trafega na Internet. Tal segurança só é possível através da autenticação das partes envolvidas na troca de informações. Desenvolvida pela Netscape Communications, confere segurança de comunicação através da autenticação e encriptação dos pacotes na internet para serviços como servidores de email (SMTP), navegação por páginas (HTTP), dentre outros. Ele fica entre a camada de aplicação e a camada de transporte. Um site seguro, deve possuir 3 componentes essenciais para a comunicação segura: o servidor, o software seguro (que faz o trabalho de criptografia) e o certificado de assinatura (assinatura digital). Este software seguro é proprietário, vendido, por exemplo, pela Verisign (a mais conhecida atualmente). O software pode ser instalado na própria máquina do servidor, junto à assinatura digital (uma chave de 512 bits), ou pode estar em um servidor compartilhado. Privacidade: Uma mensagem é transmitida de A para B. Neste caso A usa a chave pública de B para criptografar a mensagem, tornando B a única pessoa que pode decodificar a mensagem, usando a sua chave privada. Não podemos entretanto ter certeza quanto a identidade de A. Autenticidade: De modo a garantir a autenticidade de A no caso anterior, um sistema de códigos um pouco mais complexo é necessário. A mensagem de A para B é primeiramente criptografada com a chave privada de A e posteriormente com a chave pública de B. Para decodificar a mensagem, B usa primeiro sua chave privada e depois a chave pública de A. Agora B pode ter certeza de que A é realmente quem diz ser, pois ninguém mais poderia criptografar a mensagem usando a chave privada de A. Integridade: No SSL, a integridade é garantida pelo uso do MAC (Message Authentication Code) com as necessárias funções da tabela hash. Na geração de uma mensagem, o MAC é obtido por aplicação das funções da tabela hash e é codificado junto com a mensagem. Após a mensagem ser recebida sua validade pode ser checada comparando-se o MAC com o resultado obtido pela reversão das funções hash. Isto previne mensagens alteradas por terceiros durante a transmissão. Não - Repudiação: A segurança das transações é dependente das chaves de criptografia. Se uma dessas chaves cair em mãos erradas, pode ser facilmente duplicada e usada para comprometer a segurança. Um sistema totalmente seguro deve ser capaz de detectar impostores ou, ainda melhor, se prevenir contra a duplicação das chaves. Isto é executado por um hardware baseado em ficha única. O SSL não suporta sozinho esta implementação, mas a realiza em conjunto com Fortezza (sistema de criptografia usado pelas agências do governo americano para manejar informações sensíveis porém não confidenciais). O cliente sempre inicia a conexão. Quando o usuário solicita a conexão com um site seguro, o navegador (Firefox, Opera..) solicita o envio do certificado digital e verifica: > Se o certificado enviado é confiável; > Se o certificado é válido; > Se certificado está relacionado com o site que o enviou. Uma vez que as informações (do slide anterior) tenham sido confirmadas, a chave pública é enviada e as mensagens podem ser trocadas. Uma mensagem que tenha sido criptografada com uma chave pública somente poderá ser decifrada com a sua chave privada (simétrica) correspondente. O SSL possui 2 camadas de protocolo: Handshake e record. > Handshake: Usado para coordenar os estados entre cliente e servidor. Os Certificados são trocados entre o cliente e o servidor para provar suas identidades. A chave pública do servidor é retirada desse certificado. Record: A camada SSL Record encapsula vários protocolos de alto nível, e usa a definição do estado corrente para selecionar os algoritmos de compressão e criptografia apropriados. Esse estado corrente é determinado durante o handshaking previamente descrito.