将 putty ppk 转换为 pkcs12 挂起

将 putty ppk 转换为 pkcs12 挂起

我正在尝试将 putty ppk 文件转换为 pkcs12 以供 Java 密钥库使用。我在 Google 上搜索了一半的互联网,所有方法都围绕使用 openssl 将 ppk 文件转换为 pkcs12。在使用 puttygen 读取 ppk 文件并将私钥转换为 openssh 后,我尝试执行以下步骤:

openssl pkcs12 -export -inkey my.ppk -out new.p12

我尝试了很多变体,指定了名称和全部,但 openssl 命令在终端或 dos 提示符中挂起。没有错误。空的 p12 文件。只有黑色。

PPK 文件可以用 puttygen 读取。我尝试过使用和不使用密码。导出为私有 RSA 和 OpenSSH 格式。

为什么 PPK 到 PKCS12 的转换挂起了?

答案1

不确定自动僵尸化有什么好处,但对于那些关心的人来说:

为什么[尝试] PPK 到 PKCS12 的转换挂起了?

openssl pkcs12 -export通常至少读取两样东西:来自的私钥-inkey,以及匹配的 X.509 类型证书来自-in,或者如果没有指定,就像本例中没有指定一样,来自 stdin(标准输入)。通常,stdin 将从包含证书的文件重定向,或从生成(可能是检索,可能是生成)证书的命令传输,但由于这些都没有完成,openssl正在等待原帖者打印证书以 PEM 格式保存在终端上。这是因为 PKCS12 文件通常包含与相应的 X.509(或实际上相同的东西,PKIX)证书匹配的私钥。

这引出了楼主的一个问题不是

[去哪里获取证书?]

SSH 密钥一般没有 X.509 证书,Putty 密钥尤其没有。OpenSSH 有自己的私有证书,几乎与 X.509 完全不同,它与我所知道的任何其他证书(包括 Putty)都无法互操作。

PKCS12 标准非常灵活 —— 有些人会说过于灵活 —— 实际上,PKCS12 文件可能只包含私钥,而没有匹配的证书。OpenSSL 可以通过添加到-nocertspkcs12 -export命令来创建此文件。(更正)但是,这违反了 Java API 上规定的要求KeyStore,虽然在我的测试中,标准提供程序无论如何都会读取该文件,但程序可能能够或不能使用它。

给定一个私钥(例如由Puttygen导出的私钥)OpenSSL 可以创建“自签名”证书对于该密钥——这是一个伪证书,不是由 CA(证书颁发机构)以正常方式颁发的。实际上有两种方法,它们都基于req名义上创建企业社会责任-- 证书签名要求。您可以使用 一步完成openssl req -new -x509 -key privkeyfile -out certfile ...(证书中的一些数据有其他选项,如主题名称、有效期长度和扩展)或分两步创建 CSR,然后自己“批准”:然后openssl req -new -key privkeyfile -out csrfile ...openssl x509 -req -in csrfile -signkey privkeyfile -out certfile ...许多现有的 Q,很多(大多数?)可以追溯到很多年前,已经涵盖了这两个选项。

这将“起作用”,因为openssl pkcs12 -export可以创建包含私钥和自签名证书的文件,并且 Java(*) 可以读取该文件。但是,对于您想要使用 Java 密钥库的几乎所有事情来说,此密钥库都是无用的。例如,您可以使用此密钥库配置 HTTPS 或其他 SSL/TLS 服务器,它将运行,但几乎所有客户端在尝试连接时都会发现证书不是来自有效 CA 并中止。一些东西,如邮递员,会忽略证书错误并继续,还有一些,如curl --insecure,可以配置为,但浏览器和应用程序等将不起作用。同样,您可以在 Java 中使用这样的密钥库来签署 PDF 文档,但任何该文件将被拒绝,因为该证书不是来自有效的CA。等等。

(*) 使用 Java 8u60 以上版本,读取 PKCS12 应该“就可以正常工作”;在此之前/之下可能需要特殊配置或有时需要编码,但 JCA 具有此功能。

因此,获得有用PKCS12 密钥库用于openssl req -new创建 CSR,将 CSR 发送到 CA 并获得“真实”证书(这可能需要花钱,但也有一些免费的 CA,至少有一个,LetsEncrypt,是值得信赖的),并用它openssl pkcs12 -export来放置该证书,任何需要的中间或“链”证书,私钥,全部在 PKCS12 中。所需的链证书因使用的 CA 和获得的证书类型而异,但本世纪运营的每个公共 CA 至少需要一个;CA 应该记录您应该使用的链证书,或者将其与您的最终实体“叶”证书一起提供给您或“捆绑”提供给您,或者两者兼而有之。

答案2

OpenSSL 不支持 PPK 文件。只有 PuTTY 工具支持。您可以使用 PuTTYgen 将 PPK 转换为 PEM。然后您应该能够将 PEM 转换为 PKCS12。

答案3

正如@“Martin Prikryl”已经提到的,OpenSSL 不支持 PPK 文件,您需要安装putty-tools。之后,您puttygen YOUR_PRIVATE.ppk -O private-openssh -o your_private_id将为您的私钥和puttygen YOUR_PUBLIC.ppk -O public-openssh -o your_public_id公钥执行。

相关内容