Evitare la richiesta di password per chiavi e richieste di informazioni DN


90

Sto usando il seguente codice per generare le chiavi:

apt-get -qq -y install openssl;
mkdir -p /etc/apache2/ssl;
openssl genrsa -des3 -out server.key 1024;
openssl req -new -key server.key -out server.csr;
cp server.key server.key.org;
openssl rsa -in server.key.org -out server.key;
openssl x509 -req -days 12000 -in server.csr -signkey server.key -out server.crt;
mv server.crt  /etc/apache2/ssl/cert.pem;
mv server.key  /etc/apache2/ssl/cert.key;
rm -f server.key.orig;
rm -f server.csr

Ho due domande:

  1. Come posso saltare il prompt della passphrase? Sarebbe ragionevolmente sicuro per me farlo? (come in esso non dovrebbe essere assolutamente folle come chiunque dovrebbe essere in grado di hackerare il certificato)

  2. Come evitare la richiesta del nome del paese, dell'organizzazione, ecc. Spero di poterli dare al prompt dei comandi (la pagina man mostra solo le opzioni di livello superiore per OpenSSL)

Risposte:


151

Modifica: questa è di gran lunga la mia risposta più popolare ed è passata qualche anno, quindi ho aggiunto una variante ECDSA. Se puoi usare ECDSA dovresti.


Puoi fornire tutte queste informazioni dalla riga di comando.

Generazione di certificati senza password autofirmati in un solo passaggio:

Versione RSA

openssl req \
    -new \
    -newkey rsa:4096 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

Versione ECDSA

openssl req \
    -new \
    -newkey ec \
    -pkeyopt ec_paramgen_curve:prime256v1 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

Tutti i sottocomandi openssl hanno una loro pagina man. Vedere man req.


Affrontare in modo specifico le tue domande ed essere più espliciti su quali opzioni sono effettivamente attive:

  1. Il -nodesflag segnala di non crittografare la chiave, quindi non è necessaria una password. Puoi anche usare la -passout argbandiera. Vedi PASS PHRASE ARGUMENTSnella openssl(1)pagina man per come formattare l'arg.

  2. Usando il -subjflag è possibile specificare l'oggetto (l'esempio è sopra).


3
Leggere cose tramite "-subj" funziona benissimo, tuttavia - per me - solo quando OPENSSL_CONF NON è impostato. IOW: se è impostato OPENSSL_CONF, OpenSSL proverà a leggere da lì e ignorerà l' argomento della riga di comando "-subj". Mi ci è voluto un po 'per capire.
oberstet,

oberstet: Sì, è vero.
Bahamat,

È possibile passare la chiave soggetto stessa dallo stdin? Ho provato "-key stdin", "-key fd: 1" e "-key -" .. senza fortuna.
oberstet

1
@JeremyBaker: No, avrai bisogno di un processo in due fasi. Omettere -x509e -daysper generare un CSR anziché un certificato, quindi utilizzare il normale metodo di firma CA.
bahamat,

1
@jww - e quel momento è arrivato. A partire da Chrome v58, quando si tenta di caricare una pagina protetta ma il certificato non contiene un subjectAltName corrispondente, mostra una pagina di errore di privacy con il messaggio di errore "NET :: ERR_CERT_COMMON_NAME_INVALID". Facendo clic sul pulsante avanzato viene visualizzato il messaggio "... il suo certificato di sicurezza proviene da [missing_subjectAltName]"
Insomniac Software

11

L' -passinopzione non fa il trucco per te?

Con il file:pathnamemodulo puoi essere abbastanza sicuro con le autorizzazioni 600 per quel file.


Ho visto l'opzione nella pagina man. Sembra che posso avere la passphrase in quel modo senza chiedere conferma. Grazie!

E con -passin 'pass:YOUR_PASSWORD'? - doc: openssl.org/docs/man1.0.2/apps/…
andras.tim

5

La risposta accettata richiede un paio di piccole correzioni. Linee EC:

-newkey ec
-pkeyopt ec_paramgen_curve:prime256v1

dovrebbe essere:

 -newkey ec \
 -pkeyopt ec_paramgen_curve:prime256v1 \

Su MacOS - OpenSSL 1.0.2f installato tramite brew ho verificato la risposta accettata come descritto di seguito

  • Per elencare le curve ellittiche disponibili:

    $ openssl ecparam -list_curves
    
  • Per generare un file chiave:

    $ openssl ecparam -name secp256k1 -out secp256k1.pem
    
  • Per generare il certificato senza la richiesta della password:

    openssl req \
        -new \
        -newkey ec:secp256k1.pem \
        -days 365 \
        -nodes \
        -x509 \
        -subj "/C=US/ST=FL/L=Ocala/O=Home/CN=example.com" \
        -keyout server.key \
        -out server.crt
    
  • Per visualizzare il certificato:

    $ openssl x509 -noout -text -in server.crt
    

In che modo si differenzia dalla risposta accettata?
Ramhound,

1
L'unica differenza importante è che elencherò esplicitamente il passaggio per generare il file pem. Nella risposta accettata mancano i due \ caratteri e mi ha fatto pensare che il comando non sia corretto.
Andrei Sura,

1
Potresti voler menzionare questo fatto. Se la risposta accettata è effettivamente incompleta e mancano dei caratteri, è importante evidenziare le differenze e il modo in cui la risposta contiene importanti informazioni significative.
Ramhound,

3

Prova il seguente comando:

openssl genrsa -des3 -out user.key -passout pass:foo 1024

La parte saltare è: -passout pass:foo.


2

@bahamat ha un'ottima risposta. Sfortunatamente alcune versioni di openssl generano un errore quando si tenta di creare un certificato ECDSA con un comando. L'errore è simile al seguente:

routines:EVP_PKEY_CTX_ctrl:invalid operation:pmeth_lib.c:404

Stavo usando openssl 1.0.1e-fipsil CentOS 7.

La creazione del certificato con i seguenti 3 comandi sembra funzionare:

openssl ecparam -genkey -name prime256v1 -out key.pem
openssl req -new -key key.pem -out csr.pem -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"
openssl req -x509 -days 365 -key key.pem -in csr.pem -out certificate.pem

L'ultima riga non dovrebbe finire con server.crt?
ᴠɪɴᴄᴇɴᴛ
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.