如何创建一个空的java信任库?

Geo*_*rge 8 java ssl truststore

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

小智 18

使用 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"
Run Code Online (Sandbox Code Playgroud)

然后删除它

keytool -delete -alias boguscert -storepass storePassword -keystore emptyStore.keystore
Run Code Online (Sandbox Code Playgroud)

查看其内容:

$ keytool -list -keystore emptyStore.keystore -storepass storePassword
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 0 entries
Run Code Online (Sandbox Code Playgroud)

  • 我必须将“-keyalg RSA”添加到第一个命令中。 (6认同)

小智 13

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

  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();
  }
Run Code Online (Sandbox Code Playgroud)

然后用keytool检查内容:

$ keytool -list -keystore emptyStore.jks -storepass storePassword
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 0 entries
Run Code Online (Sandbox Code Playgroud)


Geo*_*rge 6

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