将 PFX 文件导入现有 JKS 文件(不从 .pfx 转换为 .jks)

Posted

技术标签:

【中文标题】将 PFX 文件导入现有 JKS 文件(不从 .pfx 转换为 .jks)【英文标题】:Import PFX file into Existing JKS file (NOT converting from .pfx to .jks) 【发布时间】:2015-01-04 15:43:12 【问题描述】:

我有 Java Web 服务并使用 Java Keytool 创建的 jks 文件实现了 X.509。

keytool -genkey -keyalg RSA -sigalg SHA1withRSA -validity 730 -alias myservicekey -keypass skpass -storepass sspass -keystore serviceKeystore.jks -dname "cn=localhost"

keytool -genkey -keyalg RSA -sigalg SHA1withRSA -validity 730 -alias myclientkey  -keypass ckpass -storepass cspass -keystore clientKeystore.jks -dname "cn=clientuser"

为了在客户端和服务器之间建立信任,我将服务器证书导入客户端,将客户端证书导入服务器。

将服务器公钥(证书)导入客户端。

keytool -export -rfc -keystore clientKeystore.jks -storepass cspass -alias myclientkey -file MyClient.cer
keytool -import -trustcacerts -keystore serviceKeystore.jks -storepass sspass -alias myclientkey -file MyClient.cer -noprompt

将客户端公钥(证书)导入服务器

keytool -export -rfc -keystore serviceKeystore.jks -storepass sspass -alias myservicekey -file MyService.cer
keytool -import -trustcacerts -keystore clientKeystore.jks -storepass cspass -alias myservicekey -file MyService.cer -noprompt

Service 和 Client 都是用 Java 编写的,并且运行良好。现在我有一个 .NET 客户端,我的理解是,如果我向 .NET 客户端(即 clientKeystore.jks)提供相同的 jave 客户端证书,它应该可以工作,但是 .net 客户端有问题。

.NET 客户端开发人员坚持让我使用他生成的 .pfx 证书,如何将 .pfx 证书导入现有的 .jks 文件

我在网上看到的示例要求我创建一个新的 .jks 文件。

谢谢。

【问题讨论】:

【参考方案1】:

您可以将该文件视为 Java PKCS12 密钥库。您可以使用所有相同的 keytool 命令,但您还需要指定 -storetype PKCS12,因为默认值为 JKS。适用于 JDK 1.6 及更高版本的示例:

keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

另见this 线程。我认为这回答了您的问题,但如果您不介意建议,我会简单地将您现有的 JKS 文件输出为 P12 文件,然后将 P12 文件提供给 .NET 客户端。如果确实是格式问题,那将解决您的问题。您可以按照here 列出的步骤进行操作。如果您仍然有问题,您应该发布 .NET 客户端的异常,否则我们无法帮助您。

【讨论】:

我很高兴你提出了这个建议@KyleM,将 JKS 更改为 PFX 是解决方案!

以上是关于将 PFX 文件导入现有 JKS 文件(不从 .pfx 转换为 .jks)的主要内容,如果未能解决你的问题,请参考以下文章

pfx是啥文件

PFX 到 JKS 密钥工具的转换:别名 <*> 不存在

从命令行将 pfx 文件导入特定的证书存储

从 Azure 密钥保管库存储和检索 JKS

tomcat部署安全证书文件(阿里云SSL证书)

pfx是啥格式的文件啊