簡體   English   中英

在KeyStore中使用isKeyEntry(alias)-Java

[英]Use of isKeyEntry(alias) in KeyStore - Java

我想加載密鑰庫文件並獲取其根SSL證書的詳細信息。

鏈接到樣本

我在上面的鏈接中看到了代碼。 該代碼也在下面可見。 keyStore.isKeyEntry(alias)的用途是什么?

我檢查了JavaDocs,它說

如果給定別名標識的條目是通過調用setKeyEntry創建的,或者是通過調用帶有PrivateKeyEntry或SecretKeyEntry的setEntry創建的,則返回true。

那么,它的用途是什么?

        boolean isAliasWithPrivateKey = false;
        KeyStore keyStore = KeyStore.getInstance("JKS");

        // Provide location of Java Keystore and password for access
        keyStore.load(new FileInputStream(jksPath), jksPassword.toCharArray());

        // iterate over all aliases
        Enumeration<String> es = keyStore.aliases();
        String alias = "";
        while (es.hasMoreElements()) {
            alias = (String) es.nextElement();
            // if alias refers to a private key break at that point
            // as we want to use that certificate
            if (isAliasWithPrivateKey = keyStore.isKeyEntry(alias)) {
                break;
            }
        }

        if (isAliasWithPrivateKey) {

            KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias,
                    new KeyStore.PasswordProtection(jksPassword.toCharArray()));

            PrivateKey myPrivateKey = pkEntry.getPrivateKey();

            // Load certificate chain
            Certificate[] chain = keyStore.getCertificateChain(alias);

            certDetails = new CertificateDetails();
            certDetails.setPrivateKey(myPrivateKey);
            certDetails.setX509Certificate((X509Certificate) chain[0]);
  }

Java密鑰庫中有3種類型的條目:

  • privateKeyEntry ,私鑰和關聯的證書鏈
  • TrustedKeyEntry ,受信任的證書(例如,來自CA的證書,例如Verisign,GoDaddy等)
  • secretKeyEntry ,一個加密密鑰(例如對稱密鑰AES)

如Java文檔中所述, true您有私鑰或私鑰,則KeyStore.isKeyEntry(alias)返回true

如果該條目是密鑰,則代碼示例將失敗:

`KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias, new KeyStore.PasswordProtection(jksPassword.toCharArray()));`

最好使用:

`KeyStore.entryInstanceOf(alias , KeyStore.PrivateKeyEntry.class)`

暫無
暫無

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

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