Я унаследовал некоторые скрипты PKI в процессе нашего обновления с RHEL6 до RHEL7, и у нас, похоже, есть некоторые проблемы с OpenSSL и Keytool Java. Я ни в коем случае не эксперт PKI, и начал царапать поверхность PKI от исследования этой проблемы.
Мы генерируем JKS, используя keytools genkeypair
keytool -genkeypair -alias $ALIAS -keyalg RSA -keysize 2048 -keystore $keystore.jks -storepass $pass -keypass $pass -dname "{$dname}" -ext san=${san}
, а затем преобразовать этот JKS в хранилище ключей PKCS12.
keytool -importkeystore -srckeystore $keystore.jks -destkeystore $p12keystore -srcstoretype JKS -deststoretype PKCS12 -srcstorepass $pass -deststorepass $pass -srcalias $ALIAS destalias $ALIAS -srckeypass $pass -destkeypass $pass -noprompt
Затем мы пытаемся извлечь закрытый ключ и сохранить его в файле PEM.
openssl pkcs12 -in $p12keystore -nocerts -out $key.pem -passin $pass -passout $pass -nomacver
Операция проходит без проблем, когда в системе отключен FIPS. Когда мы включаем FIPS, мы получаем ошибку
error:060740A0:digital envelope routines:EVP_PBE_CipherInit:unknown cipher: evp_pbe.c:181
выполняя некоторые раскопки, я обнаружил, что наш инструмент ключей не меняет структуру структурированного хранилища ключей PKCS12 при включенном fips, и я думаю, что это вызывает проблему. когда я проверяю хранилище ключей с помощью openssl, я получаю похожую ошибку после того, как она показывает данные PCKS7 внутри хранилища ключей
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 50000
Error outputing keys and certificates
error:060740A0:digital envelope routines:EVP_PBE_CipherInit:unknown cipher: evp_pbe.c:181
Я считаю, что этот алгоритм не совместим с FIPS, что приводит к ошибке OpenSSL, поскольку в режиме fips он отключает этот шифр и не может интерпретировать сертификат, поэтому не может получить секретный ключ для его извлечения.
У меня такое ощущение, что я использую не совместимую с Fips версию java (openjdk 1.8.0._171-b19) или мне не хватает некоторого криптографического расширения, которое мне понадобится, чтобы сделать мой Java FIPS-совместимым в RHEL7.
Я сталкивался с некоторыми из предыдущих проблем, в которых говорилось об использовании опции -descert в качестве обходного пути для использования 3DES для получения ключа, но это не изменило результат. Какие-нибудь идеи или подобные проблемы, с которыми вы могли столкнуться?