Можно ли использовать закрытые ключи, сгенерированные OpenSSL при отключенном режиме FIPS, при включенном режиме FIPS?

Можно ли использовать закрытые ключи, сгенерированные OpenSSL при отключенном режиме FIPS, при включенном режиме FIPS?

Я сталкиваюсь с несовместимостью между ключами, сгенерированными OpenSSL при работе с отключенным режимом FIPS, и попыткой использовать эти ключи при включенном режиме FIPS.

Версия OpenSSL = OpenSSL 1.0.1e-fips 11 февраля 2013 г.

Команда, используемая для создания ключа (режим FIPS отключен):

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

Команда, пытающаяся использовать ключ (режим FIPS включен):

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>

Для параметра «default_md» в файле cnf установлено значение SHA256 (в разделах «[CA_default]» и «[req]»).

«private_key» в файле cnf устанавливается на ключ, сгенерированный выше.

Я получаю следующую ошибку:

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

Есть ли другой способ генерации ключа, чтобы сделать его совместимым при отключенном и включенном FIPS?

Есть ли другой способ использования ключа для подписания запроса?

решение1

genrsaзаписывает «традиционный» формат OpenSSL — тот, что с меткой PEM RSA PRIVATE KEYи добавленными заголовками Proc-Typeи DEK-Info. Он использует нестандартный вывод ключей OpenSSL (на самом деле SSLeay) ( EVP_BytesToKey) на основе MD5, который не одобрен FIPS. (И также не очень безопасен, но это другой вопрос, и его уже задавали или на него отвечали много раз, вероятно, больше на security.SX, чем здесь.)

Ты можешьгенерироватьключ в «новом» (примерно с 2000 года!) формате PKCS8 genpkey(который гораздо более функционален, но, следовательно, имеет больше опций) или вы можетеконвертироватьстарый формат с любым

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

Любой из них использует PBES2 и (следовательно) PBKDF2 с HMAC-SHA1 по умолчанию, что приемлемо для FIPS. (Технически pkeyне было доступно до версии 1.0.0, но если была версия FIPS 0.9.x, которую я не помню, она, должно быть, уже устарела. И не то чтобы это помогло вам сегодня, но AIUI 3.0.0, бета-версия которой, наконец, началась около месяца назад, будет иметь FIPS в обычной сборке, не требуя всех дополнительных шагов.)

FYI default_mdв [req]для подписи на CSR (или с -x509самоподписанным сертификатом) и в [CA_default]аналогично для подписи на сертификате ca-- например, вы получаете RSAwithSHA256 вместо RSAwithSHA1. Это не имеет ничего общего с каким-либо ключевым файлом, и только reqдаже может сгенерировать ключ, caне может.

Связанный контент