Як перетворити .pfx файл у сховище ключів з приватним ключем?


107

Мені потрібно підписати додаток для Android ( .apk).
Я маю .pfxфайл. Я перетворив його у .cerфайл через Internet Explorer, а потім перетворив .cerна .keystoreза допомогою keytool. Тоді я спробував підписатись .apkз jarsigner, але там сказано, що .keystore не містить приватного ключа.

Що я роблю неправильно?


Це може бути корисно: як я можу знайти і запустити Keytool для Windows , stackoverflow.com/questions/5488339 / ...
— Пітер Barbanyaga

Відповіді:


259

Використання JDK 1.6 або новішої версії

У коментарях нижче Джастін зазначив, що тільки keytool здатний зробити це за допомогою наступної команди (хоча тільки в JDK 1.6 і пізніших версіях):

keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

Використання JDK 1.5 або нижче

OpenSSL може це зробити все. Ця відповідь на JGuru - найкращий метод, який я знайшов поки що.

По-перше, переконайтеся, що у вас встановлено OpenSSL . У багатьох операційних системах його вже встановлено, як я виявив у Mac OS X.

Наступні дві команди перетворюють файл pfx у формат, який можна відкрити як сховище ключів Java PKCS12:

openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"

Зверніть увагу, що ім'я, вказане у другій команді, є псевдонімом вашого ключа в новому магазині ключів.

Ви можете перевірити вміст сховища ключів за допомогою утиліти Java keytool за допомогою наступної команди:

keytool -v -list -keystore mykeystore.p12 -storetype pkcs12

Нарешті, якщо вам потрібно, ви можете перетворити це у сховище ключів JKS, імпортуючи створений вище магазин ключів, у новий сховище ключів:

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS

28
немає необхідності у всіх трьох кроках, просто запустіть: keytool -importkeystore -srckeystore mykeystore.pxf -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoreype JKS
— JustinMorris

Я думаю, що старіші версії keytool не дозволили б вам це зробити. Я пам’ятаю, що 8 років тому мені довелося би запускати openssl, але зараз з keytool в Oracle JDK 6 і 7, він працює як шарм, так, як сказав Джастін.
— Девід Броссар

2
Зауважте, я відповів на простішу форму з більш детальною формою за рік до Джастіна.
— gjpc

@gjpc Помічено. Ваша відповідь дуже повна і заслуговує на багато голосів :)
— MikeD

Це дійсно чудова відповідь, і це врятувало мене після днів досліджень. Ця відповідь справді заслуговує на багато більше результатів. Дякую вам сер.
— Mythul

22

jarsigner може використовувати ваш файл pfx як брелок для підписання вашої банки. Будьте впевнені, що у вашому файлі pfx є приватний ключ та ланцюг cert при його експорті. Не потрібно конвертувати в інші формати. Трюк полягає в тому, щоб отримати псевдонім вашого файлу pfx:

 keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias

Щойно у вас є псевдонім, підписання легко

jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"

Вищеописані дві команди запропонують вам ввести пароль, який ви вказали при експорті pfx. Якщо ви хочете, щоб ваш пароль висів у чистому тексті, використовуйте перемикач -storepass перед перемикачем -keystore

Після підписання милуйтеся своєю роботою:

jarsigner.exe -verify -verbose -certs  yourjarfile

1
+1 за те, що не потрібно конвертувати файл сховища ключів (у мене його вже достатньо у форматах!)
— Трейказ

22

Я знайшов цю сторінку, яка розповідає про те, як імпортувати PFX в JKS (магазин ключів Java):

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME

3
Це має бути повною відповіддю!
— JustAGuy

Я шукав відповідь на кшталт цієї - з псевдонімом
— user3437460

У мене є одна проблема, у pfx немає пароля, і -srcstorepassце моя проблема. Цей PFX створений клієнтом LetsEncrypt для Windows
— FiruzzZ

2

Ваш файл PFX повинен містити в ньому приватний ключ. Експортуйте приватний ключ та сертифікат безпосередньо зі свого файлу PFX (наприклад, використовуючи OpenSSL) та імпортуйте їх у свій сховище Java.

Редагувати

Додаткова інформація:

  • Завантажте OpenSSL для Windows тут .
  • Експорт приватного ключа: openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • Експорт сертифіката: openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • Імпортуйте приватний ключ та сертифікат у сховище Java за допомогою keytool.

Скажіть, будь ласка, як я можу імпортувати key.pem та cert.pem за допомогою keytool?
— Сум Аль Абдулла

1
Невелике доповнення: потрібно експортувати приватні кінці в кінці
— morgan_il

2

Джастін (вище) точний. Однак майте на увазі, що залежно від того, від кого ви отримуєте сертифікат (проміжний ЦС, кореневий ЦС чи ні) або від того, як створюється / експортується pfx, іноді вони можуть бути відсутніми в ланцюзі сертифікатів. Після імпорту ви отримаєте сертифікат типу PrivateKeyEntry, але з ланцюжком довжиною 1.

Щоб виправити це, існує кілька варіантів. Простіший варіант, на мій погляд, - імпорт та експорт файлу pfx в IE (вибір параметра включення всіх сертифікатів у ланцюжок). Процес імпорту та експорту сертифікатів в IE повинен бути дуже легким і добре зафіксованим в інших місцях.

Після експорту імпортуйте сховище брелоків, як вказав Джастін вище. Тепер у вас буде магазин брелоків з сертифікатом типу PrivateKeyEntry та довжиною ланцюжка сертифікатів більше 1.

Окремі клієнти веб-служб на базі .Net помиляються (не в змозі встановити довірчі відносини), якщо не робити цього.


Схоже, це не працює на IE11. Не вдається включити ланцюжок сертифікатів, хоч я і кажу. Я знаю, що це працювало і раніше.
— Брайан Кноблауш

0

Якщо ви працюєте з JDK 1.5 або нижче, утиліта keytool не матиме -importkeystoreможливості (див. Документацію щодо клавішних інструментів JDK 1.5 ), і рішення MikeD буде доступне лише за допомогою передачі .pfxна машину з новішим JDK (1.6 або вище).

Ще один варіант JDK 1.5 або нижче (якщо у вас є продукт Oracle WebLogic) - це дотримуватися вказівок цього документа Oracle: Використання форматів сертифікатів PFX та PEM з Keystores . Він описує перетворення у .pemформат, як витягти інформацію про сертифікати з цього текстового формату та імпортувати їх у .jksформат з java utils.ImportPrivateKeyутилітою (це утиліта, що входить до продукту WebLogic).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.