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

时间:2016-06-23 14:18:49

标签: java ssl truststore

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

  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

答案 3 :(得分:0)

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