日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java jceks 密钥_Java中不同类型的密钥库(Keystore) – 概述

發布時間:2024/1/1 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java jceks 密钥_Java中不同类型的密钥库(Keystore) – 概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱讀:

877

密鑰庫是用于存儲加密密鑰和證書的存儲工具 ,最常用于SSL通信,以證明服務器和客戶端的身份。密鑰庫可以是文件或硬件設備。有三種類型的條目可以存儲在密鑰庫中,取決于密鑰庫的類型,這三種類型的條目分別是:

PrivateKey:用于非對稱加密的密鑰,通常由于其敏感性而受密碼保護。它還可用于簽署數字簽名;

Certificate證書:證書包含一個公鑰,可以識別證書中聲明的主題 (Subject)。它通常用于驗證服務器的身份。有時,它還用于在請求時識別客戶端的身份,如雙向認證時;

SecretKey:在對稱加密中使用的密鑰條目;

根據密鑰庫可以存儲的條目以及密鑰庫如何存儲條目,Java中有幾種不同類型的密鑰庫:JKS,JCEKS,PKCS12,PKCS11和DKS。最常見的是JKS,JCEKS,PKCS12類型,我們將主要介紹這三種。可以在Oracle的Java Cryptography Architecture描述中找到這些密鑰庫的介紹。

接下來,我們將簡要介紹這些密鑰庫類型:

JKS,Java

Key Store。可以參見sun.security.provider.JavaKeyStore類,此密鑰庫是特定于Java平臺的,通常具有jks的擴展名。此類型的密鑰庫可以包含私鑰和證書,但不能用于存儲密鑰。由于它是Java特定的密鑰庫,因此不能在其他編程語言中使用。存儲在JKS中的私鑰無法在Java中提取。

JCEKS,JCE密鑰庫(Java Cryptography

Extension KeyStore)。可以認為是增強式的JKS密鑰庫,支持更多算法。可以參考com.sun.crypto.provider.JceKeyStore類,此密鑰庫具有jceks的擴展名。可以放入JCEKS密鑰庫的條目是私鑰,密鑰和證書。此密鑰庫通過使用Triple DES加密為存儲的私鑰提供更強大的保護。

JCEKS的提供者是SunJCE,它是在Java 1.4中引入的。因此,在Java 1.4之前,只能使用JKS。

PKCS12,一種標準的密鑰庫類型,可以在Java和其他語言中使用。可以參考sun.security.pkcs12.PKCS12KeyStore類。它通常具有p12或pfx的擴展名。可以在此類型上存儲私鑰,密鑰和證書。與JKS不同,PKCS12密鑰庫上的私鑰可以用Java提取。此類型是可以與其他語言(如C,C

++或C#)編寫的其他庫一起使用。

目前,Java中的默認密鑰庫類型是JKS,即如果在使用keytool創建密鑰庫時未指定-storetype,則密鑰庫格式將為JKS。但是,默認密鑰庫類型將在Java 9中更改為PKCS12,因為與JKS相比,它具有增強的兼容性。可以在$ JRE / lib / security / java.security文件中檢查默認密鑰庫類型。

PKCS11,一種硬件密鑰庫類型。 為Java庫提供了一個接口,用于連接硬件密鑰庫設備,如智能卡。 可以參考sun.security.pkcs11.P11KeyStore類。? 此密鑰庫可以存儲私鑰,密鑰和證書。 加載密鑰庫時,將從密鑰庫中檢索條目,然后將其轉換為軟件成勛可識別的條目;

BKS,BoucyCastle密鑰庫,是一種密鑰庫格式,提供了流行的第三方Java加密庫提供程序–BouncyCastle。它是一個類似于Oracle JDK提供的JKS的密鑰庫。支持存儲密鑰,私鑰和證書,經常用于移動應用程序開發。

在Java中,有一些關于如何處理密鑰庫的選擇。編寫Java代碼是一種選擇。除此之外,還可以使用JDK附帶的工具keytool;

keytool是一個命令行工具。它可用于創建密鑰庫,生成密鑰,導入和導出證書等。有關keytool支持的命令的完整列表,可以參考Oracle keytool準則;

如果使用的是IBM JDK,還有一個可以使用的工具,它是ikeyman。 ikeyman是一個GUI工具,可以提供密鑰庫的直觀視圖。密鑰庫中的條目。也可以使用ikeyman創建密鑰和證書。它是系統管理員經常使用的工具。

JKS,Java

Key Store詳細介紹

JKS是Java Keystore,一種專為Java設計的專有密鑰庫類型。 可以用于存儲用于SSL通信的私鑰和證書,但是它不能存儲密鑰。 JDK附帶的keytool無法提取存儲在JKS上的私鑰。 這種類型的密鑰庫通常具有jks的擴展名。

接下來,將展示如何使用Java代碼操作JKS密鑰庫;

創建JKS密鑰庫

創建JKS密鑰庫以創建空密鑰庫的最簡單方法。 可以先獲取KeyStore的實例,然后加載null密鑰庫。 加載null密鑰庫后,只需要使用密鑰庫的密鑰庫名稱和密碼調用KeyStore.store();

以下是一個簡單的演示:

try{

KeyStore keyStore =

KeyStore.getInstance(“JKS”);

keyStore.load(null,null);

keyStore.store(new

FileOutputStream(“mytestkey.jks”),

“password”.toCharArray());

}catch(Exception

ex){

ex.printStackTrace();

}

執行上述調用后,將在當前工作目錄中看到名為mytestkey.jks的密鑰庫。 現在該密鑰庫是空的,沒有任何條目。

存儲私鑰

現在將一個私鑰及其關聯的證書鏈存儲到密鑰庫中。 注意,無法使用JDK將沒有關聯證書鏈的私鑰存儲到密鑰庫中。

try{

KeyStore keyStore =

KeyStore.getInstance(“JKS”);

keyStore.load(new

FileInputStream(“mytestkey.jks”),”password”.toCharArray());

CertAndKeyGen gen = new

CertAndKeyGen(“RSA”,”SHA1WithRSA”);

gen.generate(1024);

Key key=gen.getPrivateKey();

X509Certificate

cert=gen.getSelfCertificate(new X500Name(“CN=ROOT”),

(long)365*24*3600);

X509Certificate[] chain = new X509Certificate[1];

chain[0]=cert;

keyStore.setKeyEntry(“mykey”,

key, “password”.toCharArray(), chain);

keyStore.store(new

FileOutputStream(“mytestkey.jks”),

“password”.toCharArray());

}catch(Exception

ex){

ex.printStackTrace();

}

首先,將創建一個私鑰和一個自簽名證書,然后使用指定的別名,密鑰,密鑰及其相關證書鏈的密碼調用KeyStore.setKeyEntry(),需要調用KeyStore.store()將密鑰存儲到密鑰庫中。

存儲證書

可以在JKS密鑰庫上存儲證書。 要存儲的證書應該是X509證書格式。 可以存儲在密鑰庫中,而無需關聯的私鑰。 此過程類似于存儲私鑰。

try{

KeyStore keyStore =

KeyStore.getInstance(“JKS”);

keyStore.load(new FileInputStream(“mytestkey.jks”),”password”.toCharArray());

CertAndKeyGen gen = new

CertAndKeyGen(“RSA”,”SHA1WithRSA”);

gen.generate(1024);

X509Certificate

cert=gen.getSelfCertificate(new X500Name(“CN=SINGLE_CERTIFICATE”),

(long)365*24*3600);

keyStore.setCertificateEntry(“single_cert”, cert);

keyStore.store(new

FileOutputStream(“mytestkey.jks”),

“password”.toCharArray());

}catch(Exception

ex){

ex.printStackTrace();

}

加載私鑰

存儲密鑰后,還可以在密鑰庫中加載條目,如加載私鑰,如前所述,私鑰不能使用Java從JKS中提取。 在本例中,實際上提取了私鑰的證書鏈;

try{

KeyStore keyStore =

KeyStore.getInstance(“JKS”);

keyStore.load(new

FileInputStream(“mytestkey.jks”),”password”.toCharArray());

Key key =

keyStore.getKey(“mykey”, “password”.toCharArray());

//????????? System.out.println(“Private key

: “+key.toString());?? //You will

get a NullPointerException if you uncomment this line

java.security.cert.Certificate[] chain

=

keyStore.getCertificateChain(“mykey”);

for(java.security.cert.Certificate

cert:chain){

System.out.println(cert.toString());

}

}catch(Exception

ex){

ex.printStackTrace();

}

如下所示,可以正常獲得證書鏈:

[

[

Version: V3

Subject: CN=ROOT

Signature Algorithm: SHA1withRSA, OID =

1.2.840.113549.1.1.5

Key:

Sun RSA public key, 1024 bits

modulus:

90980299845597512779139009881469177009407272139633139241921529845092210461181243924599150259446249079941561941533303439718936138867375776965995893255358889228584415558006141961051402385279285497775776996780406808976543439543789816486513982581378223575354716191394304768315366544413052547926792470794374067383

public exponent: 65537

Validity: [From: Sat Sep 06 09:57:28 CST

2014,

To: Sun Sep 06 09:57:28 CST

2015]

Issuer: CN=ROOT

SerialNumber: [??? 206b697b]

]

Algorithm: [SHA1withRSA]

Signature:

0000: 53 6A FD FE

E6 3A 5E 6E?? A6 43 C4 F4 D1 56 D4

08? Sj…:^n.C…V..

0010: 7E 3B 8B 73

68 71 56 AB?? 96 FE 24 E7 2D DC 04

BB? .;.shqV…$.-…

0020: 14 B0 C6 71

8D F0 3E EC?? FE D8 5B BB 8C 0F 55

63? …q..>…[…Uc

0030: 2B 38 8E 45

F1 2D F0 BB?? 8C 6D 13 A8 11 37 E1

FA? +8.E.-…m…7..

0040: 77 AF C7 73

72 2B 40 4F?? 74 32 F6 3C 24 E6 AB

ED? w..sr+@Ot2.

0050: 2C 6F 19 2E

DC 58 5F CB?? 75 62 40 2F 3E BE 59

99? ,o…X_.ub@/>.Y.

0060: C0 1F 7A 70

15 AF C3 66?? B3 4F C9 11 C3 45 59

EF? ..zp…f.O…EY.

0070: 36 F4 1C C9

9B FA 5E 43?? A0 28 DB 07 0D F2 53

6E? 6…..^C.(….Sn

]

加載證書

這類似于加載私鑰,需要傳遞想要提取的證書的別名;

try{

KeyStore keyStore =

KeyStore.getInstance(“JKS”);

keyStore.load(new

FileInputStream(“mytestkey.jks”),”password”.toCharArray());

java.security.cert.Certificate cert =

keyStore.getCertificate(“single_cert”);

System.out.println(cert.toString());

}catch(Exception

ex){

ex.printStackTrace();

}

輸出為:

[

[

Version: V3

Subject: CN=SINGLE_CERTIFICATE

Signature Algorithm: SHA1withRSA, OID =

1.2.840.113549.1.1.5

Key:

Sun RSA public key, 1024 bits

modulus:

99756834215197288877309915243024788596281418171661241282881476656110879586349799740269767889529808199104172091786860877280382867461569439907754755558759387462421169749111354565793974372777424046360810758009149155148290676527032833774084635148674232352006810533640038723102562578516643345287042787777951043863

public exponent: 65537

Validity: [From: Sat Sep 06 10:14:33 CST

2014,

To: Sun Sep 06 10:14:33 CST

2015]

Issuer: CN=SINGLE_CERTIFICATE

SerialNumber: [??? 6943e549]

]

Algorithm: [SHA1withRSA]

Signature:

0000: 35 58 70 96

F4 35 82 2A?? 95 9F BB 31 02 6E 7C

29? 5Xp..5.*…1.n.)

0010: 4A FE AF EB

2D B5 3A A7?? C7 9D 4C 9A 34 2C 5C

46? J…-.:…L.4,\F

0020: C2 82 A8 AC

1A C0 98 A5?? 67 21 74 7B 1E E2 E5

AC? ……..g!t…..

0030: DE B2 1D 87

BE 16 45 9B?? D0 2A D3 2B F6 E1 4B

35? ……E..*.+..K5

0040: 27 8B A7 0A

EF F2 07 41?? 90 A6 69 07 BE 87 C5

B1? ‘……A..i…..

0050: 54 DE DB A2

5A 41 47 3B?? 3F A7 74 6F 5C C8 8D

B4? T…ZAG;?.to\…

0060: C8 65 2B 0F

8E 94 A8 80?? C7 8B B5 78 FA C2 9C

ED? .e+……..x….

0070: 8E EC 28 E4

8E 62 A1 59?? 6A BC 37 7B 0D FC C7

AF? ..(..b.Yj.7…..

]

導入密鑰和證書

首先需要加載要導入證書的密鑰庫,然后加載另一個需要導入證書的密鑰庫。 接下來,需要從源密鑰庫獲取證書并將其放入目標密鑰庫。

由于無法從JKS中提取私鑰,因此只能將證書導入JKS。 但是可以從其他類型的密鑰庫(PKCS12)中提取私鑰,然后將它們存儲在JKS密鑰庫中;

需要注意的是Oracle提供了兩個版本的JKS密鑰庫:區分大小寫且不區分大小寫。 調用KeyStore.getInstance(“JKS”)時,會創建一個不區分大小寫的JKS實例版本,當調用KeyStore.getInstance(“CaseExactJKS”)時,將創建一個區分大小寫的JKS實例版本。

Java中不同類型的密鑰庫–? JCEKS

JCEKS代表Java Cryptography Extension KeyStore,是Java平臺的另一種密鑰庫格式。 在KeyStore中存儲密鑰是一種防止加密密鑰泄漏的措施。

Java KeyStore安全地包含可由別名引用的證書和密鑰,以便在Java程序中使用。

在JCEKS中存儲和加載不同條目的過程與JKS類似。 所以請參閱Java中的不同類型的密鑰庫—JKS上一節。 在調用KeyStore.getInstance()時,相應地將密鑰庫類型從JKS更改為JCEKS。在JCEKS密鑰庫中存儲密鑰的過程。 密鑰條目將被存儲在密鑰庫中以保護密鑰數據。 將條目存儲到密鑰庫時,請提供密碼。

存儲密鑰

密鑰可以存儲在JCEKS密鑰庫中,代碼如下:

try{

KeyStore keyStore =

KeyStore.getInstance(“JCEKS”);

keyStore.load(null, null);

KeyGenerator keyGen =

KeyGenerator.getInstance(“DES”);

keyGen.init(56);;

Key key = keyGen.generateKey();

keyStore.setKeyEntry(“secret”,

key, “password”.toCharArray(), null);

keyStore.store(new

FileOutputStream(“output.jceks”),

“password”.toCharArray());

} catch (Exception

ex) {

ex.printStackTrace();

}

加載密鑰

可以從Java中的JCEKS密鑰庫中提取存儲的密鑰。 提取的密鑰可以用于正常加密/解密數據:

try{

KeyStore keyStore =

KeyStore.getInstance(“JCEKS”);

keyStore.load(new

FileInputStream(“output.jceks”), “password”.toCharArray());

Key key =

keyStore.getKey(“secret”, “password”.toCharArray());

System.out.println(key.toString());

} catch (Exception

ex) {

ex.printStackTrace();

}

輸出為:

Java中不同類型的密鑰庫–? PKCS12

PKCS12用于將加密對象,如密鑰等,存儲為單個文件, 它可用于存儲密鑰,私鑰和證書。它是RSA實驗室發布的標準化格式,它不僅可以用于Java,還可以用于C,C ++或C#等其他庫。該文件格式 經常用于從其他密鑰庫類型導入和導出條目。

創建PKCS12密鑰庫

在將條目存儲到PKCS12密鑰庫之前,必須首先加載密鑰庫。 必須首先創建一個密鑰庫。 創建PKCS12密鑰庫的最簡單方法是:

try{

KeyStore keyStore =

KeyStore.getInstance(“PKCS12”);

keyStore.load(null, null);

keyStore.store(new

FileOutputStream(“output.p12”), “password”.toCharArray());

} catch (Exception

ex){

ex.printStackTrace();

}

注意,當調用keyStore.load(null,null)時,會傳遞兩個空值作為輸入密鑰庫流和密碼。 運行此程序后,當前工作目錄中應該有一個名為output.p12的密鑰庫文件。

存儲密鑰

PKCS12允許存儲密鑰。 密鑰常用于加密/解密數據。 為了方便地傳輸密鑰,可以存儲在像PKCS12這樣的密鑰庫中并進行傳輸。

try{

KeyStore keyStore =

KeyStore.getInstance(“PKCS12”);

keyStore.load(null, null);

KeyGenerator keyGen =

KeyGenerator.getInstance(“AES”);

keyGen.init(128);

Key key = keyGen.generateKey();

keyStore.setKeyEntry(“secret”,

key, “password”.toCharArray(), null);

keyStore.store(new

FileOutputStream(“output.p12”), “password”.toCharArray());

} catch (Exception

ex){

ex.printStackTrace();

}

存儲私鑰

私鑰及其關聯的證書鏈可以存儲在PKCS12密鑰庫中。 密鑰庫包含私鑰,證書可用于Web上的SSL通信。

try{

KeyStore keyStore =

KeyStore.getInstance(“PKCS12”);

//? keyStore.load(new

FileInputStream(“output.p12″),”password”.toCharArray());

keyStore.load(null, null);;

CertAndKeyGen gen = new

CertAndKeyGen(“RSA”,”SHA1WithRSA”);

gen.generate(1024);

Key key=gen.getPrivateKey();

X509Certificate

cert=gen.getSelfCertificate(new X500Name(“CN=ROOT”),

(long)365*24*3600);

X509Certificate[] chain = new

X509Certificate[1];

chain[0]=cert;

keyStore.setKeyEntry(“private”,

key, “password”.toCharArray(), chain);

keyStore.store(new

FileOutputStream(“output.p12”), “password”.toCharArray());

}catch(Exception

ex){

ex.printStackTrace();

}

使用CertAndKeyGen生成RSA私鑰,生成關聯的證書。 然后通過調用keyStore.setEntry()將密鑰條目存儲在keyStore中。 不要忘記通過調用keyStore.store()來保存keyStore。

存儲證書

PKCS12密鑰庫允許自己存儲證書而不存儲相應的私鑰。 要存儲證書,可以調用KeyStore.setCertificateEntry();

try{

KeyStore keyStore =

KeyStore.getInstance(“PKCS12”);

//? keyStore.load(new

FileInputStream(“output.p12″),”password”.toCharArray());

keyStore.load(null, null);;

CertAndKeyGen gen = new

CertAndKeyGen(“RSA”,”SHA1WithRSA”);

gen.generate(1024);

X509Certificate

cert=gen.getSelfCertificate(new X500Name(“CN=ROOT”),

(long)365*24*3600);

keyStore.setCertificateEntry(“cert”, cert);

keyStore.store(new

FileOutputStream(“output.p12”), “password”.toCharArray());

}catch(Exception

ex){

ex.printStackTrace();

}

可以通過使用提供的別名調用KeyStore.getCertificate()來提取存儲的證書。 例如 :

Certificate cert =

keyStore.getCertificate(“cert”);

加載私鑰

PKCS12密鑰庫與其他密鑰庫(如JKS)之間的一個區別是,可以提取PKCS12的私鑰。 可以使用提供的正確密碼正確提取私鑰。

try{

KeyStore keyStore = KeyStore.getInstance(“PKCS12”);

keyStore.load(new

FileInputStream(“output.p12”), “password”.toCharArray());

Key pvtKey =

keyStore.getKey(“private”, “password”.toCharArray());

System.out.println(pvtKey.toString());

} catch (Exception

ex){

ex.printStackTrace();

}

上面代碼的輸出是:

加載證書鏈

如果證書鏈存儲在密鑰庫中,則可以通過調用KeyStore.getCertificateChain()來加載。 下面的代碼用于提取關聯私鑰的關聯證書鏈。

try{

KeyStore keyStore =

KeyStore.getInstance(“PKCS12”);

keyStore.load(new

FileInputStream(“output.p12”), “password”.toCharArray());

Key pvtKey =

keyStore.getKey(“private”, “password”.toCharArray());

System.out.println(pvtKey.toString());

java.security.cert.Certificate[] chain =

keyStore.getCertificateChain(“private”);

for(java.security.cert.Certificate

cert:chain){

System.out.println(cert.toString());

}

} catch (Exception

ex){

ex.printStackTrace();

}

輸出為:

[

[

Version: V3

Subject: CN=ROOT

Signature Algorithm: SHA1withRSA, OID =

1.2.840.113549.1.1.5

Key:

Sun RSA public key, 1024 bits

modulus:

107262652552256813768678166856978781385254195794582600239703451044252881438814396239031781495369251659734172714120481593881055888193254336293673302267462500060447786562885955334870856482264000504019061160524587434562257067298291769329550807938162702640388267016365640782567817416484577163775446236245223552189

public exponent: 65537

Validity: [From: Mon Jan 05 13:03:29 SGT

2015,

To: Tue Jan 05 13:03:29 SGT

2016]

Issuer: CN=ROOT

SerialNumber: [??? 5e5ca8a4]

]

Algorithm: [SHA1withRSA]

Signature:

0000: 22 21 BF 73

A6 6D 12 9B?? F7 49 6C 0E B3 50 6A

9D? “!.s.m…Il..Pj.

0010: FA 30 43 22

32 FF 54 95?? 80 2E B3 8B 6F 59 D4

B5? .0C”2.T…..oY..

0020: 6C A6 AE 89

B7 18 9A A8?? 35 7D 65 37 BF ED A3

F4? l…….5.e7….

0030: E7 DB 5D 5F

9B DA 4B FA?? 39 04 9B 4D DB C2 3E

FA? ..]_..K.9..M..>.

0040: 3B C2 63 F8

1E BE 03 F3?? BD 1C D4 8A 8E 3C 51 68? ;.c……….

加載證書

通過調用KeyStore.getCertificate(),加載證書也很簡單,如果提供的別名映射到證書鏈,則只返回指定的證書。

try{

KeyStore keyStore =

KeyStore.getInstance(“PKCS12”);

keyStore.load(new

FileInputStream(“output.p12”), “password”.toCharArray());

java.security.cert.Certificate cert =? keyStore.getCertificate(“private”);

System.out.println(cert);

} catch (Exception

ex){

ex.printStackTrace();

}

輸出為:

[

[

Version: V3

Subject: CN=ROOT

Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5

Key:

Sun RSA public key, 1024 bits

modulus:

107262652552256813768678166856978781385254195794582600239703451044252881438814396239031781495369251659734172714120481593881055888193254336293673302267462500060447786562885955334870856482264000504019061160524587434562257067298291769329550807938162702640388267016365640782567817416484577163775446236245223552189

public exponent: 65537

Validity: [From: Mon Jan 05 13:03:29 SGT

2015,

To: Tue Jan 05 13:03:29 SGT

2016]

Issuer: CN=ROOT

SerialNumber: [??? 5e5ca8a4]

]

Algorithm: [SHA1withRSA]

Signature:

0000: 22 21 BF 73

A6 6D 12 9B?? F7 49 6C 0E B3 50 6A

9D? “!.s.m…Il..Pj.

0010: FA 30 43 22

32 FF 54 95?? 80 2E B3 8B 6F 59 D4

B5? .0C”2.T…..oY..

0020: 6C A6 AE 89

B7 18 9A A8?? 35 7D 65 37 BF ED A3

F4? l…….5.e7….

0030: E7 DB 5D 5F

9B DA 4B FA?? 39 04 9B 4D DB C2 3E

FA? ..]_..K.9..M..>.

0040: 3B C2 63 F8

1E BE 03 F3?? BD 1C D4 8A 8E 3C 51

68? ;.c……….

導入和導出密鑰和證書

PKCS12密鑰庫可用于導入和導出密鑰和證書。 可以從PKCS12密鑰庫中提取私鑰,因此可以從PKCS12密鑰庫導出條目,然后將其導入到其他密鑰庫類型(如JKS)。

下面的代碼片段演示了如何從PKCS12導出私鑰條目并將其導入JSK密鑰庫:

try{

KeyStore keyStore =

KeyStore.getInstance(“PKCS12”);

keyStore.load(new

FileInputStream(“output.p12”), “password”.toCharArray());

Key pvtKey =

keyStore.getKey(“private”, “password”.toCharArray());

java.security.cert.Certificate[] chain

=

keyStore.getCertificateChain(“private”);

KeyStore jksStore =

KeyStore.getInstance(“JKS”);

jksStore.load(null, null);;

jksStore.setKeyEntry(“jksPrivate”,

pvtKey, “newpassword”.toCharArray(), chain);

jksStore.store(new

FileOutputStream(“output.jks”), “password”.toCharArray());

} catch (Exception

ex){

ex.printStackTrace();

}

如果希望擁有可移植的密鑰庫類型,并且將來可能希望與其他非Java庫一起使用,則PKCS12密鑰庫是推薦的密鑰庫類型。

Java中不同類型的密鑰庫(Keystore) – 概述

總結

以上是生活随笔為你收集整理的java jceks 密钥_Java中不同类型的密钥库(Keystore) – 概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。