Können von OpenSSL bei deaktiviertem FIPS-Modus generierte private Schlüssel auch bei aktiviertem FIPS-Modus verwendet werden?

Können von OpenSSL bei deaktiviertem FIPS-Modus generierte private Schlüssel auch bei aktiviertem FIPS-Modus verwendet werden?

Ich stoße auf eine Inkompatibilität zwischen den von OpenSSL generierten Schlüsseln bei deaktiviertem FIPS-Modus und dem Versuch, diese Schlüssel bei aktiviertem FIPS-Modus zu verwenden.

OpenSSL-Version = OpenSSL 1.0.1e-fips 11. Februar 2013

Zum Erstellen des Schlüssels verwendeter Befehl (FIPS-Modus deaktiviert):

openssl genrsa -rand <path to rand file> -aes256 -passout file:<path to password file> -out <path to output .key.pem file> 4096

Befehl, der versucht, den Schlüssel zu verwenden (FIPS-Modus aktiviert):

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>

Das „default_md“ in der cnf-Datei ist auf SHA256 eingestellt (sowohl im Abschnitt „[CA_default]“ als auch im Abschnitt „[req]“).

Der ‚private_key‘ in der CNF-Datei wird auf den oben generierten Schlüssel gesetzt

Ich erhalte folgende Fehlermeldung:

unable to load CA private key
139772432762696:error:060800A3:digital envelope routines:EVP_DigestInit_ex:disabled for fips:digest.c:251:

Gibt es für mich eine andere Möglichkeit, den Schlüssel zu generieren, um ihn kompatibel zu machen, wenn FIPS deaktiviert und wenn FIPS aktiviert ist?

Gibt es eine andere Möglichkeit, wie ich den Schlüssel zum Signieren der Anfrage verwenden sollte?

Antwort1

genrsaschreibt OpenSSLs „traditionelles“ Format – das mit PEM-Label RSA PRIVATE KEYund hinzugefügten Headern Proc-Typeund DEK-Info. Dies verwendet OpenSSLs (eigentlich SSLeays) nicht standardmäßige Schlüsselableitung ( EVP_BytesToKey) basierend auf MD5, das nicht FIPS-geprüft ist. (Und ist auch nicht sehr sicher, aber das ist eine andere Frage und wurde bereits viele Male gestellt oder beantwortet, wahrscheinlich mehr auf security.SX als hier.)

Du kannstgeneriereneinen Schlüssel im 'neuen' (seit ~2000!) PKCS8-Format verwenden genpkey(das viel leistungsfähiger ist, aber daher mehr Optionen bietet) oder Sie könnenKonvertierendas alte Format mit entweder

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

Beide verwenden PBES2 und (daher) PBKDF2 mit dem Standard HMAC-SHA1, was für FIPS in Ordnung ist. (Technisch pkeywar es vor 1.0.0 nicht verfügbar, aber wenn es eine FIPS-Version von 0.9.x gab, an die ich mich nicht erinnere, muss sie abgelaufen sein. Und nicht, dass es Ihnen heute hilft, aber AIUI 3.0.0, dessen Beta vor etwa einem Monat endlich gestartet ist, wird FIPS im normalen Build haben und erfordert nicht alle zusätzlichen Schritte.)

Zu Ihrer Information: default_mdin [req]ist für die Signatur auf der CSR (oder mit -x509selbstsigniertem Zertifikat) und in [CA_default]ist ähnlich für die Signatur auf dem Zertifikat von ca– Sie erhalten z. B. RSAwithSHA256 gegenüber RSAwithSHA1. Es hat nichts mit einer Schlüsseldatei zu tun und reqkann nur sogar einen Schlüssel generieren, canicht aber.

verwandte Informationen