Создание файла pem из p12 в ОС с поддержкой FIPS - PullRequest
0 голосов
/ 06 января 2020

Наше приложение содержит скрипт, который конвертирует p12 в формат pem. Операционная система поддерживает RHEL 7 FIPS и использует библиотеку OpenSSL 1.0.2k-fips. Сценарий завершается с ошибкой во время этого преобразования pem. Перепробовал несколько алгоритмов, кроме RC2-40, и он все еще не работает, пытаясь найти правильные флаги для передачи в команде openssl для успешного выполнения этого преобразования pem, любые предложения:

Команда:

openssl pkcs12 -in app1-serverpub.p12 -certpbe pbeWithSHA1And3-KeyTripleDES-CBC -keypbe pbeWithSHA1And3-KeyTripleDES-CBC -out ca-bundle.pem -passin pass:xxxx -info

Ошибка:

MAC Iteration 100000  
MAC verified OK  
PKCS7 Encrypted data: `pbeWithSHA1And40BitRC2-CBC`, Iteration 50000  
Error outputting keys and certificates  
139990890305424:error:060740A0:digital envelope routines:EVP_PBE_CipherInit:unknown cipher:evp_pbe.c:181:  
139990890305424:error:23077073:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 algor cipherinit error:p12_decr.c:87: 
139990890305424:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:139:

======================= ================================================

Пробовал приведенную ниже команду для различных предложений, но не смог переопределить эту ошибку:

openssl pkcs12 -in app1-serverpub.p12 -out ca-bundle.pem -passin pass:xxxx -descert -info
PKCS7 Зашифрованные данные: pbeWithSHA1And40BitRC2-CBC, Итерация 50000

  1. Пожалуйста, предложите правильный алгоритм / правильные значения, чтобы попробовать команду certpbe, keypbe
  2. openssl, чтобы использовать любой алгоритм, который переопределяет RC2-40, который не является жалобой FIPS

Спасибо.

1 Ответ

0 голосов
/ 06 января 2020

Параметры -certpbe -keybpe -descert применяются только при использовании от openssl pkcs12 -export до создания файла PKCS12 (из файлов PEM для ключа и сертификата (ов)). Они игнорируются, не реализуются, отбрасываются, неэффективны и бесполезны при чтении существующего файла, как вы делаете. В существующем файле p12 части его содержимого (называемые «пакетами») зашифрованы с использованием алгоритмов, выбранных после завершения шифрования, и файл, который вы уже зашифровали с использованием алгоритмов, которые использовались - в прошлом - по-видимому, включая RC2 -40 для cert bag, как это очень часто и де-факто стандарт (и по умолчанию для openssl, когда не в режиме FIPS). Ничто из того, что вы делаете сейчас, не может изменить это, поскольку это происходило в прошлом, и время идет только вперед, а не назад.

В зависимости от причин, по которым эта система используется в режиме FIPS, вы можете получить разрешение чтобы выполнить эту указанную c операцию в режиме не FIPS. Я предполагаю, что выходные файлы PEM должны использоваться в этой системе, и тот, кто принимает эти решения, вероятно, потребует, чтобы privatekey output был FIPS-совместимым, но это нормально, потому что OpenSSL по умолчанию для pkcs12pbe-using-SHA1 -plus-3DES утвержден (одобрены).

В качестве альтернативы вы должны либо иметь, кто или что бы то ни было создает этот файл использует утвержденные алгоритмы, или вы должны преобразовать его, чтобы сделать это в другой системе, которая не не применяет FIPS; в этой системе вы можете использовать:

openssl pkcs12 -in bad.p12 -passin whatever -nodes | openssl pkcs12 -export -descert -passout whatever -out good.p12

Это преобразует содержимое в PEM и направляет их напрямую в процесс, который преобразует обратно в новый, совместимый p12. Использование -nodes избавляет от необходимости указывать или вводить избыточный пароль (как минимум дважды) для внутренних передаваемых данных, но вы можете его опустить, если вы (или ваш установщик правил) предпочитаете.

...