Это довольно просто, по крайней мере, используя jdk6 ...
bash $ keytool -keystore foo.jks -genkeypair -alias foo \
-dname 'CN = foo.example.com, L = Мельбурн, ST = Виктория, C = AU'
Введите пароль хранилища ключей:
Повторно введите новый пароль:
Введите ключевой пароль для
(ВОЗВРАТ если совпадает с паролем хранилища ключей):
bash $ keytool -keystore foo.jks -exportcert -alias foo | \
openssl x509 -inform der -text
Введите пароль хранилища ключей: asdasd
Сертификат:
Данные:
Версия: 3 (0x2)
Серийный номер: 1237334757 (0x49c03ae5)
Алгоритм подписи: dsaWithSHA1
Эмитент: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Срок действия
Не раньше: 18 марта, 00:05:57 2009 г., GMT
Не после: 16 июня, 00:05:57 2009 г., GMT
Тема: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Информация об открытом ключе субъекта:
Алгоритм открытого ключа: dsaEncryption
Открытый ключ DSA:
паб:
00: е2: 66: 5с: е0: 2e: да: е0: 6b: а6: аа: 97: 64: 59: 14:
7e: а6: 2e: 5а: 45: f9: 2f: В5: 2d: f4: 34: 27: е6: 53: с7:
bash $ keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
Введите пароль целевого хранилища ключей:
Повторно введите новый пароль:
Введите пароль исходного хранилища ключей:
Запись для псевдонима foo успешно импортирована.
Команда импорта выполнена: 1 запись успешно импортирована, 0 записей не выполнено или отменено
bash $ openssl pkcs12 -in foo.p12 -out foo.pem
Введите пароль для импорта:
MAC подтвержден ОК
Введите парольную фразу PEM:
Проверка - введите парольную фразу PEM:
bash $ openssl x509 -text -in foo.pem
Сертификат:
Данные:
Версия: 3 (0x2)
Серийный номер: 1237334757 (0x49c03ae5)
Алгоритм подписи: dsaWithSHA1
Эмитент: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Срок действия
Не раньше: 18 марта, 00:05:57 2009 г., GMT
Не после: 16 июня, 00:05:57 2009 г., GMT
Тема: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Информация об открытом ключе субъекта:
Алгоритм открытого ключа: dsaEncryption
Открытый ключ DSA:
паб:
00: е2: 66: 5с: е0: 2e: да: е0: 6b: а6: аа: 97: 64: 59: 14:
7e: а6: 2e: 5а: 45: f9: 2f: В5: 2d: f4: 34: 27: е6: 53: с7:
bash $ openssl dsa -text -in foo.pem
прочитать ключ DSA
Введите парольную фразу PEM:
Закрытый ключ: (1024 бит)
собств:
00: 8f: b1: аф: 55: 63: 92: 7в: d2: 0f: е6: f3: а2: f5: FF:
1a: 7a: Fe: 8c: 39: дд
паб:
00: е2: 66: 5с: е0: 2e: да: е0: 6b: а6: аа: 97: 64: 59: 14:
7e: а6: 2e: 5а: 45: f9: 2f: В5: 2d: f4: 34: 27: е6: 53: с7:
В итоге вы получите:
- foo.jks - хранилище ключей в формате java.
- foo.p12 - хранилище ключей в формате PKCS # 12.
- foo.pem - все ключи и сертификаты из хранилища ключей в формате PEM.
(Этот последний файл можно разделить на ключи и сертификаты, если хотите.)
Сводка команд - для создания хранилища ключей JKS:
keytool -keystore foo.jks -genkeypair -alias foo \
-dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'
Сводка команд - для преобразования хранилища ключей JKS в хранилище ключей PKCS # 12, а затем в файл PEM:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
если у вас есть несколько сертификатов в хранилище ключей JKS, и вы хотите экспортировать только сертификат и ключ, связанные с одним из псевдонимов, вы можете использовать следующий вариант:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcalias foo \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
Сводка команд - для сравнения хранилища ключей JKS с файлом PEM:
keytool -keystore foo.jks -exportcert -alias foo | \
openssl x509 -inform der -text
openssl x509 -text -in foo.pem
openssl dsa -text -in foo.pem
Я все время получал ошибки
openssl
при использовании команды StoBor:По какой-то причине для моего файла JKS будет работать только этот стиль команды
Ключ ставил
destkeypass
, значение аргумента значения не имело.источник
Команда
keytool
не позволит вам экспортировать закрытый ключ из хранилища ключей. Для этого вам нужно написать код Java. Откройте хранилище ключей, получите нужный ключ и сохраните его в файл в формате PKCS # 8. Также сохраните связанный сертификат.Используйте утилиты OpenSSL для преобразования этих файлов (в двоичном формате) в формат PEM.
источник
Прямое преобразование из jks в файл pem с помощью keytool
источник
keytool
иjboss
страницах документации. Спасибо!Упрощенные инструкции по преобразованию файла JKS в формат PEM и KEY (.crt и .key):
источник
Нашел очень интересное решение:
http://www.swview.org/node/191
Затем я разделил пару открытый / закрытый ключ на два файла private.key publi.pem, и все заработало!
источник
Преобразование JKS KeyStore в один файл PEM можно легко выполнить с помощью следующей команды:
Объяснение:
keytool -list -rfc -keystore "myKeystore.jks"
перечисляет все в хранилище ключей myKeyStore.jks в формате PEM. Однако он также печатает дополнительную информацию.| sed -e "/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d"
отфильтровывает все, что нам не нужно. У нас остались только PEM всего в KeyStore.>> "myKeystore.pem"
запишите PEM в файл myKeyStore.pem.источник
sed "s/^\-*BEGIN [A-Z]*\-*$//g;s/^\-*END [A-Z]*\-*$//g"
(с gnu sed), но я не уверен, что этого достаточно, если в вашем хранилище ключей больше одного сертификатаbash: !d": event not found
: для bash восклицательный знак - это короткий ключ для использования команды. Чтобы использовать этот ответ, вам нужно использовать апострофы вместо кавычек для параметра, используемого как -e для sedkeytool -list -rfc -keystore "myKeystore.jks" | sed -e '/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d' >> "myKeystore.pem"
Сначала сделайте дамп хранилища ключей из JKS в PKCS12
1. keytool -importkeystore -srckeystore ~ / .android / debug.keystore -destkeystore intermediate.p12 -srcstoretype JKS -deststoretype PKCS12
Выгрузите новый файл pkcs12 в pem
У вас должен быть сертификат и закрытый ключ в формате pem. Разделите их. Поместите часть между «BEGIN CERTIFICATE» и «END CERTIFICATE» в cert.x509.pem. Поместите часть между «BEGIN RSA PRIVATE KEY» и «END RSA PRIVATE KEY» в private.rsa.pem. Преобразуйте закрытый ключ в формат pk8 как ожидается сигналом
3. openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt
источник
Что ж, OpenSSL должен делать это легко из файла №12:
Может быть, поподробнее, что это за ошибка / сбой?
источник
Если у вас не установлен openssl и вы ищете быстрое решение, есть программное обеспечение под названием portcle. которое очень полезно и мало для загрузки.
Минус в том, что, насколько мне известно, нет командной строки. Но из графического интерфейса довольно просто экспортировать закрытый ключ PEM:
Выберите закрытый ключ и сертификаты и формат PEM
источник
Попробуйте Keystore Explorer http://keystore-explorer.org/
KeyStore Explorer - это замена графического интерфейса пользователя с открытым исходным кодом для утилит командной строки Java keytool и jarsigner. Он также поддерживает openssl / pkcs12.
источник
сначала создайте файл хранилища ключей как
C: \ Program Files \ Android \ Android Studio \ jre \ bin> keytool -keystore androidkey.jks -genkeypair -alias androidkey
Введите пароль хранилища ключей:
Введите новый пароль еще раз:
Ваше имя и фамилия? Неизвестно: Имя Фамилия
Как называется ваша организационная единица? Неизвестно: Мобильная разработка
Как называется ваша организация? Неизвестно: название вашей компании
Как называется ваш город или населенный пункт? Как называется ваш штат или провинция?
Что такое двухбуквенный код страны для данного устройства? Неизвестно: IN // нажмите ввод
Правильно ли CN = FirstName LastName, OU = Mobile Development, O = название вашей компании, L = CityName, ST = StateName, C = IN? [Нет]: да
Введите ключевой пароль для (ВОЗВРАТ, если такой же, как пароль хранилища ключей): нажмите Enter, если вы хотите тот же пароль
C: \ Program Files \ Android \ Android Studio \ jre \ bin> keytool -export -rfc -alias androidkey -file android_certificate.pem -keystore androidkey.jks
Введите пароль хранилища ключей:
сертификат хранится в файле
источник
Самый точный ответ должен заключаться в том, что это НЕ возможно.
Хранилище ключей Java - это просто средство хранения криптографических ключей и сертификатов, в то время как PEM - это формат файла только для сертификатов X.509.
источник