运行单元测试时无法从KeyStore读取证书

时间:2015-05-22 14:04:37

标签: java unit-testing certificate keystore

由于某种原因,我在单元测试中加载的KeyStore似乎是空的,我不知道为什么。

我有一个带有证书的密钥库文件:src/test/resources/public-keystore-name

因此,在终端中运行此命令:

../src/test/resources$ keytool -list -keystore public-keystore-name -storetype PKCS12

我得到以下输出:

Keystore type: PKCS12
Keystore provider: SunJSSE

Your keystore contains 1 entry

aliasname, May 22, 2015, trustedCertEntry, 
Certificate fingerprint (SHA1): 4E:87:CF:EF:FC:E1:37:63:36:E0:26:0C:1E:B3:65:BB:48:3A:83:1A

在我的单元测试中,我可以从此文件加载并启动KeyStore,但我无法获取存储在其中的证书。证书的别名为“aliasname”,密码为“password”。

   @Test
   public void testUtil() throws Exception {

     KeyStore publicKS = KeyStore.getInstance("PKCS12");

     File publicKeyStoreFile = FileUtils.getFile("src/test/resources/public-keystore-name");
     FileInputStream fisPublic = new FileInputStream(publicKeyStoreFile);

     publicKS.load(fisPublic, "password".toCharArray());

     Certificate cert = publicKS.getCertificate("aliasname");

     System.out.println("Cert is: " + cert);
   }

将始终打印: “证书是:null”

为什么KeyStore在此单元测试中为空? (使用Keystore.aliases()查找别名将返回一个空集。)

1 个答案:

答案 0 :(得分:1)

KeyStore是使用BouncyCastle-stuff创建的,因此需要设置此KeyStore:

...
    KeyStore publicKS = KeyStore.getInstance("PKCS12", "BC");
...

“BC”是BouncyCastle的简写,可以在运行后使用:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

我猜默认的KeyStore可能是一些Java标准?