簡體   English   中英

如何創建一個空的 Java 信任庫?

[英]How to create an empty java trust store?

我想在 Java 中創建一個 https 客戶端,它最初沒有任何可信任的 CA 證書。 由於我不希望 JVM 使用默認的 cacerts 文件,因此我應該創建一個空的信任存儲並將其指向 JVM。
我怎樣才能建立一個空的信托商店?

使用 keytool,創建一個隨機密鑰對:

keytool -genkeypair -alias boguscert -storepass storePassword -keypass secretPassword -keystore emptyStore.keystore -dname "CN=Developer, OU=Department, O=Company, L=City, ST=State, C=CA"

然后刪除它

keytool -delete -alias boguscert -storepass storePassword -keystore emptyStore.keystore

查看其內容:

$ keytool -list -keystore emptyStore.keystore -storepass storePassword
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 0 entries

我發現的一種可能的解決方案是使用keytool import將一些隨機證書導入到新創建的信任庫中,然后從中刪除導入的證書。 這會給您留下一個空的密鑰/信任庫。 不幸的是,JVM 對空的信任存儲並不滿意,並在此基礎上拋出異常。 因此,至少應存在一個證書,該證書可能是任何無效或過期的證書,以實現目標。

如果有人最終再次到達這里:

  public static void main (String[] args) {
    String storePassword = "storePassword";
    String storeName = "emptyStore.jks";
    String storeType = "jks";
    try (FileOutputStream fileOutputStream = new FileOutputStream(storeName)) {
      KeyStore keystore = KeyStore.getInstance(storeType);
      keystore.load(null, storePassword.toCharArray());
      keystore.store(fileOutputStream, storePassword.toCharArray());
    } catch (CertificateException | NoSuchAlgorithmException | IOException | KeyStoreException e) {
      e.printStackTrace();
  }

然后用keytool檢查內容:

$ keytool -list -keystore emptyStore.jks -storepass storePassword
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 0 entries

您可以將空參數傳遞給KeyStore::load以創建一個空的密鑰庫。 請參閱https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html#load-java.io.InputStream-char:A-

暫無
暫無

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

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