Это довольно просто, по крайней мере, используя 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