Java 用BouncyCastle阅读JKS
我有一个Java密钥库(JKS),我需要用BouncyCastle阅读它 我在提供者列表的顶部添加了Java 用BouncyCastle阅读JKS,java,bouncycastle,keystore,Java,Bouncycastle,Keystore,我有一个Java密钥库(JKS),我需要用BouncyCastle阅读它 我在提供者列表的顶部添加了BC提供者: Security.insertProviderAt(new BouncyCastleProvider(), 1); 如果我这样创建密钥库: final KeyStore keystore = KeyStore.getInstance("JKS", "BC"); 我得到一个错误: java.security.KeyStoreException:未找到JKS 如果我没有指定提供程序,
BC
提供者:
Security.insertProviderAt(new BouncyCastleProvider(), 1);
如果我这样创建密钥库:
final KeyStore keystore = KeyStore.getInstance("JKS", "BC");
我得到一个错误:
java.security.KeyStoreException:未找到JKS
如果我没有指定提供程序,则将使用Sun
提供程序创建密钥库,并且KeyStore.alias()
将包含EmptyEnumeration
正如我在主题中看到的,BouncyCastle可以与JKS一起工作
如何使用BouncyCastle阅读JKS?使用BKS代替JKS
KeyStore keystore = KeyStore.getInstance("BKS", "BC");
请参见第6.4节-密钥库
Bouncy Castle包有三个密钥库实现。
第一个“BKS”是一个密钥库,它将以与Sun“JKS”密钥库相同的方式使用keytool
结果将与Sun提供程序相同。如果您得到一个空列表,请检查JKS是否为空,并且您正在正确读取它使用BKS而不是JKS
KeyStore keystore = KeyStore.getInstance("BKS", "BC");
请参见第6.4节-密钥库
Bouncy Castle包有三个密钥库实现。
第一个“BKS”是一个密钥库,它将以与Sun“JKS”密钥库相同的方式使用keytool
结果将与Sun提供程序相同。如果您得到一个空列表,请检查JKS是否为空并且您正在正确阅读它是否在程序顶部添加了以下行:
Security.addProvider(new BouncyCastleProvider())代码>?请参阅.@Mr.Polywhill Yes。我已经编辑了描述,您混淆了“使用”和“实施”。通常不应在JCE的任何getInstance()
方法中指定提供程序。只需使用Security.addProvider()
添加提供程序,然后让JCE从任何提供程序中查找实现。只有Oracle提供程序实现JKS密钥库,但是您的keystore.getInstance(“JKS”,“BC”)代码>强制JCE只查看BouncyCastle中没有的JKS实现。另外,除非您确实知道自己在做什么,否则不要在特定位置添加BouncyCastle提供程序。您是否在程序顶部添加了以下行:Security.addProvider(新的BouncyCastleProvider())代码>?请参阅.@Mr.Polywhill Yes。我已经编辑了描述,您混淆了“使用”和“实施”。通常不应在JCE的任何getInstance()
方法中指定提供程序。只需使用Security.addProvider()
添加提供程序,然后让JCE从任何提供程序中查找实现。只有Oracle提供程序实现JKS密钥库,但是您的keystore.getInstance(“JKS”,“BC”)代码>强制JCE只查看BouncyCastle中没有的JKS实现。另外,除非您真的知道自己在做什么,否则不要在特定位置添加BouncyCastle提供程序。我已经尝试过了,在本例中,keystore.aliases()
返回EmptyEnumeration
您的keystore是否有证书?使用keytool-list-v-keystore keystore.jks检查您是否以这种方式读取密钥库?:keystore.load(inputStream,password)代码>是我可以使用具有相同参数的keytool查看此证书请检查InputStream
是否提供给keystore.load(InputStream,password)代码>不为空。如果inputstream为Null,则此方法将重置密钥库。我的密钥库路径错误。getInstance(“JKS”)可以工作。谢谢,我已经尝试过了,在本例中,keystore.aliases()
返回EmptyEnumeration
您的密钥库是否有证书?使用keytool-list-v-keystore keystore.jks检查您是否以这种方式读取密钥库?:keystore.load(inputStream,password)代码>是我可以使用具有相同参数的keytool查看此证书请检查InputStream
是否提供给keystore.load(InputStream,password)代码>不为空。如果inputstream为Null,则此方法将重置密钥库。我的密钥库路径错误。getInstance(“JKS”)可以工作。非常感谢。