Il mio obiettivo era creare una chiave privata e crittografarla con una cifratura strong. Tale chiave verrebbe utilizzata come certificato di origine per un'autorità di certificazione interna.
Tuttavia, anche se openssl supporta AES 128 GCM , non posso generare e crittografare una chiave utilizzando questo algoritmo di crittografia. OpenSSL riporta error writing key
. Entrambi i GCM AES 128/256 hanno fallito, tuttavia AES 128 CBC ha funzionato. Che cosa sto facendo male? Ho bisogno di parametri extra quando uso GCM?
Ecco il comando:
$ openssl genpkey -out ca.key.pem -aes-128-gcm -algorithm rsa -pkeyopt rsa_keygen_bits:4096
L'output è questo:
.........................................................................+++
............................+++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Error writing key
:error:23077006:PKCS12 routines:PKCS12_pbe_crypt:EVP lib:p12_decr.c:96:
:error:2306C067:PKCS12 routines:PKCS12_item_i2d_encrypt:encrypt error:p12_decr.c:175:
:error:2307D067:PKCS12 routines:PKCS8_encrypt:encrypt error:p12_p8e.c:88:
Nota: la maggior parte delle risorse online sono obsolete (nota a piè di pagina 1) e utilizzano i flag sostituiti di genrsa o -nodes / -des. Quindi uso le risorse online come base, oltre alle pagine man (anche piuttosto obsolete) di openssl e al flag "-help" dei vari comandi openssl per creare il comando sopra, IMHO aggiornato,
Nel comando precedente, ho provato a sostituire -aes-128-gcm
con:
-aes-256-gcm
-aes-128-xts
-aes-256-xts
E tutto fallito. Le XTS non sono riuscite con il seguente errore:
:error:0D0A706C:asn1 encoding routines:PKCS5_pbe2_set_iv:cipher has no object identifier:p5_pbev2.c:103:
:error:2307D00D:PKCS12 routines:PKCS8_encrypt:ASN1 lib:p12_p8e.c:79:
Utilizzo:
-aes-128-cbc (like in an example in the man page from genpkey)
-aes128
-aes256
Tutto ha funzionato bene.
Stranamente tutti i codici sopra citati sono supportati dalla versione di openssl che sto usando.
$ openssl enc -help 2>&1 | grep aes | egrep "128|256"
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ctr -aes-128-ecb
-aes-128-gcm -aes-128-ofb -aes-128-xts
-aes-192-gcm -aes-192-ofb -aes-256-cbc
-aes-256-cfb -aes-256-cfb1 -aes-256-cfb8
-aes-256-ctr -aes-256-ecb -aes-256-gcm
-aes-256-ofb -aes-256-xts -aes128
-aes192 -aes256
Nota: testato su Ubuntu 14.04.2, Debian 7.8 e CentOS 7. Tutti hanno mostrato lo stesso comportamento.
nota a piè di pagina 1 : se cerchi google " openssl genera il certificato radice autofirmato ", nessuno dei 5 primi risultati ti dice di crittografare il tuo certificato privato root con qualcosa di meglio del triplo DES!?! Un link dei 5 primi collegamenti consiglia per 4096 bit, mentre l'altro fornisce 2048 o 1024!?! La maggior parte non fornisce alcun indicatore di cifratura, quindi la chiave non è crittografata. In realtà, solo il 7th link fa un lavoro decente nello spiegare cosa e come farlo.
Aggiornamento 20161218 : testato di nuovo senza successo su Ubuntu 16.04 LTS con openssl 1.0.2g.