Comando openssl: Certificados, Hashing e Criptografia
O Que Voce 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 publico em uma linha
Resumo Rapido (os 5 que voce realmente usara)
- Versao -->
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 versoes antigas 1.0.x,
-pbkdf2nao esta disponivel
O que e o comando openssl?
Conclusao: openssl e uma ferramenta CLI multifuncional para TLS/SSL e criptografia, lidando com certificados, hashes, criptografia e geracao aleatoria atraves de subcomandos.
openssl e a interface para a biblioteca OpenSSL e funciona atraves 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 | Funcao |
|---|---|
dgst |
Calcular hashes |
enc |
Criptografia simetrica |
genpkey |
Gerar chaves privadas |
req |
CSR / certificado autoassinado |
x509 |
Exibir/converter certificados |
s_client |
Debug de conexao TLS |
rand |
Geracao aleatoria |
Como calcular um hash?
Conclusao:
openssl dgst -sha256 filecalcula o SHA-256 de um arquivo, util para deteccao de adulteracao e verificacao 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?
Conclusao: Para desenvolvimento,
openssl req -x509cria uma chave privada e um certificado autoassinado de uma vez; para producao, crie um CSR e faca uma CA assina-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 opcoes 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 saida para a chave / certificado-days 365: periodo de validade-nodes: armazena a chave privada sem frase secreta ("no DES")-subj: define o Subject de forma nao interativa
-nodes remove a protecao por frase secreta. Sempre restrinja o arquivo da chave com chmod 600 key.pem para que somente o proprietario possa le-lo.
Para producao: 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?
Conclusao: Conecte com
openssl s_cliente encaminhe parax509 -noout -datespara obter o periodo de validade em uma unica 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 publico
$ 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 multiplos dominios a partir de um unico IP, omiti-lo retorna um certificado diferente.
Como criptografar um arquivo?
Conclusao:
openssl enc -aes-256-cbc -pbkdf2faz criptografia simetrica baseada em senha; para descriptografar, adicione-das mesmas opcoes.
Criptografar
$ openssl enc -aes-256-cbc -pbkdf2 -salt -in secret.txt -out secret.enc
Sera solicitada uma senha. O que as opcoes significam:
-aes-256-cbc: AES-256 no modo CBC-pbkdf2: usa derivacao de chave PBKDF2 (efetivamente obrigatorio)-salt: adiciona um salt (ativado por padrao; declarado explicitamente aqui)
Descriptografar
$ openssl enc -aes-256-cbc -pbkdf2 -d -in secret.enc -out secret.txt
Sem -pbkdf2, o OpenSSL recorre a sua antiga derivacao de chave fraca (um unico MD5), que e vulneravel a forca bruta. Sempre use opcoes identicas para criptografia e descriptografia.
Como gerar senhas ou chaves fortes?
Conclusao:
openssl randgera dados aleatorios 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 digitos, util para chaves de API e segredos de sessao.
Resumo: Templates para Copiar e Colar
Conclusao: Mantenha esses one-liners de openssl baseados em tarefas a mao para executar trabalhos com certificados, hashing e criptografia sem hesitacao.
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 nao fazer
- Usar
encsem-pbkdf2(derivacao de chave fraca) - Deixar uma chave privada desprotegida sem
chmod 600 - Deixar uma chave com
-nodesem um servidor de producao