【问题标题】:How to create an empty java trust store?如何创建一个空的 java 信任库?
【发布时间】:2020-02-14 20:49:51
【问题描述】:

我想在 java 中创建一个 https 客户端,它最初没有任何 CA 证书可以信任。由于我不希望 JVM 使用默认的 cacerts 文件,我应该创建一个空的信任存储并将其指向 JVM。
如何创建一个空的信任库?

【问题讨论】:

    标签: java ssl truststore


    【解决方案1】:

    使用 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
    

    【讨论】:

    • 我必须在第一个命令中添加“-keyalg RSA”。
    【解决方案2】:

    我发现的一个可能的解决方案是将一些随机证书导入新创建的具有keytool import 的信任库,然后从中删除导入的证书。这会给您留下一个空的密钥/信任库。 不幸的是,JVM 对空的信任存储不满意,并在此引发异常。因此,为了实现目标,至少应该存在一个证书,该证书可能是无效或过期的。

    【讨论】:

      【解决方案3】:

      如果有人最终再次到达这里:

        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
      

      【讨论】:

        【解决方案4】:

        您可以将空参数传递给KeyStore::load 以创建一个空的密钥库。看 https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html#load-java.io.InputStream-char:A-

        【讨论】:

          最近更新 更多