OpenSSL no Windows 10: Um Guia Abrangente do PowerShell

Gerar certificados SSL pode ser uma tarefa desafiadora, repleta de frustração e tristeza. Mas não precisa ser assim! Se você possui o Windows 10 e o OpenSSL, 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 debugar certificados, e converter entre formatos.

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

Relacionado: Gerenciando Certificados com o Windows Certificate Manager e o PowerShell

Pré-requisitos

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

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

Instalando o OpenSSL no Windows 10 com o PowerShell e o 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 como mostrado abaixo.

Installing OpenSSL.Light using Chocolatey package manager in PowerShell

Isso é tudo! Agora você instalou o OpenSSL com o PowerShell.

Configure um diretório de trabalho

Neste tutorial, você criará alguns certificados para aprender. Para garantir que todo o trabalho feito aqui esteja confinado a uma única pasta que você possa limpar posteriormente, crie uma pasta.

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, pois existem muitas opções de configuração que você pode personalizar. Para fins deste guia, você usará uma amostra de configuração que poderá personalizar posteriormente para melhor atender aos seus requisitos de segurança.

Abra o PowerShell e execute o comando abaixo. Este comando baixa um arquivo de configuração de amostra 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 exemplo abaixo.

Sample OpenSSL configuration file

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

Atualize as Variáveis de Ambiente do Perfil do PowerShell

Para que as coisas ocorram sem problemas, você deve modificar o seu perfil do PowerShell no Windows 10. Configurar algumas variáveis de ambiente permite alternar 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.

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

# Edite o perfil para adicionar estas 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 simplesmente feche e reabra o PowerShell.

Agora você pode invocar facilmente o binário do openssl onde quer que esteja no PowerShell, como mostrado abaixo.

Verifying OpenSSL version in PowerShell

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

Antes de criar um certificado SSL, você precisa gerar uma solicitação de assinatura de certificado (CSR). Um CSR é um arquivo codificado que fornece uma maneira de 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 o seu primeiro CSR e chave privada.

Relacionado: Seu Guia para Certificados X509 para Mortais

Para criar um CSR, execute o comando abaixo. O OpenSSL então solicitará que você insira algumas informações de identificação, como você pode ver na demonstração a seguir.

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

Uma vez concluído, você terá um CSR válido e uma chave privada que podem ser usados para emitir um certificado SSL para você.

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

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

Gerando Pares de Chaves RSA

Você também pode criar pares de chaves RSA (pública/privada) 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. Esta chave é gerada quase imediatamente em hardware moderno. A chave resultante é exibida no diretório de trabalho

# gerar uma chave privada usando um tamanho máximo de chave 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 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

Às vezes, 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 uso em um ambiente de produção.

Vamos criar um certificado autoassinado antes de passar para a próxima tarefa. Para fazer isso, digite o comando abaixo para criar um certificado SSL X509. Este certificado usará criptografia SHA256, será válido por 365 dias e terá 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 em um navegador ou servidor.

Validação de CSR, Certificados e Chaves com o OpenSSL

Verificando as informações em um CSR, chave privada, certificado ou PKCS#12 pode economizar tempo na solução de erros SSL. Às vezes, uma chave errada pode ter sido usada para criar um certificado, por exemplo. Você pode ter 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 corresponder 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 OpenSSL

Há ocasiões em que um aplicativo não utiliza um formato de certificado específico. Você pode encontrar esse problema com um aplicativo chamado 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 (certificado.crt) para PEM. Use o código no seguinte trecho de código para fazer isso.

O comando abaixo usa o subcomando x509 com o parâmetro -inform que deve corresponder ao 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 preferir 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, use o sub-comando pkcs12.

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

Você também pode converter um certificado PEM e uma 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, utilizando 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, certificados e pares de chaves, é hora de aprender a solucionar problemas e depurá-los. O OpenSSL possui 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:

# 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

Assim que tiver 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/