如何创建一个空的 java 信任库?
How to create an empty java trust store?
我想在 java 中创建一个 https 客户端,它最初没有任何可信任的 CA 证书。因为我不希望 JVM 使用默认的 cacerts 文件,所以我应该创建一个空的信任库并将其指向 JVM。
如何创建一个空的信任库?
我发现的一个可能的解决方案是使用 keytool import
将一些随机证书导入到新创建的信任库中,然后从中删除导入的证书。这会留下一个空的 key/trust 商店。
不幸的是,JVM 对空的信任库不满意并抛出异常。因此,为了实现目标,至少应该存在一个证书,可以是任何无效或过期的证书。
您可以将空参数传递给 KeyStore::load
以创建一个空的密钥库。看
https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html#load-java.io.InputStream-char:A-
如果有人最终再次到达这里:
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
使用密钥工具,创建一个随机密钥对:
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
我想在 java 中创建一个 https 客户端,它最初没有任何可信任的 CA 证书。因为我不希望 JVM 使用默认的 cacerts 文件,所以我应该创建一个空的信任库并将其指向 JVM。
如何创建一个空的信任库?
我发现的一个可能的解决方案是使用 keytool import
将一些随机证书导入到新创建的信任库中,然后从中删除导入的证书。这会留下一个空的 key/trust 商店。
不幸的是,JVM 对空的信任库不满意并抛出异常。因此,为了实现目标,至少应该存在一个证书,可以是任何无效或过期的证书。
您可以将空参数传递给 KeyStore::load
以创建一个空的密钥库。看
https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html#load-java.io.InputStream-char:A-
如果有人最终再次到达这里:
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
使用密钥工具,创建一个随机密钥对:
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