Создание PEM, pfx из частного модуля,

я получил следующее от какой-то устаревшей системы, когда я попросил закрытый ключ: MODULUS, PUBLIC EXP, PRIVATE EXP, PRIME_P, PRIME_Q, PARAM_P, PARAM_Q, Q_MOD_INV

Все эти данные находятся в шестнадцатеричном формате, как я могу преобразовать их в файл openssl PEM или PFX?

Спасибо и всего наилучшего!


person Lonko    schedule 27.02.2014    source источник


Ответы (1)


Сгенерируйте ключ RSA с помощью openssl:

openssl genrsa -out rsa.pem 2048

Преобразование ключа RSA из формата PEM в формат DER:

openssl rsa -inform PEM -in rsa.pem -outform DER -out rsa.der

Откройте файл rsa.der в Редакторе ASN.1:

Файл rsa.der открыт в редакторе ASN.1

Структура закрытого ключа RSA ASN.1 определена в PKCS#1 (RFC 3447):

  RSAPrivateKey ::= SEQUENCE {
      version           Version,
      modulus           INTEGER,  -- n
      publicExponent    INTEGER,  -- e
      privateExponent   INTEGER,  -- d
      prime1            INTEGER,  -- p
      prime2            INTEGER,  -- q
      exponent1         INTEGER,  -- d mod (p-1)
      exponent2         INTEGER,  -- d mod (q-1)
      coefficient       INTEGER,  -- (inverse of q) mod p
      otherPrimeInfos   OtherPrimeInfos OPTIONAL
  }

Отредактируйте необходимые поля в редакторе ASN.1 (щелкните элемент правой кнопкой мыши и выберите «Редактировать в шестнадцатеричном режиме») и вставьте свои данные, следуя этому сопоставлению:

  MODULUS = modulus
  PUBLIC EXP = publicExponent
  PRIVATE EXP = privateExponent
  PRIME_P = prime1
  PRIME_Q = prime2
  PARAM_P = exponent1
  PARAM_Q = exponent2
  Q_MOD_INV = coefficient

Редактировать с учетом комментариев. Отдельные части закрытого ключа представляют собой большие целые числа. Когда крайний левый бит значения равен 1 (или крайний левый байт равен или больше 0x80), тогда к значению необходимо добавить байт 0x00, чтобы указать, что это положительное число.

Наконец, сохраните измененный файл и преобразуйте его из формата DER в формат PEM с помощью openssl:

openssl rsa -inform DER -in rsa.der -outform PEM -out rsa.pem
person jariq    schedule 27.02.2014
comment
Когда я открываю сгенерированный модуль файла der, он имеет длину 257, а частный опыт также 257 ... У меня есть 256 байт данных, и теперь, когда я редактировал и конвертировал в pem и пытался увидеть детали сертификата, я получаю: не удалось загрузить сертификат 3068241860: ошибка: 0906D06C: подпрограммы PEM: PEM_read_bio: нет стартовой строки: pem_lib.c: 696: ожидается: ДОВЕРЕННЫЙ СЕРТИФИКАТ - person Lonko; 28.02.2014
comment
Отдельные части закрытого ключа представляют собой большие целые числа. Когда крайний левый бит значения равен 1 (или крайний левый байт больше 0x80), то байт 0x00 обычно добавляется к значению, чтобы указать, что это положительное число. Вероятно, поэтому у вас 257 байт в одном ключе и 256 байт в другом ключе. Вы можете добавить 0x00 к значениям, которые соответствуют этому условию в вашем закрытом ключе. - person jariq; 28.02.2014
comment
Ошибка синтаксического анализа сертификата указывает на то, что файл сертификата, вероятно, хранится в неправильной кодировке PEM. Вы можете попытаться разобрать его как сертификат в кодировке DER, используя команду openssl x509 -inform DER -in file.cer -text. Если это не сработает, откройте файл сертификата в текстовом редакторе и опишите его содержимое в комментарии (т.е. это двоичный файл, в шестнадцатеричном кодировании - содержит только числа, в кодировке base64 - содержит как числа, так и печатные символы и т. д.). - person jariq; 28.02.2014
comment
Я исправил 0x00, чтобы он соответствовал положительному/отрицательному, и все равно! Когда я вывожу текст DER, я получаю: ~ # openssl x509 -inform DER -in rsa.der -текст не может загрузить сертификат 3068241860: ошибка: 0D0680A8: процедуры кодирования asn1: ASN1_CHECK_TLEN: неправильный тег: tasn_dec.c: 1329: 3068241860: ошибка: 0D07803A:подпрограммы кодирования asn1:ASN1_ITEM_EX_D2I:вложенная ошибка asn1:tasn_dec.c:381:Type=X509_CINF 3068241860:ошибка:0D08303A:подпрограммы кодирования asn1:ASN1_TEMPLATE_NOEXP_D2I:вложенная ошибка asn1:tasn_dec.c:7Xt_info=Field - person Lonko; 28.02.2014
comment
Это странно: root@ubuntu:/home/user# openssl genrsa -out rsa.pem 2048 Генерация закрытого ключа RSA, модуль длиной 2048 бит .................++ + ...........................+++ e is 65537 (0x10001) root@ubuntu:/home/user# openssl x509 -in rsa.pem -text не удалось загрузить сертификат 3074160840: ошибка: 0906D06C: процедуры PEM: PEM_read_bio: нет стартовой строки: pem_lib.c: 696: ожидание: ДОВЕРЕННЫЙ СЕРТИФИКАТ - person Lonko; 28.02.2014
comment
Я думаю, что понял, это ключ rsa, а не сертификат, поэтому никакая информация не может отображаться! Процедура в ответе РАБОТАЕТ с добавлением комментария @jariq! - person Lonko; 28.02.2014
comment
Это верно. В этом файле хранится только ключ RSA. Я отредактировал свой ответ и добавил информацию о больших целых числах. - person jariq; 01.03.2014