====== Certificados digitais ====== Esta prática de laboratório visa explorar o uso de certificados digitais X.509 no âmbito da Web. ===== Explorando certificados ===== Acesse os sites Web da lista abaixo e analise os certificados que eles oferecem ao navegador: * https://carrinho.americanas.com.br * https://sites.google.com * https://listas.inf.ufrgs.br Para cada site acessado, responda às seguintes questões: * quem emitiu o certificado? * qual o período de validade do certificado? * qual a finalidade do certificado (conforme informado no campo de extensão ''Key Usage'', se estiver presente)? * qual a cadeia de certificação estabelecida? ===== Explorando a cadeia de certificação ===== O utilitário [[http://www.openssl.org|OpenSSL]] oferece várias funcionalidades para trabalhar com certificados SSL/TLS. Por exemplo, o comando abaixo permite visualizar a cadeia de certificação de um determinado serviço de rede: openssl s_client -showcerts -connect www.server.com:port_number Usando esse programa, analise a cadeia de certificação dos sites indicados no exercício anterior. Existem informações que não haviam sido encontradas anteriormente? ===== Criando uma CA e assinando certificados ===== Este roteiro (adaptado [[http://cs.uccs.edu/~cs691/crypto/openssl/example.htm|deste site]]) compreende a criação dos arquivos básicos que definem uma Autoridade Certificadora (CA) e do seu uso para assinar digitalmente o certificado de um site Web seguro. == Na CA == Criar a estrutura de diretórios e arquivos usados pela CA, de acordo com os valores //default// definidos em ''/usr/lib/ssl/openssl.cnf'': mkdir demoCA demoCA/private demoCA/newcerts touch demoCA/index.txt echo "01" > demoCA/serial Gerar o certificado digital de nossa CA "raiz" (auto assinado), com validade (por exemplo) para 10 anos: openssl req -new -x509 -out certificate.pem -days 3650 O certificado é gerado em no formato [[http://en.wikipedia.org/wiki/Privacy_Enhanced_Mail|PEM]] (//Privacy Enhanced Mail//). Pode-se visualizar o conteúdo do certificado recém gerado em um formato textual usando: openssl x509 -inform pem -in certificate.pem -text A seguir, mover o certificado e a chave privada da CA para os locais adequados: mv certificate.pem demoCA/cacert.pem mv privkey.pem demoCA/private/cakey.pem == No servidor Web == Inicialmente, gerar um **certificado auto-assinado** para o site Web seguro: openssl req -nodes -new -x509 -keyout site_privkey.pem -out site_certif_self.pem -days 365 O certificado auto-assinado ''site_certif_self.pem'' e sua respectiva chave privada ''site_privkey.pem'' gerados nesta etapa poderiam ser usados na configuração de um site Web auto-certificado. Um site auto-certificado oferece comunicação segura do ponto de vista da confidencialidade, mas sua autenticidade não pode ser confirmada pelo cliente. A partir do certificado auto-assinado, deve ser gerada uma **requisição de assinatura de certificado**, a ser enviada à CA: openssl x509 -x509toreq -in site_certif_self.pem -signkey site_privkey.pem -out site_request.pem O arquivo ''site_request.pem'' será enviado à CA para ser assinado digitalmente. Esse envio pode ser feito por e-mail ou outro meio, mesmo que não seguro. == Na CA == Quando a CA recebe a requisição de assinatura de certificado, ela o assina usando sua chave privada e seu próprio certificado: openssl ca -policy policy_anything -out site_certif_signed.pem -infiles site_request.pem O certificado do site assinado pela CA pode ser visualizado através do seguinte comando: openssl x509 -inform pem -in site_certif_signed.pem -text A CA então envia o certificado assinado por ela (''site_certif_signed.pem'') de volta para o site Web. == No servidor Web == Os arquivos ''site_certif_signed.pem'' (certificado assinado pela CA) e ''site_privkey.pem'' (chave privada do site) podem então ser **instalados no servidor Web**, de acordo com a configuração de cada servidor. Os arquivos ''site_certif_self.pem'' e ''site_request.pem'' podem ser descartados, pois não têm mais utilidade. Sugestões de servidores Web para testar o certificado: Apache, Lighttpd e NGinx. == No navegador (cliente) == * Acesse o servidor Web seguro a partir de outra máquina. O que aconteceu? * Para que o navegador aceite o certificado do site Web seguro, ele deve ter o certificado da entidade certificadora (CA) armazenado em sua base de certificados. Por isso, inclua o certificado de nossa CA (arquivo ''demoCA/cacert.pem'') no repositório de certificados do navegador. * Acesse novamente o servidor Web seguro. Mudou algo?