打包OpenSSH证书到pfx

打包OpenSSH证书到pfx

我想将 CA 签名的 OpenSSH 证书打包到 pfx 文件中。据我所知,我需要私钥和证书的格式为 PEM。我使用 ssh-keygen 生成 rsa 私钥和公钥。私钥已经是 PEM 格式。当我创建 OpenSSH 证书时,它是 OpenSSH 格式,而不是 PEM 编码。

我想使用 pkcs12 -export 命令来生成我的私钥和证书的 pkcs12 包,但是它说无法加载证书。

我知道我需要证书在 pem 中,并且我需要在 -in 文件中提供 CA 证书,但是证书不在 PEM 中,即使我强制将其放入 PEM 中,它也无法识别它。

是否有人曾将由 CA 签名的 OpenSSH 证书(不是 x.509)(尽管 Selfsigned 对我来说也不起作用)和私钥打包到 pfx 文件中?

如果是,您能否提供密钥生成的确切命令,包括证书生成和 pfx 文件的创建?

提前谢谢您,我已经寻找了好几天都没有找到合适的答案。

答案1

OpenSSH 和 x509 格式不兼容。您需要使用 openssl 创建私钥 + CSR。发送 CSR 后(不是如果你将证书(英语:密钥!)发送给 CA,他们会返回一个签名的证书,你可以将其与你的私钥组合成 pfx 容器。

创建密钥

openssl genrsa -out 2019-www_server_com.key 2048

创建证书签名请求

openssl req -new -key 2019-www_server_com.key -out 2019-www_server_com.csr

从收到的证书和密钥创建 PFX 容器

openssl pkcs12 -export -out 2019-www_server_com.pfx -inkey 2019-www_server_com.key -in yourcertificate.crt

答案2

简而言之,您可以使用现有的 RSA 私钥(我还没有尝试过其他类型,例如 ECDSA),但是,您需要使用具有适当 X.509 扩展的 OpenSSL 生成证书,以便将其打包到 PFX/PKCS12 文件中。以下是我尝试过的方法,并且成功了:

首先,如果您希望证书由 CA 签名,请生成 CSR。如果不希望,请跳至下一个命令以生成自签名证书。

openssl req -key .ssh/id_rsa -new -out .ssh/id_rsa.csr

注意:如果您对 SSH 密钥使用密码,系统将提示您输入密码。CSR(您的 CA 签名请求)将输出到 .ssh。这假设您想使用 .ssh/id_rsa 作为您的私钥。

或者,只需生成自签名证书。与以前一样,如果您的 SSH 密钥受密码保护,系统将提示您输入 SSH 密钥密码:

openssl req -key .ssh/id_rsa -new -x509 -days 365 -out .ssh/id_rsa.crt

注意:上述命令将证书有效期设置为 1 年(365 天)。根据需要进行调整。这对 OpenSSH 来说基本上没用,因为如果您希望逆转此过程,它将忽略 x.509 数据(包括证书过期时间)。

现在您已经拥有了具有正确 x.509 元数据(id_rsa.crt)的证书,您可以像往常一样将其与私钥一起打包:

openssl pkcs12 -inkey .ssh/id_rsa -in .ssh/id_rsa.crt -export -out .ssh/id_rsa.pfx

文件名可以是 .pfx 或 .p12,据我所知,格式相同。请注意,此命令将首先要求您输入 SSH 私钥密码,然后它会两次提示您输入 PFX/PKCS12 导出密码。

如上所述,要使用 OpenSSH 重用 PFX/PKCS12 文件,您需要先从 PFX/PKCS12 存档中提取并转换 PEM 格式的私钥,然后使用 ssh-keygen 从私钥派生 OpenSSH 公钥。我不确定你为什么要这样做,但希望以上内容对您有所帮助...

最后一件事:我发现DigitalOcean 的 OpenSSL 指南相当全面。它不会只给你复制粘贴的无意义的命令,还会解释每个命令的作用。

相关内容