OpenSSL é uma biblioteca de criptografia de código aberto que inclui uma variedade de comandos usados no Protocolo TLS e Infraestrutura de Chaves Públicas. O OpenSSL foi lançado em 1998 e está disponível para sistemas Windows, Linux, macOS e BSD. O comando OpenSSL ajudará você a realizar várias tarefas, incluindo Solicitação de Assinatura de Certificado (CSR), geração de chaves privadas e certificação SSL.
O OpenSSL é importante porque garante a implementação adequada do SSL. Obter o SSL da maneira correta é crucial para a segurança do seu site. Além disso, o Google, que é um dos principais mecanismos de busca, dá prioridade a sites com certificados SSL implementados. Alguns navegadores como o Chrome e o Firefox podem marcar seu site como Não Seguro se você não tiver um certificado SSL adequado. Portanto, é fundamental servir o tráfego do seu site através do protocolo criptografado HTTPS .
Primeiro as Coisas Primeiras
Este tutorial é um guia no estilo folha de dicas, incluindo alguns, mas provavelmente não todos, os comandos OpenSSL que você pode usar em cenários cotidianos.
A primeira parte explica tudo o que você precisa saber sobre Solicitações de Assinatura de Certificado (CSR). No entanto, se você já estiver familiarizado com isso, poderá pular para qualquer outra seção relevante para o que está tentando alcançar. Cada seção contém um trecho de linha de comando para realizar o que o subtítulo indica.
Vamos começar!
Seção 1: Entendendo as Solicitações de Assinatura de Certificado (CSRs)
Uma solicitação de assinatura de certificado é um pré-requisito ao obter um certificado SSL de uma autoridade certificadora (CA). A CSR inclui a chave pública de um par de chaves e algumas informações adicionais. Você precisa inseri-las no certificado durante o processo de assinatura.
Durante a geração da CSR, você é solicitado a fornecer informações de identificação conhecidas como Distinguished Name (DN). O DN contém campos necessários para o certificado, como o Common Name (CN), que é o Fully Qualified Domain Name (FQDN) exato do host que usará o certificado. Os outros campos do DN servem para informações adicionais, como país, estado, nome da localidade e nome da organização ou empresa, caso você esteja gerando certificados específicos para o seu negócio. Você pode optar por ignorar as solicitações fornecendo as informações a partir de um arquivo ou pela linha de comando.
Dê uma olhada em um exemplo de prompt de informações de CSR na captura de tela abaixo:
|
1 2 3 4 5 6 7 |
País Nome (2 letras código) [AU]:CH Estado ou Província Nome (completo nome) [Some-State]:Zürich Localidade Nome (ex, cidade) []:Old Town Organização Nome (ex, empresa) [Internet Widgits Pty Ltd]:Example Cloudsigma Empresa Organizacional Unidade Nome (ex, seção) []:Cloud Technology Comum Nome (e.g. servidor FQDN ou SEU nome) []:cloudsigma.com E-mail Endereço []:info@cloudsigma.com |
Você pode fornecer as informações em um comando de linha única para evitar as solicitações adicionando a flag -subj conforme mostrado abaixo, e fornecendo as informações para os campos:
|
1 |
-subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
O comando acima usa as mesmas informações exibidas no exemplo de bloco de código dos prompts de informações de CSR.
Seção 2: Gerando Solicitações de Assinatura de Certificado
Nesta seção, abordaremos os comandos OpenSSL que você pode usar para gerar CSR e chaves privadas. As CSRs são necessárias para solicitar certificados SSL de uma Autoridade Certificadora (CA).
Gerando uma Chave Privada e uma Solicitação de Assinatura de Certificado
Você pode usar este método se quiser que uma Autoridade Certificadora emita um certificado SSL para proteger seu Apache ou Nginx servidor para servir tráfego sobre HTTPS, ou seja, HTTP com TLS. O CSR gerado com o comando pode ser enviado a uma CA para solicitar um certificado SSL assinado por uma CA. Você pode seguir nossos guias detalhados sobre como configurar seus Apache ou Nginx servidores no Ubuntu.
Insira o seguinte comando no seu terminal para gerar uma chave privada de 2048 bits (domain.key) e CSR (domain.csr) do zero:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr |
Responda às solicitações com suas informações específicas de CSR. Opcionalmente, você pode adicionar a flag -subj ao comando para evitar as solicitações:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
A -newkey rsa:2048 flag especifica que a chave deve ser gerada usando o algoritmo RSA de 2048 bits. A -nodes flag indica que não há criptografia de senha para a chave privada. Há uma -new opção não incluída, mas implícita, para indicar que um novo CSR é gerado.
Gerando uma Solicitação de Assinatura de Certificado a partir de uma Chave Privada Existente
Se você já possui uma chave privada, pode usar este método para gerar um CSR. Você o usará para solicitar um certificado SSL de uma CA. Insira o seguinte comando para gerar um novo CSR (domain.csr) usando uma chave privada existente (domain.key):
|
1 |
openssl req -key domain.key -new -out domain.csr |
Responda às solicitações com suas informações específicas de CSR. Opcionalmente, você pode adicionar a flag -subj ao comando para evitar as solicitações:
|
1 |
openssl req -key domain.key -new -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
A flag -key especifica a chave privada existente (domain.key) a ser usada para gerar um novo CSR. A -new flag indica que um novo CSR está sendo gerado.
Gerando uma Solicitação de Assinatura de Certificado a partir de um Certificado e Chave Privada Existentes
Se você já possui um certificado existente que gostaria de usar para gerar um CSR, pode usar este método. Este método pode ser útil se você ou sua CA perderem o CSR original e você precisar gerá-lo usando as informações de CSR inseridas anteriormente, sem ter que reinseri-las. O comando extrai as informações do certificado existente. Insira o seguinte comando no seu terminal para criar um novo CSR (domain.csr) usando um certificado existente (domain.crt) e uma chave privada existente (domain.key):
|
1 |
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr |
A opção -x509toreq indica que você está usando o certificado X509 para gerar o CSR.
Seção 3: Gerando Certificados SSL
Em algumas situações, você pode querer usar um certificado SSL sem o incômodo de obter um certificado assinado por uma CA. Esta seção explica como você pode assinar seus próprios certificados. É válido e gratuito. Esses certificados são chamados de certificados autoassinados, e eles são bastante comuns.
Um certificado autoassinado é assinado com sua própria chave privada. Tanto os certificados autoassinados quanto os assinados por CA funcionam igualmente bem para criptografar dados e tráfego de sites. No entanto, com certificados autoassinados, os usuários geralmente recebem um aviso em seus navegadores de que o certificado não é confiável. Assim, você pode usar certificados autoassinados para sites que não trocam informações confidenciais com os usuários, ou em servidores que não sejam de produção. Abaixo, você encontra os comandos OpenSSL que pode usar para gerar certificados autoassinados.
- Gerando um Certificado Autoassinado
Você pode usar este método para gerar um certificado SSL para proteger seu servidor Apache ou Nginx. Isso garantirá que o tráfego venha com HTTPS, ou HTTP sobre TLS, sem passar por uma CA para assinar o certificado:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt |
Responda às perguntas com suas informações específicas de CSR. Opcionalmente, você pode adicionar a flag -subj ao comando para evitar as perguntas:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
A -x509 flag indica a criação de um certificado autoassinado. A opção -days 365 especifica o número de dias que o certificado será válido. Neste caso, são 365 dias. Você também pode escolher um número diferente de dias. O comando gera um CSR temporário para conter as informações que você deve associar ao certificado.
- Gerando um Certificado Autoassinado a partir de uma Chave Privada Existente
Este método ajudará você a gerar um certificado autoassinado a partir de sua chave privada já existente. Insira o seguinte comando para gerar um certificado autoassinado (domain.crt) usando uma chave privada existente (domain.key):
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt |
Forneça as informações específicas do seu CSR às perguntas. Opcionalmente, você pode adicionar a flag -subj ao comando para evitar as perguntas:
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
A -x509 flag indica a criação de um certificado autoassinado. A opção -days 365 especifica o número de dias que o certificado será válido. Neste caso, são 365 dias. Você também pode escolher um número diferente de dias. A opção -new inicia a solicitação de informações do CSR.
Seção 4: Visualizando Certificados
Os certificados e arquivos CSR são codificados e armazenados com a extensão .pem. Significa Privacy-Enhanced Mail. É um formato de arquivo para armazenar e enviar chaves criptográficas, certificados e outros dados cruciais. Os arquivos PEM não são facilmente legíveis por humanos. Nesta seção, você encontrará comandos que pode usar para visualizar as entradas dos arquivos PEM codificados.
- Visualizando arquivos CSR
Insira o seguinte comando para visualizar e verificar o conteúdo de um CSR (domain.csr) no seu terminal:
|
1 |
openssl req -text -noout -verify -in domain.csr |
Por exemplo, o comando acima pode produzir uma saída como esta:

- Visualizando Entradas de Certificado
Insira o seguinte comando para visualizar o conteúdo de um certificado (domain.crt):
|
1 |
openssl x509 -text -noout -in domain.crt |
O comando acima pode produzir uma saída como esta:

- Verificando se um Certificado foi Assinado por uma Autoridade de Certificação
Para verificar se um certificado (domain.crt) foi assinado por um determinado certificado de CA (ca.crt), insira o seguinte comando:
|
1 |
openssl verify -verbose -CAfile ca.crt domain.crt |
Seção 5: Chaves Privadas
Se você está procurando comandos do OpenSSL necessários para criar e verificar chaves privadas, esta seção é para você.
- Criando uma Chave Privada
Para criar uma chave privada de 2048 bits protegida por senha (domain.key), insira o seguinte comando no seu terminal:
|
1 |
openssl genrsa -des3 -out domain.key 2048 |
O comando solicitará uma senha para concluir o processo. Veja a captura de tela abaixo:

- Verificando uma Chave Privada
Para verificar a validade de uma chave privada (domain.key), insira o seguinte comando no seu terminal:
|
1 |
openssl rsa -check -in domain.key |
Depois, você precisará fornecer uma senha. Se a chave privada estiver criptografada e você inserir a frase secreta correta, a chave não criptografada será exibida no terminal. Veja a captura de tela abaixo:

- Verificar se uma Chave Privada corresponde a um Certificado e CSR
Se você deseja verificar se uma chave privada (domain.key) corresponde a um certificado (domain.crt) e a um CSR (domain.csr), insira os seguintes comandos no seu terminal:
|
1 2 3 |
openssl rsa -noout -modulus -in domain.key | openssl md5 openssl x509 -noout -modulus -in domain.crt | openssl md5 openssl req -noout -modulus -in domain.csr | openssl md5 |
Se você notar que a saída dos comandos acima é idêntica, então é possível que a chave privada, o certificado e o CSR estejam relacionados.
- Criptografar uma Chave Privada
Se você tem uma chave privada não criptografada (unencrypted.key) e deseja obter a versão criptografada da chave (encrypted.key), insira o seguinte comando no seu terminal:
|
1 |
openssl rsa -des3 -in unencrypted.key -out encrypted.key |
O comando solicitará uma frase secreta para criptografar a chave privada.
- Descriptografar uma Chave Privada
Se você tem uma chave privada criptografada (encrypted.key) e deseja obter a versão descriptografada dela (decrypted.key), insira o seguinte comando no seu terminal:
|
1 |
openssl rsa -in encrypted.key -out decrypted.key |
O comando solicitará uma frase secreta para a chave criptografada. Se você inserir a frase secreta correta, ela será descriptografada. A saída irá para decrypted.key.
Seção 6: Convertendo Formatos de Certificado
Você deve ter notado que até agora estivemos trabalhando com X.509 certificados que são codificados com ASCII PEM. Embora isso seja bom, há uma variedade de outras codificações de certificado e tipos de contêiner que você pode usar. Em algumas aplicações, você pode preferir usar certos formatos em detrimento de outros. Além disso, alguns formatos diferentes podem conter múltiplos itens, como uma chave privada, CSR e certificado assinado por CA em um único arquivo. Você também pode usar o OpenSSL para converter entre vários formatos de certificado. Continue lendo para conhecer alguns dos comandos do OpenSSL para conversão de formato de certificado.
- Convertendo PEM para DER
DER (Distinguished Encoding Rules) é uma codificação binária para X.509 certificados e chaves privadas. Para converter um certificado codificado em PEM (domain.crt) para um certificado codificado em DER (domain.der), insira o seguinte comando:
|
1 |
openssl x509 -in domain.crt -outform der -out domain.der |
Você encontrará a maioria dos casos de uso do formato de codificação DER na linguagem de programação Java. Siga este tutorial para uma configuração rápida do Java no seu servidor Ubuntu.
- Convertendo DER to PEM
Para converter um certificado codificado em DER (domain.der) para um certificado PEM (domain.crt), insira o seguinte comando:
|
1 |
openssl x509 -inform der -in domain.der -out domain.crt<code> |
- Convertendo PEM para PKCS7
Você pode querer adicionar certificados PEM, por exemplo, domain.crt e ca-chain.crt a um arquivo PKCS7 (domain.p7b). Aqui está o comando para fazer isso:
|
1 |
openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile ca-chain.crt -out domain.p7b |
Você pode usar a opção -certfile várias vezes para especificar os certificados a serem adicionados ao arquivo PKCS7. Os arquivos PKCS7 são mais relevantes para os Java Key stores e Microsoft IIS. Também conhecidos como arquivos P7B, são arquivos ASCII que podem conter certificados e certificados assinados por CA.
- Converter PKCS7 para PEM
Para converter um arquivo PKCS7 (domain.p7b) para um arquivo codificado em PEM (domain.crt), insira o seguinte comando no seu terminal:
|
1 |
openssl pkcs7 -in domain.p7b -print_certs -out domain.crt |
- Convertendo PEM para PKCS12
Para combinar uma chave privada (domain.key) e um certificado (domain.crt) em um PKCS12 arquivo (domain.pfx), insira o seguinte comando:
|
1 |
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx |
O comando solicitará que você insira as senhas de exportação, que opcionalmente podem ser deixadas em branco. Você pode encadear vários certificados no arquivo PKCS12 concatenando os certificados em um único arquivo PEM (domain.crt). O PKCS12 também é conhecido como PFX e é usado principalmente no Microsoft IIS.
- Converter PKCS12 para PEM
Para converter um arquivo PKCS12 (domain.pfx) para um formato codificado em PEM (domain.combined.crt), insira o seguinte comando:
|
1 |
openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt |
O arquivo PEM criado pelo comando acima contém todos os múltiplos itens que o PKCS12 continha.
Seção 7: Verificando a Versão do OpenSSL
A versão de qualquer software que você esteja executando pode afetar os recursos dos aplicativos que você está executando. Portanto, há a necessidade de verificar a versão. O mesmo se aplica ao OpenSSL. Algumas opções de linha de comando podem estar ausentes em uma versão e disponíveis em outra. Para visualizar a versão do OpenSSL que você está executando, insira o seguinte comando:
|
1 |
openssl version -a |
Abaixo está a saída que obtivemos quando executamos o comando acima enquanto criávamos este tutorial:
|
1 2 3 4 5 6 7 8 |
OpenSSL 1.1.1i 8 Dez 2020 construído em: Sáb Dez 19 15:39:47 2020 UTC plataforma: linux-x86_64 opções: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) compilador: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG OPENSSLDIR: "/usr/local/ssl" ENGINESDIR: "/usr/local/lib/engines-1.1" Semeando fonte: so-específico |
Abaixo você pode encontrar a captura de tela real:

Conclusão
Neste tutorial, explicamos o que é o OpenSSL, abordamos as solicitações de assinatura de certificado (CSR) e alguns dos comandos cruciais do OpenSSL que você pode usar em seu ambiente de servidor.
Está faltando algum comando crucial ou você está tendo problemas com algum dos comandos na configuração do seu servidor na CloudSigma? Sinta-se à vontade para entrar em contato com a nossa equipe de suporte ao cliente 24/7 no chat em tempo real para discutir o assunto.
Boa computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.