簡體   English   中英

在 Java 密鑰庫中導入 pkcs12 (.p12) 客戶端證書文件時,CertificateChain 為空

[英]CertificateChain is null when importing pkcs12 (.p12) client-certificate file in Java Keystore

我將帶有證書鏈的 client-ssl-certificate KeyPair 導出為 PKCS12 文件密鑰庫資源管理器。 我可以再次使用 KSE 加載這個 PKCS12 文件,並且密鑰對和證書鏈都在那里。 當我將它加載到 Java KeyStore 中時,我能夠訪問該密鑰,但證書鏈為空。

這是我的代碼:

        final KeyStore instance = KeyStore.getInstance( "pkcs12" );
        instance.load( new ByteArrayInputStream( bytes ), password );

        instance.getKey(alias, password) => returns Key
        instance.getCertificateChain(alias) => returns null

        final KeyStore.ProtectionParameter param = new KeyStore.PasswordProtection( password );
        final KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) instance.getEntry( alias, param );

        => fails:

java.lang.NullPointerException: invalid null input
    at java.security.KeyStore$PrivateKeyEntry.<init>(KeyStore.java:524) ~[na:1.8.0_202]
    at sun.security.pkcs12.PKCS12KeyStore.engineGetEntry(PKCS12KeyStore.java:1311) ~[na:1.8.0_202]
    at java.security.KeyStore.getEntry(KeyStore.java:1521) ~[na:1.8.0_202]

通過調試,我可以看到 PrivateKeyEntry 的構造函數是在鏈參數為 null 的情況下調用的:

圖像:調試 PrivateKeyEntry 構造函數調用

我對此完全沒有解釋,也沒有在互聯網上找到任何信息。

我可以排除使用的別名和使用的密碼作為原因。

我會感謝有關此主題的任何提示。

提前致謝,

亞歷山大

正如你在這里看到的:

https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/java/security/KeyStore.java#L523

在以下三種情況之一中拋出異常:

  1. 您有密鑰但沒有私鑰。
  2. 你沒有鏈條(這就是你說的)。
  3. 你沒有屬性。

為了確保鏈是問題,您可以使用以下方法激活調試

 -Djava.security.debug=all

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM