java将pfx转换为可以导入默认密钥库的格式

java将pfx转换为可以导入默认密钥库的格式,java,openssl,ssl-certificate,keystore,public-key-encryption,Java,Openssl,Ssl Certificate,Keystore,Public Key Encryption,我用以下代码通过编程将证书加载到默认密钥库中 KeyStore kStore = KeyStore.getInstance(KeyStore.getDefaultType()); java.io.FileInputStream fis = new FileInputStream(keystorePath); kStore.load(fis, new String(keystorePass).toCharArray()); fis.close(); 我有一份pfx格式的第三方证书。如果我尝试加载

我用以下代码通过编程将证书加载到默认密钥库中

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());    

证书的东西从来都不简单。您需要openssl(Cygwin版本在Windows上工作)将pfx/p12文件转换为pem文件,然后您可以从pem创建证书。最后,您可以使用Java
keytool
程序将证书转换为JKS格式(密钥库默认)

将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从证书创建JKS文件:

keytool -import -trustcacerts -keystore whatever.jks -storepass somepassword -noprompt -file whatever.crt -alias localhost
注意,
-别名
可以是您希望用于此证书的任何唯一名称。惯例是使用您网站的URL

现在,您应该能够在代码中加载带有密钥库实例的JKS文件。也许仅仅更改Java代码以使用PKCS12实例更容易些

如果我更新为使用以下命令,它就会工作。但我不想改变 密码

KeyStore keystore = KeyStore.getInstance("PKCS12");  
KeyStore KeyStore=KeyStore.getInstance(“PKCS12”);我怎么能 将pfx文件转换为用户可接受的格式 跟随

KeyStore kStore = KeyStore.getInstance(KeyStore.getDefaultType());    
KeyStore kStore=KeyStore.getInstance(KeyStore.getDefaultType())

为什么不呢?
Java的默认密钥库格式是JKS

但是还有其他格式,
#PKCS12
是最常用的格式

如果您需要您的应用程序更“健壮”,我建议您不要将文件转换为JKS格式

相反,您可以支持更多JKS,例如,尝试默认密钥库类型,如果失败,则尝试
#PKCS12

我将进一步建议
KeyStore.getInstance(KeyStore.getDefaultType())被以下内容替换:

KeyStore.getInstance(UserPreferences.getDefaultType())

用户选择的默认密钥库文件(可以是#PKCS12)