2012-04-11 103 views
17

有沒有辦法在keytool上打印證書的publick密鑰?我想:如何使用keytool打印證書的公鑰?

keytool -printcert -file client.crt 

但它僅給出了以下信息:

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 

沒有公鑰在此。

+1

有一種方法可以使用keytool和-list選項來做到這一點,但接受的答案說使用openssl。請參考下面的Vlad Sankin的答案。 – Nishanthan 2016-01-19 13:27:57

回答

21

你可以這樣做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 
+1

感謝您的答案。我能看到公鑰。但有沒有辦法在keytool中做到這一點? – Ashwin 2012-04-11 11:45:23

+0

快速瀏覽'keytool -help'之後 - ...我不這麼認爲... – 2012-04-11 12:03:50

+0

有一種方法可以使用keeytool和-list選項來打印,請參考@Vlad Sankin的答案 – Nishanthan 2016-01-19 13:26:30

29

你可以做到這一點:

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----- 
+0

假設openssl不是可用並回答實際問題(如何使用keytool打印公鑰部分)。 – 2014-04-25 20:59:50

+2

+1根據原始問題使用keytool – BigMikeW 2014-09-09 09:15:41

+7

詢問如何打印證書的公鑰。此輸出是整個證書的PEM編碼表示。公鑰輸出將以'----- BEGIN PUBLIC KEY -----' – 2014-11-04 14:29:10

6

的keytool列表RFC只是打印base64編碼版本的整個證書,而不是公鑰。 Keytool不支持打印證書的公鑰。爲此,我們可以使用openssl

4

您可以將證書打印爲pem格式,然後使用openssl從pem格式打印公鑰。

  1. 添加-rfc選項-printcert

    的keytool -printcert -file -rfc client.crt

  2. 像下面的輸出保存到一個文件client.pem

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

    .. ....

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

  3. 然後使用OpenSSL的

    OpenSSL的X​​509 -inform PEM -text -in client.pem

所以你得到了公鑰

+5

沒有中間文件:keytool -list -rfc --keystore ./path_to_keystore.jks | openssl x509 -inform pem -pubkey – 2015-09-08 13:54:15

+0

@JonasAndersson最好的答案,儘管作爲評論。 – fgakk 2016-11-07 11:36:38