Cuando se genera una clave con openssl genrsa
, el cifrado se selecciona con un argumento de línea de comando como -aes128
. Una vez que se genera la clave, podemos ver qué cifrado se usó en el archivo. Ej:
cat host.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,AF4EBC2AE861F6FE8C751F7DAD5D4721
...
-----END RSA PRIVATE KEY-----
Cuando se genera una clave a través de openssl req -newkey rsa:2048 -keyout host.key
, el archivo no indica qué cifrado se usó.
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----
¿Qué es?
¿Cómo sabe openssl rsa -in host.key
cómo descifrar la clave?
Actualizar
openssl req
se cifra de forma predeterminada con DES-EDE3-CBC.
openssl req -new -x509 -out server.cer -keyout server.key -subj "/CN=toto/"
Generating a 1024 bit RSA private key
..................++++++
..++++++
writing new private key to 'server.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
cat server.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,02306CD22AAC94CD
-----END RSA PRIVATE KEY-----
El problema es con mi comando original. Especificó una configuración que influye en la generación de claves de alguna manera todavía se me escapa.
De forma predeterminada, la configuración asumirá encrypt_key = yes
. Eso lleva a que la clave se cifre con algo no especificado. Especificar encrypt_key = no
bajo la sección [req]
es equivalente al argumento -nodes
.
Las siguientes preguntas permanecen sin embargo:
- ¿Qué cifrado se aplica mediante openssl req cuando se especifica una configuración?
- ¿Se puede controlar el algoritmo?
- ¿Cómo adivina
openssl rsa
el cifrado correcto para el descifrado? Obviamente, debe estar codificado en algún lugar de los datos ...
Al principio, parece bueno que openssl req
genere la clave para mí. Pero genrsa
ofrece más control.