Come aggiungere una stringa di utilizzo della chiave estesa quando si genera un certificato autofirmato usando openssl


10

Sto usando openssl su Mac OS X 10.9 per generare un certificato autofirmato per Servizi Desktop remoto di Windows Server.

Utilizzando il comando seguente posso generare il certificato,

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

Tuttavia, devo aggiungere una stringa di utilizzo della chiave estesa Server Authentication (1.3.6.1.5.5.7.3.1) e non riesco a capire come farlo nel comando sopra.

Ho provato a usare l'opzione openssl -extfile con un file contenente questo,

[= default ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1

Tuttavia, viene visualizzato l'errore "Impossibile trovare l'opzione -extfile"


1
(CLI) I file di configurazione di openssl mi hanno convinto che era più semplice scrivere codice per generare i certificati desiderati. Ho usato il Golang, ma immagino che tu possa usare il clib di openssl.
Rhythmic Fistman

Risposte:


9

Durante l' openssl x509utilizzo -extfile, il comando che si sta utilizzando openssl reqdeve -configspecificare il file di configurazione.

Quindi, potresti usare un comando come questo:

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

I soliti prompt per i bit con nome distinto sono definiti nel file di configurazione predefinito (che probabilmente si trova /System/Library/OpenSSL/openssl.cnfsu OS X), ma questo file non viene elaborato quando lo si utilizza -config, quindi il file di configurazione deve includere anche alcuni bit DN. Pertanto, i riferimenti sopra riportati cert_configpotrebbero assomigliare a questo:

[ 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 = ssl-admin@example.com
                  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

Come indicato nel commento, probabilmente puoi tralasciare la maggior parte dei campi DN. Per l'utilizzo HTTPS, penso che tutto ciò di cui hai bisogno sia una CN che corrisponda al tuo nome host.


La sezione Formato sezione nome distinto e attributo di req (1) mostra come è possibile modificare la configurazione sopra per richiedere valori (e fornire valori predefiniti) se si desidera generare più certificati / richieste simili.

Se hai bisogno di altre estensioni di certificato, controlla x509v3_config (5) per quali altri bit puoi specificare nelle sezioni di estensione.


1
Se si sta semplicemente generando un CSR con questa riga di comando, utilizzare -reqexts "my server exts" per richiedere che la CA in seguito generi un certificato con l'utilizzo della chiave migliorato dall'autorizzazione del server.
memetech,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.