Lar*_*ren 5 java unit-testing certificate keystore
出于某种原因,我在单元测试中加载的 KeyStore 似乎是空的,我不知道为什么。
我这里有一个带有证书的密钥库文件: src/test/resources/public-keystore-name
因此,在终端中运行此命令:
../src/test/resources$ keytool -list -keystore public-keystore-name -storetype PKCS12
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
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
Run Code Online (Sandbox Code Playgroud)
在我的单元测试中,我可以从这个文件加载并启动一个 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);
}
Run Code Online (Sandbox Code Playgroud)
将始终打印:“证书是:空”
为什么此单元测试中的 KeyStore 为空?(使用 Keystore.aliases() 查找别名将返回一个空集)。
KeyStore 是使用 BouncyCastle-stuff 创建的,因此需要设置此 KeyStore:
...
KeyStore publicKS = KeyStore.getInstance("PKCS12", "BC");
...
Run Code Online (Sandbox Code Playgroud)
“BC”是BouncyCastle的简写,运行后即可使用:
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Run Code Online (Sandbox Code Playgroud)
我猜默认的 KeyStore 可能是一些 Java 标准?
| 归档时间: |
|
| 查看次数: |
1933 次 |
| 最近记录: |