我想从PKCS#12文件中提取公钥和私钥,以便以后在SSH-Public-Key-Authentication中使用。

现在,我通过ssh-keygen生成密钥,我把它放在。ssh/authorized_key中,分别放在客户端的某个地方。

以后,我想使用PKCS#12容器中的密钥,因此我必须首先从PKCS#12中提取公钥,然后将它们放入.ssh/authorized_keys文件中。有没有机会让这个工作通过openssl?PKCS#12中的密钥是否与ssh-public-key身份验证兼容?


当前回答

解决方案1:

从jks中提取P12

keytool -importkeystore -srckeystore MyRootCA.jks -destkeystore MyRootCA.p12 -deststoretype PKCS12

从P12文件中提取PEM,从crt文件中编辑文件和PEM

openssl pkcs12 -in MyRootCA.p12 -clcerts -nokeys -out MyRootCA.crt

从jks中提取密钥

openssl pkcs12 -in MyRootCA.p12 -nocerts -out encryptedPrivateKey.pem
openssl rsa -in encryptedPrivateKey.pem -out decryptedPrivateKey.key

解决方案2:

将PEM和encryptedPrivateKey提取到txt文件' ' '

openssl pkcs12 -in MyRootCA.p12 -out keys_out.txt

解密privateKey

openssl rsa -in encryptedPrivateKey.key [-outform PEM] -out decryptedPrivateKey.key

其他回答

更新:我注意到我的答案只是https://unix.stackexchange.com/上一个解释很好的问题的糟糕副本……由BryKKan

以下是其中的一段摘录:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>

openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>

openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>

据我所知,PKCS#12只是一个证书/公钥/私钥存储。如果您从PKCS#12文件中提取了一个公钥,OpenSSH应该能够使用它,只要它是以PEM格式提取的。您可能已经知道,为了将其用于ssh-public-key身份验证,还需要一个相应的私钥(也是在PEM中)。

接受的答案是正确的命令,我只想添加一个额外的东西,当提取密钥时,如果你留下PEM密码(“Enter PEM pass phrase:”)空白,那么完整的密钥将不会被提取,而只会提取localKeyID。要获得完整的密钥,您必须在运行以下命令时指定PEM密码。

请注意,当涉及到导入密码时,你可以为“Enter Import password:”指定实际的密码,或者可以让这个密码为空:

openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem

您可以使用以下命令从PKCS#12容器中提取公钥/私钥:

PKCS#1私钥 openssl pkcs12 -在你的p12file中。pfx -nocerts privateKey.pem 证书: openssl pkcs12 -在你的p12file中。pfx -clcerts -nokeys out publicCert.pem

这可以通过一些格式转换实现。

要以openssh可以使用的格式提取私钥:

openssl pkcs12 -in pkcs12.pfx -nocerts -nodes | openssl rsa > id_rsa

使用实例将私钥转换为公钥。

openssl rsa -in id_rsa -pubout | ssh-keygen -f /dev/stdin -i -m PKCS8

以openssh可以使用的格式提取公钥:

openssl pkcs12 -in pkcs12.pfx -clcerts -nokeys | openssl x509 -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8