Вопрос по certificate, keytool, java – Как распечатать открытый ключ сертификата с помощью keytool?

24

В keytool есть способ напечатать открытый ключ сертификата? Я старался:

<code>keytool -printcert -file client.crt
</code>

Но это дает только следующую информацию:

<code>Owner: CN=client, OU=as, O=as, L=as, ST=as, C=as
Issuer: EMAILADDRESS=as, CN=ca, OU=as, O=as, L=as, ST=as, C=as
Serial number: 3
Valid from: Tue Apr 10 12:18:47 GMT+05:30 2012 until: Wed Apr 10 12:18:47 GMT+05
:30 2013
Certificate fingerprints:
         MD5:  26:C0:29:E9:8C:AB:C3:9E:95:38:74:8A:87:D3:86:8D
         SHA1: 5C:5A:BA:47:44:83:7E:CB:48:BE:DD:E5:39:51:24:42:C6:C5:60:8B
         SHA256: DA:26:B8:C8:F4:04:3E:62:F3:7F:3B:EC:1D:9F:85:66:28:00:45:55:66:
15:FF:BB:37:77:97:59:F0:EC:0B:B6
         Signature algorithm name: SHA1withRSA
         Version: 1
</code>

В этом нет открытого ключа.

Для этого есть способ использовать keytool с опцией -list, но принятый ответ говорит об использовании openssl. Пожалуйста, обратитесь к ответу Влада Санкина ниже. Nish

Ваш Ответ

4   ответа
5

Keytool list rfc просто печатаетbase64 encoded версия всего сертификата, а неpublic key, Keytool не поддерживает печать открытого ключа сертификата. Мы можем использоватьopenssl для этого.

46

Вы можете сделать это с:

keytool -list -rfc -keystore mykeystore.jks -alias certificate_alias -storepass password

Пример выполнения:

PS c:\sample> keytool -list -rfc -keystore mykeystore.jks -alias cert_alias -storepass password
Alias name: cert_alias
Creation date: Apr 25, 2014
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
-----BEGIN CERTIFICATE-----
MIIB4zCCAUygAwIBAgIIRzI14w7rL20wDQYJKoZIhvcNAQENBQAwMzELMAkGA1UEBhMCVVMxDTAL
BgNVBAoTBE5vbmUxFTATBgNVBAMTDE5vbmUgb3U9Tm9uZTAgFw0xNDA0MjQxNzQ0NDJaGA8yMTE0
MDQyNTE3NDQ0MlowMzELMAkGA1UEBhMCVVMxDTALBgNVBAoTBE5vbmUxFTATBgNVBAMTDE5vbmUg
b3U9Tm9uZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAivXBBtFnJTm1NbHysv3Mnpn/lCg6
1onJDxr/jkvI8+1Bljs1jktyYOeKDWxJwpDU7QyIqttgtDvRT4Yaew5WiQyADIyY0cBTvp3S7uKx
M5C3zxZdG6WTflU7xcYnGk3/d0VhwA6BL9YPsRaS/K+ww1yvxWKIOPW68wDe0ccvGWcCAwEAATAN
BgkqhkiG9w0BAQ0FAAOBgQB/5qDMA9fmlCWlOD9aHjBD6I8zAOSshMCFK8XcZJHowag8WtZyL3DR
insx2HoDlBewIJAEtAplo2NpeFyNtK93PS7zV+vwEYHCu46Db3klMksp3MmSXD39QPlmwfsGZlja
K8Ww0TsR5GtccFMH41KKa+PlvVZNEdZumdrca59olQ==
-----END CERTIFICATE-----
Почему образец говоритPrivateKeyEntry ? Это закрытый ключ?
Спустя 2 года я понимаю, что @VladSankin просто описывал, как получить сертификат в качестве предвестника использования openssl для извлечения из него открытого ключа. Поэтому, основываясь на принятом ответе, вы можете сделать что-то вродеkeytool -list -rfc -keystore mykeystore.jks -alias cert_alias -storepass password | openssl x509 -inform pem -pubkey -noout | openssl rsa -pubin -text -noout
Был задан вопрос, как распечатать открытый ключ сертификата. Этот вывод является PEM-кодированным представлением всего сертификата. Вывод с открытым ключом начинается с «----- BEGIN PUBLIC KEY -----»
при условии, что openssl недоступен и ответить на реальный вопрос (как использовать keytool для печати части открытого ключа).
Было бы замечательно, если бы вы упомянули документацию и назначение аргумента -rfc keytool
7

Вы можете распечатать сертификат в формате pem, а затем использовать openssl для печати открытого ключа из формата pem.

  1. add -rfc option to -printcert

    keytool -printcert -rfc -file client.crt

  2. save the output like below to a file client.pem

    -----BEGIN CERTIFICATE----- MIIB4zCCAUygAwIBAgIIRzI14w7rL20wDQYJKoZIhvcNAQENBQAwMzELMAkGA1UEBhMCVVMxDTAL

    ......

    -----END CERTIFICATE-----

  3. then use openssl

    openssl x509 -inform pem -text -in client.pem

так что вы получили открытый ключ

Без промежуточного файла: keytool -list -rfc --keystore ./path_to_keystore.jks | openssl x509 -информ pem -pubkey
25

Вы можете сделать это сopenssl.

Если этот сертификат является DER-кодированным (двоичным), используйте:

openssl x509 -inform der -in client.crt -pubkey -noout

для использования в кодировке PEM-inform pem вариант (или нет-inform совсем).

Чтобы увидеть детали открытого ключа, используйте:

openssl x509 -inform der -in client.crt -pubkey -noout | openssl rsa -pubin -text -noout
После быстрого взгляда наkeytool -help - ... я так не думаю ...
Спасибо за ответ. Я могу видеть открытый ключ. Но есть ли способ сделать это в keytool? Ashwin
Есть способ использовать keeytool с опцией -list для печати, см. Ответ от @Vlad Sankin

Похожие вопросы