OpenSSL no Windows 10: Um Guia Abrangente do PowerShell

Gerar certificados SSL pode ser uma tarefa assustadora, cheia de frustração e tristeza. Mas não precisa ser assim! Se você tiver o Windows 10 e OpenSSL, juntamente com um pouco de ajuda deste tutorial, estará bem encaminhado.

Neste artigo, você aprenderá como instalar o OpenSSL no Windows 10. Uma vez instalado, você poderá gerar certificados SSL, solucionar problemas e depurar certificados, e converter entre formatos.

Vamos começar a dominar o OpenSSL no Windows 10 com o PowerShell!

Relacionado: Gerenciando Certificados com o Gerenciador de Certificados do Windows e PowerShell

Pré-requisitos

Neste artigo, você aprenderá usando uma abordagem prática. Embora o OpenSSL historicamente seja uma utilidade do sistema operacional Linux, você também pode usá-lo com o sistema operacional Windows.

Todas as capturas de tela neste guia foram feitas no Windows 10 build 1909 e PowerShell 7.

Instalando o OpenSSL no Windows 10 com PowerShell e Chocolatey

Assumindo que você tenha instalado o Chocolatey usando as instruções de instalação, sua primeira tarefa é instalar o OpenSSL no Windows 10. Para fazer isso, abra o console do PowerShell e execute o comando choco install OpenSSL.Light, conforme mostrado abaixo.

Installing OpenSSL.Light using Chocolatey package manager in PowerShell

É isso! Você agora instalou o OpenSSL com o PowerShell.

Configure um Diretório de Trabalho

Este tutorial criará alguns certificados para aprendizado. Para garantir que todo o trabalho realizado aqui esteja contido em uma única pasta que você possa limpar posteriormente, vá em frente e crie uma.

Este tutorial armazenará todos os certificados e arquivos relacionados na pasta C:\certs. Você pode criar uma pasta com o PowerShell executando o comando abaixo.

New-Item -ItemType Directory -Path C:\certs

Agora é hora de configurar o OpenSSL.

Configurando o OpenSSL

Por padrão, o OpenSSL no Windows 10 não vem com um arquivo de configuração. Isso é intencional porque existem muitas opções de configuração que você pode personalizar. Para os propósitos deste guia, você vai usar uma configuração de exemplo que pode ser personalizada posteriormente para atender melhor aos seus requisitos de segurança.

Abra o PowerShell e execute o comando abaixo. Este comando baixa um arquivo de configuração de exemplo do MIT e o salva como openssl.cnf no diretório de trabalho atual.

Invoke-WebRequest 'http://web.mit.edu/crypto/openssl.cnf' -OutFile .\openssl.cnf

Agora você pode abrir o arquivo openssl.cnf e deve ver algo parecido com o abaixo.

Sample OpenSSL configuration file

O download da configuração funcionará como está por enquanto. Não use os padrões em um ambiente de produção!

Atualizar as Variáveis de Ambiente do Perfil do PowerShell

Para que as coisas funcionem sem problemas, você deve modificar seu perfil do PowerShell no Windows 10. Configurar algumas variáveis de ambiente permite que você alterne facilmente entre diferentes versões do OpenSSL que você pode ter instalado.

I suggest adding two environment variables to your PowerShell profile called path and OPENSSL_CONF. You will update the PATH environment variable to ensure you can run the openssl binary in any location while on the command line.

Abaixo, você verá uma maneira de criar um perfil do PowerShell, caso ainda não tenha um. Este comando adiciona o caminho binário do OpenSSL ao seu PATH e atribui o caminho do arquivo de configuração a OPENSSL_CONF.

# Adicionar variáveis de ambiente ao perfil do PowerShell
# Testar se há um perfil, se não encontrado, criar um!
if (-not (Test-Path $profile) ) {
    New-Item -Path $profile -ItemType File -Force
}

# Editar perfil para adicionar essas linhas
'$env:path = "$env:path;C:\Program Files\OpenSSL\bin"' | Out-File $profile -Append
'$env:OPENSSL_CONF = "C:\certs\openssl.cnf"' | Out-File $profile -Append

Para usar as variáveis de ambiente, recarregue seu perfil digitando . $profile ou apenas feche e reabra o PowerShell.

Agora você pode invocar facilmente o binário openssl de qualquer lugar no PowerShell, como mostrado abaixo.

Verifying OpenSSL version in PowerShell

Usando o OpenSSL no Windows 10 para Gerar um CSR e Chave Privada

Antes de poder criar um certificado SSL, você deve gerar uma solicitação de assinatura de certificado (CSR). Um CSR é um arquivo codificado que permite compartilhar sua chave pública com uma autoridade de certificação (CA). Este arquivo contém informações de identificação, um algoritmo de assinatura e uma assinatura digital. Vamos criar sua primeira CSR e chave privada.

Relacionado: Seu Guia para Certificados X509 para Mortais

Para criar uma CSR, execute o seguinte comando. O OpenSSL solicitará que você insira algumas informações de identificação, como demonstrado a seguir.

openssl req -new -out MyFirst.csr
Generating a CSR and Private Key using OpenSSL in PowerShell

Após a conclusão, você terá uma CSR válida e uma chave privada que podem ser usadas para emitir um certificado SSL para você.

As configurações padrão do arquivo de configuração podem ser editadas ainda mais para agilizar esse processo, caso você não queira inserir dados toda vez que gerar uma CSR.

Você pode ler mais sobre as opções de CSR disponíveis e visualizar configurações de exemplo nas páginas de manual. O OpenSSL também possui um repositório ativo no GitHub com exemplos.

Geração de Pares de Chaves RSA

Você também pode criar pares de chaves RSA (públicas/privadas) com o OpenSSL. Para fazer isso, primeiro crie uma chave privada usando o subcomando genrsa conforme mostrado abaixo.

Quando você executa o comando abaixo, o OpenSSL no Windows 10 irá gerar uma chave privada RSA com um comprimento de chave de 2048 bits. Essa chave é gerada quase imediatamente em hardware moderno. A chave resultante é exibida no diretório de trabalho

# gerar uma chave privada usando o tamanho máximo de 2048
# os tamanhos de chave podem ser 512, 758, 1024, 1536 ou 2048. 
openssl genrsa -out rsa.private 2048

Em seguida, gere uma chave pública usando a chave privada que você acabou de criar usando o subcomando rsa. A sintaxe abaixo criará uma chave pública chamada rsa.public no diretório de trabalho a partir da chave privada rsa.private.

# gerar uma chave pública usando a chave privada
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

Gerando um Certificado Autoassinado

Em algumas ocasiões, você pode precisar gerar um certificado autoassinado. Certificados autoassinados são adequados para uso em laboratório, mas não são uma prática segura para ambientes de produção.

Vamos criar um certificado autoassinado antes de passar para a próxima tarefa. Para fazer isso, insira o comando abaixo para criar um certificado SSL X509. Este certificado usará criptografia SHA256 e será válido por 365 dias usando um comprimento de chave RSA de 2048 bits. O certificado será salvo no diretório de trabalho.

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

Agora você está pronto para importar o certificado para um navegador ou servidor.

Validando CSRs, Certificados e Chaves com o OpenSSL

Verificando as informações em um CSR, chave privada, certificado ou PKCS#12 pode economizar tempo na resolução de erros SSL. Às vezes, uma chave incorreta pode ter sido usada para criar um certificado, por exemplo. Você pode ter as informações de identificação erradas no certificado.

Vamos começar verificando um CSR usando o comando req e alguns parâmetros:

openssl req -text -noout -verify -in .\MyFirst.csr
Checking a CSR with OpenSSL in PowerShell

Detalhes como nome do país, nome da organização e o endereço de e-mail que você inseriu ao criar o CSR no início deste guia devem coincidir precisamente.

Você também pode verificar um certificado usando o subcomando x509 com alguns parâmetros:

openssl x509 -in .\certificate.crt -text -noout | more
Checking a certificate with OpenSSL with the x509 command in PowerShell

Convertendo Certificados com o OpenSSL

Existem ocasiões em que uma aplicação não utiliza um formato específico de certificado. Você pode encontrar esse problema com uma aplicação chamada HAproxy, por exemplo, que requer um certificado PEM quando você pode ter um certificado formatado como DER (.crt .cer .der).

Para demonstrar a conversão de um certificado, vamos converter o certificado autoassinado criado anteriormente em formato DER (certificate.crt) para PEM. Use o código no trecho de código a seguir para fazer isso.

Este comando abaixo utiliza o subcomando x509 com o parâmetro -inform, que deve coincidir com o formato do arquivo -in, seguido do formato -out.

openssl x509 -inform der -in .\certificate.crt -out .\certificate.pem

Você também pode inverter a ordem se desejar converter para o formato DER a partir de PEM, como mostrado abaixo.

openssl x509 -outform der -in .\certificate.pem -out .\certificate.der

E por último, mas não menos importante, você pode converter PKCS#12 para PEM e PEM para PKCS#12. Este é um tipo de arquivo que contém chaves privadas e certificados. Para converter para o formato PEM, utilize o subcomando pkcs12.

openssl pkcs12 -in .\SomeKeyStore.pfx -out .\SomeKeyStore.pem -nodes

Você também pode converter um certificado PEM e chave privada para o formato PKCS#12 usando -export com algumas opções adicionais. Abaixo está a exportação de um certificado formatado em PKCS#12 usando sua chave privada através de SomeCertificate.crt como fonte de entrada. O uso da opção -certfile com o valor MyCACert.crt permite validar SomeCertificate.crt.

openssl pkcs12 -export -out SomeCertificate.pfx -inkey SomePrivateKey.key -in SomeCertificate.crt -certfile MyCACert.crt

Resolução de Problemas e Depuração

Agora que você pode criar e converter CSR’s, certificados e pares de chaves, é hora de aprender a solucionar e depurar problemas. O OpenSSL oferece comandos que facilitam a resolução de problemas.

O OpenSSL também permite verificar certificados quanto à integridade do arquivo e testar possíveis corrupções de dados. Utilizando um checksum MD5, você pode usar os seguintes exemplos de código para testar certificados, chaves e CSR’s:

# Certificados
openssl x509 -noout -modulus -in .\certificate.crt | openssl md5

# Chaves Públicas / Privadas
openssl rsa -noout -modulus -in .\privateKey.key | openssl md5

# Solicitação de Servidor de Certificados
openssl req -noout -modulus -in .\MyFirst.csr | openssl md5

# Verificar uma conexão SSL externa
openssl s_client -connect www.google.com:443

Depois de obter o hash original, você pode compará-lo com um hash atual para verificar se o certificado não foi modificado ou corrompido.

Aqui está um exemplo de como esse código se parece quando executado no PowerShell:

Sample troubleshooting command output with OpenSSL in PowerShell

Resumo

Neste artigo, você aprendeu como instalar e configurar o OpenSSL no Windows 10, criar uma CSR, par de chaves e certificado SSL. Você também aprendeu como converter entre diferentes formatos de certificados e fazer algumas soluções básicas de problemas usando subcomandos integrados.

Recursos Adicionais

Source:
https://adamtheautomator.com/openssl-windows-10/