Як перетворити .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.