您可以使用ClassLoader.getResourceAsStream(String)方法加载您的.p12文件,将其加载到KeyStore,并从KeyStore获取密钥。
KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(this.getClass().getClassLoader().getResourceAsStream("keyFile.p12"), p12Password.toCharArray());
PrivateKey key = (PrivateKey)keystore.getKey(keyAlias, p12Password.toCharArray());
ClassLoader.getResourceAsStream(String)从任何位置加载资源,只要它们已经在类路径中,则不需要指定文件的路径。
keyAlias是p12文件中与私钥对应的条目的名称。 PKCS12文件可以包含多个条目,因此您需要一些方法来指示要访问的条目。别名是如何实现的。
如果您不确定私钥的别名是什么,您可以使用命令行中的keytool实用程序列出您的p12文件的内容。该工具随所有JRE和JDK安装一起提供。
keytool -list -keystore keyFile.p12 -storepass password -storetype PKCS12
输出
Keystore type: PKCS12
Keystore provider: SunJSSE
Your keystore contains 1 entry
yourKeyAlias, Sep 4, 2013, PrivateKeyEntry,
Certificate fingerprint (MD5): 48:A8:C4:12:8E:4A:8A:AD:58:81:26:90:E7:3D:C8:04