Comando openssl: Certificados, Hashing e Criptografia
O Que Você Vai Aprender
- Como criar certificados autoassinados e CSRs com
openssl - Como calcular hashes SHA-256 e executar criptografia AES instantaneamente
- Como verificar a validade do certificado de um servidor público em uma linha
Resumo Rápido (os 5 que você realmente usará)
- Versão -->
openssl version - Hash -->
openssl dgst -sha256 file - Certificado -->
openssl req -x509 -newkey rsa:2048 ... - Inspecionar cert -->
openssl s_client -connect host:443 - Criptografar -->
openssl enc -aes-256-cbc -pbkdf2 ...
Premissas (ambiente alvo)
- SO: Ubuntu / Linux em geral
- OpenSSL 1.1.1 ou posterior (verifique com
openssl version) - Em versões antigas 1.0.x,
-pbkdf2não está disponível
O que é o comando openssl?
Conclusão: openssl é uma ferramenta CLI multifuncional para TLS/SSL e criptografia, lidando com certificados, hashes, criptografia e geração aleatória através de subcomandos.
openssl é a interface para a biblioteca OpenSSL e funciona através de subcomandos: openssl <subcomando> <opcoes>.
$ openssl version
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
Os principais subcomandos:
| Subcomando | Função |
|---|---|
dgst |
Calcular hashes |
enc |
Criptografia simétrica |
genpkey |
Gerar chaves privadas |
req |
CSR / certificado autoassinado |
x509 |
Exibir/converter certificados |
s_client |
Debug de conexão TLS |
rand |
Geração aleatória |
Como calcular um hash?
Conclusão:
openssl dgst -sha256 filecalcula o SHA-256 de um arquivo, útil para detecção de adulteração e verificação de integridade de downloads.
Hash de um arquivo
$ openssl dgst -sha256 ubuntu.iso
SHA256(ubuntu.iso)= 9bc6b8f6...(64 digitos hexadecimais)
Troque sha256 por sha1 ou sha512 para obter outros digests.
Hash de uma string
$ echo -n "hello" | openssl dgst -sha256
Sem -n, echo adiciona uma quebra de linha final que se torna parte dos dados hasheados e altera o resultado. Sempre use -n para hashing de strings.
Como criar um certificado?
Conclusão: Para desenvolvimento,
openssl req -x509cria uma chave privada e um certificado autoassinado de uma vez; para produção, crie um CSR e faça uma CA assiná-lo.
Certificado autoassinado (desenvolvimento/testes)
$ openssl req -x509 -newkey rsa:2048 \
-keyout key.pem -out cert.pem \
-days 365 -nodes \
-subj "/CN=localhost"O que as opções significam:
-x509: gera um certificado autoassinado em vez de um CSR-newkey rsa:2048: gera uma nova chave RSA de 2048 bits-keyout/-out: caminhos de saída para a chave / certificado-days 365: período de validade-nodes: armazena a chave privada sem frase secreta ("no DES")-subj: define o Subject de forma não interativa
-nodes remove a proteção por frase secreta. Sempre restrinja o arquivo da chave com chmod 600 key.pem para que somente o proprietário possa lê-lo.
Para produção: criar um CSR
Para que uma CA assine seu certificado, crie uma chave privada e um CSR (Certificate Signing Request).
$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out key.pem $ openssl req -new -key key.pem -out request.csr -subj "/CN=example.com"
Inspecione o CSR gerado com:
$ openssl req -in request.csr -noout -text
Como verificar a validade do certificado de um servidor?
Conclusão: Conecte com
openssl s_cliente encaminhe parax509 -noout -datespara obter o período de validade em uma única linha.
Inspecionar um certificado local
$ openssl x509 -in cert.pem -noout -text
Para apenas as datas de validade, use -dates:
$ openssl x509 -in cert.pem -noout -dates
notBefore=Jun 5 00:00:00 2026 GMT notAfter=Jun 5 00:00:00 2027 GMT
Inspecionar o certificado de um servidor público
$ echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates-servername define o SNI (Server Name Indication). Em hosts que servem múltiplos domínios a partir de um único IP, omiti-lo retorna um certificado diferente.
Como criptografar um arquivo?
Conclusão:
openssl enc -aes-256-cbc -pbkdf2faz criptografia simétrica baseada em senha; para descriptografar, adicione-dàs mesmas opções.
Criptografar
$ openssl enc -aes-256-cbc -pbkdf2 -salt -in secret.txt -out secret.enc
Será solicitada uma senha. O que as opções significam:
-aes-256-cbc: AES-256 no modo CBC-pbkdf2: usa derivação de chave PBKDF2 (efetivamente obrigatório)-salt: adiciona um salt (ativado por padrão; declarado explicitamente aqui)
Descriptografar
$ openssl enc -aes-256-cbc -pbkdf2 -d -in secret.enc -out secret.txt
Sem -pbkdf2, o OpenSSL recorre à sua antiga derivação de chave fraca (um único MD5), que é vulnerável a força bruta. Sempre use opções idênticas para criptografia e descriptografia.
Como gerar senhas ou chaves fortes?
Conclusão:
openssl randgera dados aleatórios criptograficamente seguros:-base64para senhas,-hexpara tokens.
$ openssl rand -base64 24
Xa9b2C... (~32 caracteres de string aleatoria)
$ openssl rand -hex 32
Isso produz um token hexadecimal de 64 dígitos, útil para chaves de API e segredos de sessão.
Resumo: Templates para Copiar e Colar
Conclusão: Mantenha esses one-liners de openssl baseados em tarefas à mão para executar trabalhos com certificados, hashing e criptografia sem hesitação.
Templates openssl para copiar e colar
# Mostrar versao openssl version # Hash SHA-256 openssl dgst -sha256 file # Certificado autoassinado (dev, 1 ano) openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost" # Validade do certificado de servidor publico echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates # Criptografar / descriptografar com AES-256 openssl enc -aes-256-cbc -pbkdf2 -salt -in in.txt -out out.enc openssl enc -aes-256-cbc -pbkdf2 -d -in out.enc -out in.txt # Gerar uma senha forte openssl rand -base64 24
O que não fazer
- Usar
encsem-pbkdf2(derivação de chave fraca) - Deixar uma chave privada desprotegida sem
chmod 600 - Deixar uma chave com
-nodesem um servidor de produção