【问题标题】:Transfer trusted certificate (plus private key / chain) from Java keystore (jks) to Windows Certificate Manager将受信任的证书(加上私钥/链)从 Java 密钥库 (jks) 传输到 Windows 证书管理器
【发布时间】:2014-06-11 21:16:52
【问题描述】:

我正在尝试做的一些快速背景知识:客户端正在使用需要相互身份验证的第三方 Web 服务。该服务要求客户​​端证书由公共证书颁发机构签名(即:非自签名)。客户端有一些用 Java 编写的软件连接到服务,因此他们使用 Java keytool 来生成原始签名请求,并且密钥/证书存储在 jks 密钥库中。

我们的客户端将使用的软件是用 C#/.NET 编写的,需要连接到第三方 Web 服务。因此,我们需要能够访问客户端证书。

我似乎找不到任何方法将证书(连同私钥)导出到 Windows 证书管理器或其他可由 .NET 安全库打开的格式。

导出到 PKCS12 文件不起作用,因为 keytool 不支持可信证书(不确定这是 keytool 限制还是格式限制)。

我还找到了一些用于获取私钥的 Java 代码,但我似乎无法弄清楚如何将其导入 Windows 证书管理器并将其与证书相关联。 (How do I list / export private keys from a keystore?)

附带说明,客户端不想生成新证书,因为将证书发送到他们连接到的第三方服务并获得其批准涉及整个过程。

最终我希望有一些命令可以使用 keytool/openssl/etc 运行,这些命令将允许将证书和密钥导出/传输到 Windows 证书管理器(或它可以导入的某种格式)。

(抱歉,如果我的术语不正确,或者其中一些没有意义。尽管对管理证书不太熟悉,但我有点支持这一点。)

【问题讨论】:

  • 为什么需要客户端的私钥?您的服务应该只需要客户端的公共证书。
  • @Warren,我不是这种情况下的服务,我是客户(客户已经有一个用 Java 编写的客户端,我们也在用 .NET 制作一个客户端)。 .NET 客户端需要访问私钥(理想情况下与证书一起存储在 Windows 证书管理器中)才能对发送到服务的请求进行签名。
  • 好的,这个问题现在更有意义了。导出到 PKCS12 文件时出现什么错误?如果您可以同时提供您使用的命令和错误,那将有所帮助。如果该命令不同,您也可以在此处尝试 keytool 命令时提供输出:stackoverflow.com/questions/2640691/…
  • @Warren,感谢您的建议。使用此命令似乎可以成功导出带有私钥的证书:“keytool -v -importkeystore -srckeystore keystore -srcalias alias -destkeystore exportcert.p12 -deststoretype PKCS12” 他们之前尝试过没有 -srcalias 的命令,该命令产生了“java. security.KeyStoreException:不支持 TrustedCertEntry”错误。大概是因为您无法导出整个信任链。不完全确定没有链的证书是否适用于客户端身份验证(我会让客户试用一下)。

标签: java ssl ssl-certificate x509certificate keystore


【解决方案1】:

这似乎适用于导出证书而不是整个链,诀窍是指定 srcalias:

keytool -v -importkeystore -srckeystore .keystore -srcalias mykey -destkeystore myp12file.p12 -deststoretype PKCS12

感谢 Warren 向我指出这一点:How to export private key from a keystore of self-signed certificate

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 2011-11-09
    • 2019-01-24
    相关资源
    最近更新 更多