Como criar um certificado de localhost do Windows com base em uma autoridade de certificação local?

0

Em minhas tentativas de entender como os certificados TLS funcionam no Windows, não encontrei um guia simples e abrangente, mas realizei algumas etapas necessárias.

Primeiro, consegui baixar o comando OpenSSL como OpenSSL Light Stable em slproweb.com/products/Win32OpenSSL.html. As breves descrições dos subcomandos estão no link . Adicionei a pasta OpenSSL bin ao System > Propriedades > Avançado > Variáveis de ambiente > Variáveis do sistema > Caminho, para que o comando "OpenSSL" funcione em uma janela do prompt de comando do administrador.

Em seguida, aprendi a criar uma autoridade de certificação (CA) para uso local em deliciousbrains.com/ssl-certificate-authority-for-local-https-development/. Isso resultou no armazenamento de um arquivo .CRT criado no local de armazenamento da máquina "Autoridades de Certificação Raiz Confiáveis", que é usado pelos navegadores locais ao acessar páginas da Web HTTPS. Este novo certificado de CA pode ser visto no Console de Gerenciamento do Computador > Certificados (que talvez precisem ser adicionados como um novo MMC Snap-In) ou Visualizar Certificados em algum lugar nas Opções em qualquer navegador ou usando o comando muito útil certutil do Windows.

Os comandos específicos usados em um prompt de comando de administração (% windir% \ system32 \ cmd.exe) para criar uma autoridade de certificação local foram:

  1. Escolha uma frase secreta e forneça-a sempre que for solicitado.
  2. Gerar chave privada: openssl genrsa -des3 -out CA_NAME.key 2048
  3. Gerar certificado PEM a partir da chave privada: openssl req -x509 -new -nodes -key CA_NAME.key -sha256 -days 1825 -out CA_NAME.pem
  4. Crie um certificado de CA raiz: openssl x509 -outform der -in CA_NAME.pem -out CA_NAME.crt
  5. Instale o certificado raiz da CA no computador local: Clique com o botão direito do mouse em CA_NAME.crt, escolha Instalar certificado Assistente de Importação de Certificados > Máquina local > Navegar ... > Autoridades de certificação raiz confiáveis

Nota: não está claro para mim qual dessas frases secretas e arquivos gerados serão novamente necessários, e para quais propósitos. Claramente, o certificado de CA armazenado será usado como a raiz para quaisquer outros certificados mais específicos no computador atual.

Em seguida, a pergunta que faço é como criar um certificado de autorização de servidor para um ou mais sites no domínio localhost (exemplos: localhost / MY_WEBSITE, localhost / FOLDER / FILE.html) com base no certificado de CA confiável recém-instalado . Isso permitiria o uso de URLs de navegador, como link , sem erros, supondo que o servidor local ouça tais solicitações seguras da Web.

Encontrei vários algoritmos, mas todos parecem estar obsoletos ou incompletos. É claro que parte desse algoritmo deve ser a criação de um arquivo "SAN" que contém a lista de sites que serão autorizados e que outra parte deve ser uma Solicitação de Assinatura de Certificado (CSR).

Alguém pode fornecer um algoritmo desse tipo, uma lista de etapas, como a lista acima, para criar e instalar um certificado de site localhost baseado em um certificado de CA local existente, criado como descrito acima? Por favor, certifique-se de testar o que você propõe antes de responder.

    
por David Spector 13.10.2017 / 19:39

1 resposta

0

O OpenSSL não requer um terminal de administrador.

...It is not clear to me which of these pass phrases and generated files will ever be needed again, and for what purposes.

  • A senha CA / ICA é utilizada sempre que se assinam novos certificados, pois a CA / ICA deve sempre ter uma chave criptografada
  • Os certificados de servidor nunca devem ter uma chave criptografada, pois exigem intervenção manual para iniciar
  • Os certificados de cliente com uma chave criptografada solicitariam a frase secreta sempre que o certificado fosse utilizado.


...Next, the question I ask here is how to create a server authorization certificate for one or more websites in the localhost domain

Isso é realizado por meio de perfis de SAN.

  • O openssl.cnf padrão do OpenSSL é muito difícil de ser analisado por alguém que não é familiar, então criei um personalizado, fácil de entender openssl.cnf há alguns anos atrás em meu GitHub
    • Linha 164: os perfis da SAN começam
    • Linha 260: os perfis V3 começam
    • Linha 430: Todos os comandos e informações necessários começam


...Can someone please provide such an algorithm, a list of steps like the list above, for creating and installing a localhost website certificate based on an existing local CA certificate, created as above?

Para manter as coisas saudáveis, vou usar os perfis V3 contidos no meu openssl.cnf vinculado acima

  1. Crie diretórios necessários:

    mkdir ca\csr certs crl keys
    
  2. Criar arquivos necessários:

    echo 00 > crl\crlnumber && type NUL > index && type NUL > rand && echo 00 > serial
    
  3. Crie CA

    openssl req -x509 -new -sha512 -days 3650 -newkey rsa:4096 -keyout ca\ca.key.pem -out ca\ca.crt.pem -config .\openssl.cnf -extensions v3_ca
    
    • Frases secretas da chave da CA: mínimo de 20 caracteres, contendo 2: maiúsculas, minúsculas, números e & símbolos

      1. Gerar CSR do certificado de servidor:

        openssl req -out ca\csr\server.csr -new -days 3650 -sha512 -newkey rsa:2048 -keyout keys\server.key.pem -config .\openssl.cnf -extensions v3_sophos -nodes
        
      2. Criar e assinar o certificado com a CA:

        openssl x509 -req -sha512 -days 3650 -in ca\csr\server.csr -CA ca\ca.crt.pem -CAkey ca\ca.key.pem -CAserial .\serial -out certs\server.crt.pem -extfile .\openssl.cnf -extensions v3_sophos
        
      3. Concatenar CA ao Cert:

        type ca/ca.crt.pem >> certs/server.crt.pem
        
      4. Exportar para PKCS12:

        openssl pkcs12 -export -out certs\server.p12 -inkey certs\server.key.pem -in certs\server.crt.pem -certfile ca\ca.crt.pem
        


Informações adicionais

por 30.08.2018 / 17:07