Como adicionar string de uso de chave estendida ao gerar um certificado autoassinado usando openssl

8

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 Autenticação de servidor (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"

    
por joshu 03.02.2014 / 21:02

1 resposta

7

Enquanto openssl x509 usa -extfile , o comando que você está usando, openssl req , precisa de -config para especificar o arquivo de configuração.

Então, 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 nomes distintos são definidos no arquivo de configuração padrão (que provavelmente é /System/Library/OpenSSL/openssl.cnf no 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 cert_config acima referenciado pode 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

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

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

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

    
por 04.02.2014 / 10:56