Me encuentro con una incompatibilidad entre las claves generadas por OpenSSL mientras ejecuto con el modo FIPS deshabilitado e intento usar esas claves con el modo FIPS habilitado.
Versión de OpenSSL = OpenSSL 1.0.1e-fips 11 de febrero de 2013
Comando utilizado para crear la clave (modo FIPS deshabilitado):
openssl genrsa -rand <path to rand file> -aes256 -passout file:<path to password file> -out <path to output .key.pem file> 4096
Comando que intenta usar la clave (modo FIPS habilitado):
openssl ca -config <path to cnf file> -extensions v3_usr_cert -passin file:<path to password file> -batch -notext -in <path to CSR file> -out <path to output .cert.pem file>
El 'default_md' en el archivo cnf está configurado en SHA256 (en las secciones '[CA_default]' y '[req]')
La 'clave_privada' en el archivo cnf está configurada con la clave generada anteriormente
El error que recibo es:
unable to load CA private key
139772432762696:error:060800A3:digital envelope routines:EVP_DigestInit_ex:disabled for fips:digest.c:251:
¿Existe alguna forma diferente en la que debería generar la clave para que sea compatible cuando FIPS está deshabilitado y cuando FIPS está habilitado?
¿Existe alguna forma diferente en la que debería utilizar la clave para firmar la solicitud?
Respuesta1
genrsa
escribe el formato 'tradicional' de OpenSSL: el que tiene etiqueta PEM RSA PRIVATE KEY
y encabezados agregados Proc-Type
y DEK-Info
. Esto utiliza la derivación de clave no estándar de OpenSSL (en realidad SSLeay) ( EVP_BytesToKey
) basada en MD5, que no está aprobado por FIPS. (Y tampoco es muy seguro, pero esa es una pregunta diferente y ya se ha formulado o respondido muchas veces, probablemente más sobre seguridad.SX que aquí).
Puedegeneraruna clave en el formato 'nuevo' (¡desde ~2000!) PKCS8 usando genpkey
(que es mucho más capaz, pero por lo tanto tiene más opciones) o puedeconvertirel formato antiguo con cualquiera
openssl pkey -in tradfile -passin whatever -aes256 -out pkcs8file -passout whatever
openssl pkcs8 -topk8 -in tradfile -passin whatever -v2 aes-256-cbc -out pkcs8file -passout whatever
Cualquiera de estos usa PBES2 y (por lo tanto) PBKDF2 con HMAC-SHA1 predeterminado, lo cual está bien para FIPS. (Técnicamente pkey
no estaba disponible antes de la 1.0.0, pero si había una versión FIPS de 0.9.x, que no recuerdo, debe haber caducado. Y no es que te ayude hoy, sino AIUI 3.0.0, que finalmente comenzó la versión beta hace aproximadamente un mes, tendrá FIPS en la versión normal y no requerirá todos los pasos adicionales).
Para su información default_md
, es [req]
para la firma en el CSR (o con -x509
un certificado autofirmado) y de [CA_default]
manera similar es para la firma en el certificado de ca
, por ejemplo, obtiene RSAwithSHA256 frente a RSAwithSHA1. No tiene nada que ver con ningún archivo de claves, y solo req
puede generar una clave, pero ca
no puede.