使用 PKCS#12 证书用 Java 签署一些数据时出错
error using PKCS#12 certificate to sign some data with Java
我正在尝试使用 PKCS#12 证书来签署一些数据。
我在开发机器上成功地签署了数据,但是在我将应用程序部署到生产机器上后,我 运行 遇到了一些问题。
在开发机器上我有 Oracle jdk 1.6.0 和 centos 6.2,在生产机器上有 IBM jdk 1.6.0 和 IBM AIX。
问题是我无法从加载了认证文件的 KeyStore 实例中获取带有别名的私钥,
似乎 KeyStore 中没有条目,而我已经打印了认证文件中存在的条目
keytool命令(所以文件没有问题),也就是这段代码运行s在开发机上没有任何问题。
感谢任何帮助
代码如下:
KeyStore ks = KeyStore.getInstance("PKCS12");
String certFileAbsPath = this.getClass().getClassLoader().getResource("").getPath() + File.separator + "file.p12";
File file = new File(certFileAbsPath);
FileInputStream fis = new FileInputStream(file);
ks.load(fis, null);
Enumeration aliasEnum = ks.aliases();
String aliasName = null;
while(aliasEnum.hasMoreElements()){
aliasName = (String)aliasEnum.nextElement();
logger.debug("alias: " + aliasName);//nothing is logged!
}
根据我的经验,Java 不喜欢没有密码的 PKCS#12 密钥库。在您的 PKCS#12 文件上设置一个密码(它不必是一个强密码,只需 "password" 就可以)并将其作为 ks.load
.
的第二个参数提供
I have a ".p12" file which is bundled with the WAR file of the application and WAR file is deployed into the tomcat.
换句话说,它是一种资源。 new File()
和 new FileInputStream
无法处理资源。你应该使用 Class.getResourceAsStream()
.
它在开发中有效,因为该文件存在于那里。它在生产中不存在。只有资源存在于 WAR 文件中。
我正在尝试使用 PKCS#12 证书来签署一些数据。 我在开发机器上成功地签署了数据,但是在我将应用程序部署到生产机器上后,我 运行 遇到了一些问题。
在开发机器上我有 Oracle jdk 1.6.0 和 centos 6.2,在生产机器上有 IBM jdk 1.6.0 和 IBM AIX。
问题是我无法从加载了认证文件的 KeyStore 实例中获取带有别名的私钥, 似乎 KeyStore 中没有条目,而我已经打印了认证文件中存在的条目 keytool命令(所以文件没有问题),也就是这段代码运行s在开发机上没有任何问题。
感谢任何帮助
代码如下:
KeyStore ks = KeyStore.getInstance("PKCS12");
String certFileAbsPath = this.getClass().getClassLoader().getResource("").getPath() + File.separator + "file.p12";
File file = new File(certFileAbsPath);
FileInputStream fis = new FileInputStream(file);
ks.load(fis, null);
Enumeration aliasEnum = ks.aliases();
String aliasName = null;
while(aliasEnum.hasMoreElements()){
aliasName = (String)aliasEnum.nextElement();
logger.debug("alias: " + aliasName);//nothing is logged!
}
根据我的经验,Java 不喜欢没有密码的 PKCS#12 密钥库。在您的 PKCS#12 文件上设置一个密码(它不必是一个强密码,只需 "password" 就可以)并将其作为 ks.load
.
I have a ".p12" file which is bundled with the WAR file of the application and WAR file is deployed into the tomcat.
换句话说,它是一种资源。 new File()
和 new FileInputStream
无法处理资源。你应该使用 Class.getResourceAsStream()
.
它在开发中有效,因为该文件存在于那里。它在生产中不存在。只有资源存在于 WAR 文件中。