我正在使用以下代码以编程方式将证书加载到默认密钥库
KeyStore kStore = KeyStore.getInstance(KeyStore.getDefaultType());
java.io.FileInputStream fis = new FileInputStream(keystorePath);
kStore.load(fis, new String(keystorePass).toCharArray());
fis.close();
我有来自第三方的pfx格式的证书。如果我尝试加载它,它会因格式无效而失败。
如果我更新以使用以下它可以工作。但我不想改变代码。
KeyStore keystore = KeyStore.getInstance("PKCS12");
如何将pfx文件转换为以下
接受的格式KeyStore kStore = KeyStore.getInstance(KeyStore.getDefaultType());
答案 0 :(得分:2)
证书材料从不简单。您需要openssl(Cygwin版本适用于Windows)将pfx / p12文件转换为pem文件,然后您可以从pem创建证书。最后,您可以使用Java keytool
程序将证书转换为JKS格式(KeyStore默认值)。
将pfx转换为pem:
openssl pkcs12 -in whatever.pfx -out whatever.pem -clcerts -nokeys
从pem文件创建X509证书:
openssl x509 -in whatever.pem -inform PEM -out whatever.crt -outform DER
使用Java的keytool从cert:
创建JKS文件keytool -import -trustcacerts -keystore whatever.jks -storepass somepassword -noprompt -file whatever.crt -alias localhost
请注意,-alias
可以是您要用于此证书的任何唯一名称。惯例是使用您网站的URL。
现在,您应该能够在代码中使用KeyStore实例加载JKS文件。也许更改Java代码以使用PKCS12实例更容易?
答案 1 :(得分:0)
如果我更新以使用以下它可以工作。但我不想改变 代码。
KeyStore keystore = KeyStore.getInstance(“PKCS12”);我怎么能够 将pfx文件转换为将被接受的格式 以下
KeyStore kStore = KeyStore.getInstance(KeyStore.getDefaultType());
为什么不呢? Java的默认密钥库格式是JKS。
但是还有其他格式,#PKCS12
是最常用的格式。
如果您需要应用程序更“强大”,我建议不要将您拥有的文件转换为JKS格式。
相反,您可以支持的不仅仅是JKS,例如尝试默认的密钥库类型,如果失败,请尝试#PKCS12
我会更进一步,建议将KeyStore.getInstance(KeyStore.getDefaultType());
替换为:
KeyStore.getInstance(UserPreferences.getDefaultType());
用户选择哪个应该是默认密钥库文件(可能是#PKCS12)