Como adicionar uma sequência estendida de uso de chave ao gerar um certificado autoassinado usando o openssl

10

Estou usando o openssl no Mac OS X 10.9 para gerar um certificado autoassinado para os Serviços de Área de Trabalho Remota do Windows Server.

Usando o comando abaixo, posso gerar o certificado,

   openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout myserver.key -out myserver.crt

No entanto, preciso adicionar uma string de uso de chave estendida, Server Authentication (1.3.6.1.5.5.7.3.1), e não consigo descobrir como fazer isso no comando acima.

Eu tentei usar a opção openssl -extfile com um arquivo contendo isso,

[= default ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1

No entanto, recebo um erro que "a opção -extfile não foi encontrada"

Josué
fonte
1
(CLI) openssl config files me convenceu de que era mais fácil escrever código para gerar os certificados que eu queria. Eu usei golang, mas acho que você poderia usar o clib openssl.
Rhythmic Fistman

Respostas:

9

Enquanto openssl x509usa -extfile, o comando que você está usando openssl req, precisa -configespecificar o arquivo de configuração.

Portanto, você pode usar um comando como este:

openssl req -x509 -config cert_config -extensions 'my server exts' -nodes \
            -days 365 -newkey rsa:4096 -keyout myserver.key -out myserver.crt

Os prompts usuais para os bits de nome distinto são definidos no arquivo de configuração padrão (que provavelmente está /System/Library/OpenSSL/openssl.cnfno OS X), mas esse arquivo não é processado quando você usa -config, portanto, seu arquivo de configuração também deve incluir alguns bits DN. Assim, o acima mencionado cert_configpode ser algo como isto:

[ req ]
prompt             = no
distinguished_name = my dn

[ my dn ]
# The bare minimum is probably a commonName
            commonName = secure.example.com
           countryName = XX
          localityName = Fun Land
      organizationName = MyCo LLC LTD INC (d.b.a. OurCo)
organizationalUnitName = SSL Dept.
   stateOrProvinceName = YY
          emailAddress = [email protected]
                  name = John Doe
               surname = Doe
             givenName = John
              initials = JXD
           dnQualifier = some

[ my server exts ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
# 1.3.6.1.5.5.7.3.1 can also be spelled serverAuth:
# extendedKeyUsage = serverAuth

# see x509v3_config for other extensions

Conforme indicado no comentário, você provavelmente pode deixar de fora a maioria dos campos DN. Para o uso de HTTPS, acho que tudo o que você precisa é de uma CN que corresponda ao seu nome de host.


A seção Nome distinto e Formato da seção de atributo do req (1) mostra como você pode modificar a configuração acima para solicitar valores (e fornecer valores padrão) se desejar gerar vários certificados / solicitações semelhantes.

Se você precisar de outras extensões de certificado, verifique em x509v3_config (5) quais outros bits você pode especificar nas seções de extensão.

Chris Johnsen
fonte
1
Se você está apenas gerando um CSR com essa linha de comando, use -reqexts 'my server exts' para solicitar que a CA gere posteriormente um certificado com o uso aprimorado da chave de autenticação do servidor.
Memetech