Certificados e OpenSSL - A Sopa de Letras

A sopa de letras: HTTPS, TLS, SSL, HSTS, CA, PGP, GPG e OpenPGP. Uma breve explicação sobre cada um deles e como se usa.

[ Hits: 11.711 ]

Por: Esli Silva em 30/01/2020 | Blog: https://esli.blog.br


Certificados Auto Assinados



Uma CA é uma organização confiável que pode emitir um certificado digital.

TLS e SSL podem tornar uma conexão segura, mas o mecanismo de criptografia precisa de uma maneira de validá-la; este é o certificado SSL / TLS. O TLS usa um mecanismo chamado criptografia assimétrica, que é um par de chaves de segurança chamadas chave privada e chave pública.

Um certificado auto assinado é um certificado TLS/SSL assinado pela pessoa que o cria e não por uma CA confiável. É fácil gerar um certificado auto-assinado a partir de um computador e pode permitir que você teste um site seguro sem comprar um certificado assinado pela CA.

Embora o certificado auto assinado seja definitivamente arriscado para uso em produção, é uma opção fácil e flexível para o desenvolvimento e teste nos estágios de pré-produção. Mas não é difícil acha-lo em uso em ambientes restritos, como redes internas.

Várias ferramentas de código aberto estão disponíveis para gerenciar certificados TLS / SSL. O mais conhecido é o OpenSSL, que está incluído em quase todas as distribuições Linux. No entanto, outras ferramentas de código aberto também estão disponíveis.

Alguns outros:
  • EasyRSA - Utilitário de linha de comando para criar e gerenciar uma CA PKI
  • CFSSL - utilitário de PKI/TLS da Cloudflare
  • Lêmure - Ferramenta de criação de TLS da Netflix

Como criar um certificado OpenSSL

Podemos criar certificados por conta própria. Este exemplo gera um certificado auto-assinado usando o OpenSSL.

Crie uma chave privada usando o comando "openssl":

openssl genrsa -out chaveprivada.key 2048

Crie uma solicitação de assinatura de certificado (CSR) usando a chave privada gerada na etapa anterior (irá responder dados de localização, email e empresa):

openssl req -new -key chaveprivada.key -out solicitacaochave.csr

Crie um certificado usando seu CSR e chave privada:

openssl x509 -req -days 365 -in solicitacaochave.csr -signkey chaveprivada.key -out certificado.crt

Converter Certificado PFX para PEM e usar no cUrl

Não importa como está o certificado, ele pode ser convertido para outros formatos usando o OpenSSL. No exemplo abaixo, mostro como usar um certificado SSL junto com o cUrl para login em site, via linha de comando.

Um exemplo prático disto, é usar o cUrl para validar o login com certificado digital no site da Sefaz. Você possui o certificado digital (arquivo ".cer"), e a chave privada no formato de arquivo ".pfx" (Personal Information Exchange File).

Para conseguir, será necessário converter o arquivo para PEM (X.509), no passo abaixo será necessário inserir a passphrase e a senha:

openssl pkcs12 -in original.pfx -out convertido.pem

Agora é necessário dividir o arquivo PEM, ou seja, separar o PEM e gerar arquivos individuais para a chave privada, certificado e CA dele.

Gerar CA root do PFX:

openssl pkcs12 -in original.pfx -out ca.pem -cacerts -nokeys

Gerar a chave privada do cliente através do PFX:

openssl pkcs12 -in original.pfx -out client.pem -clcerts -nokeys

Gerar a chave a partir do ".pfx":

openssl pkcs12 -in original.pfx -out key.pem -nocerts

Agora é possível fazer a autenticação via cUrl no site da Sefaz, usando o PFX convertido:

curl -k https://www.site.exemplo.com -v --key key.pem --cacert ca.pem --cert client.pem

Encriptar e Descriptar um arquivo usando o OpenSSL

Outro caso de uso do OpenSSL é para trocar arquivos encriptados. Em primeiro lugar, a pessoa que irá receber o arquivo precisa me enviar sua chave publica. Para gerar uma chave, ela deve seguir os passos a seguir.

Gerar uma chave PEM privada a partir de uma id_rsa já existente:

openssl rsa -in ~/.ssh/id_rsa -outform pem > transfer.pem

Gerar uma chave PEM pública a partir de uma id_rsa já existente:

openssl rsa -in ~/.ssh/id_rsa -pubout -outform pem > transfer.pub.pem

Pronto, foi gerado uma chave chamada "transfer", nela, há a privada e a pública, a pessoa deve me enviar a chave publica somente.

Agora, irei gerar uma chave randômica de 32 byte (256 bit):

openssl rand -base64 32 > chave.bin

Encriptando a chave, usando minha random e a pública que recebi:

openssl rsautl -encrypt -inkey transfer.pub.pem -pubin -in chave.bin -out chave.bin.enc

Por fim, vou encriptar meu arquivo:

openssl enc -aes-256-cbc -salt -in backup.zip -out backup.enc -pass file:./chave.bin

Para a pessoa que irá receber, devo enviar somente os arquivos ".enc" (o arquivo encriptado e a chave randômica gerada e encriptada). Primeiro, irá descriptografar a chave que foi enviada, para isto, o receptor do arquivo vai usar sua própria chave privada (transfer.pem) que ele gerou e enviou a pública para que eu encriptasse o arquivo:

openssl rsautl -decrypt -inkey id_rsa.pem -in chave.bin.enc -out key.bin

Com o passo acima, o arquivo "key.bin" da pessoa e o meu "chave.bin" terão o mesmo conteúdo, pois foi usado a chave pública para encriptar (eu) e a chave privada para descriptar (o receptor do arquivo).

Finalmente, descriptografando o arquivo:

openssl enc -d -aes-256-cbc -in backup.enc -out backup.zip -pass file:./chave.bin

OpenPGP, PGP e GPG

Todos são padrões de criptografia, funcionam através de chaves assimétricas, cada usuário gera em seu computador um par de chaves: uma pública e uma secreta. A pública é distribuída e permite que qualquer um criptografe dados de modo que só quem possui a chave secreta correspondente, possa descriptografar.
  • PGP ou Pretty Good Privacy é proprietário, atualmente pertence a Symantec.
  • OpenPGP é do mesmo criador do PGP, mas aqui é uma versão Open Source para uso público.
  • GPG ou GnuGPG significa "GNU Privacy Guard", é amplamente usado nos sistemas Linux.

Da mesma maneira que usamos o OpenSSL para transferir o arquivo acima descrito, podemos usar o OpenPGP, PGP ou GPG para "assinar" ou encriptar também. Uma das maneiras mais simples de uso, é através do GPG assinar seus commits e tags num repositório do Git.

Ou seja, além de usar um protocolo de criptografia de chave pública para 'fechar' a comunicação entre meu repositório local e o servidor Git (SSH), ou até mesmo usando o HTTPS, eu gerei uma chave gpg e assino todos meus commits (a chave pública está no servidor e durante o commit, forneço minha senha). Garanto, portanto, que eu estou me comunicando com o servidor correto (SSH) e o servidor garante que o commit foi realizado por mim.

Outro formato de uso das assinaturas, é no envio de e-mail. Você pode trocar chaves entre as pessoas que irão enviar e receber e-mails e eles serão encriptados, qualquer interferência no e-mail não conseguirá obter a mensagem.

Há 2 extensões que testei que facilitam o processo de criar as chaves e incorporam no seu cliente de email:

Via Webmail (extensões no Chrome e Firefox) - FlowCrypt: somente para o GMail (achei o melhor!) atualmente utilizo ele, nao há restrições para conta gratuita: Public Profile | FlowCrypt

Mailvelope: Gmail e outros (Outlook, Yahoo)

Via client Thunderbird: Enigmail

No Android: alguns Apps como o "OpenKeychain: Easy PGP" permitem integrar com alguns clients de mensagem e email, como o K-9 Mail por exemplo.

O único provedor de e-mail que conheço e fornece suporte ao PGP, é o ProtonMail (que cria contas "@prontonmail.com" e "@pm.me").


Bem, é isto. ;-)

Espero ter sanado algumas dúvidas ou criado novas. Qualquer coisa, só postar a dúvida e tentarei ajudar.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Certificados Auto Assinados
Outros artigos deste autor

Rootsh - Auditando/monitorando o root e demais usuários do GNU/Linux

DHCP no GNU/Linux - Guia para ISC-DHCP Server

Guia SSD no Linux: tudo que você precisa saber e o que precisa esquecer!

Leitura recomendada

PuTTY - Estabelecendo Chave Secreta com OpenSSH

Bloqueio de usuários com página de aviso

Usando HTTP autenticado no Apache

John The Ripper - Teste de Quebra de Senhas

Bloqueando e desbloqueando falhas de login em SSH usando o pam_tally2

  
Comentários
[1] Comentário enviado por Raz em 07/02/2020 - 13:59h

Muito bom amigo, obrigado..

"A caixa dizia: Requer MS Windows ou superior. Então instalei Linux."

[2] Comentário enviado por vitorhugonalves em 17/02/2020 - 16:00h

Boa tarde,
No dia 06 de fevereiro saiu a notícia sobre a CA do ITI estar disponível nos principais navegadores e SOs.

https://www.iti.gov.br/component/content/article?id=4094

[3] Comentário enviado por Eslih em 17/02/2020 - 19:46h


[2] Comentário enviado por vitorhugonalves em 17/02/2020 - 16:00h

Boa tarde,
No dia 06 de fevereiro saiu a notícia sobre a CA do ITI estar disponível nos principais navegadores e SOs.

https://www.iti.gov.br/component/content/article?id=4094


Show!!!!
Vamos aguardar as atualizações :-)

O legal que o texto inicia com eles assumindo o problemão que levou 18 anos para ser resolvido:
"Será um grande marco para o Brasil e para o ITI. Resolveremos, de uma vez por todas, esse grande problema que tanto atrapalha o acesso dos cidadãos às aplicações online(...)"

Obrigado por compartilhar @vitorhugonalves


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts