我想从我的PKCS#12
文件中提取公钥和私钥,以备后续在SSH公钥身份验证中使用。
目前,我通过ssh-keygen生成密钥,并将其放入. ssh/authorized_key
中,相应地放在客户端的某个位置。
将来,我想使用来自 PKCS#12
容器的密钥,因此我必须先从PKCS#12
中提取公钥,然后将它们放入. ssh/authorized_keys
文件中。 是否有可能通过openssl
使其工作? PKCS#12
中的密钥是否兼容于SSH公钥身份验证?
我想从我的PKCS#12
文件中提取公钥和私钥,以备后续在SSH公钥身份验证中使用。
目前,我通过ssh-keygen生成密钥,并将其放入. ssh/authorized_key
中,相应地放在客户端的某个位置。
将来,我想使用来自 PKCS#12
容器的密钥,因此我必须先从PKCS#12
中提取公钥,然后将它们放入. ssh/authorized_keys
文件中。 是否有可能通过openssl
使其工作? PKCS#12
中的密钥是否兼容于SSH公钥身份验证?
您可以使用以下命令从 PKCS#12 容器中提取公钥/私钥:
PKCS#1 Private key
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
Certificates:
openssl pkcs12 -in yourP12File.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
OpenSSH无法直接使用PKCS#12文件。正如其他人建议的那样,您必须以PEM格式提取私钥,从而将您从OpenSSL之地带到OpenSSH。这里提到的其他解决方案对我不起作用。我使用OS X 10.9 Mavericks(目前为10.9.3)与“预装”的实用程序(OpenSSL 0.9.8y,OpenSSH 6.2p2)。
首先,请提取一个以PEM格式保存的私钥,它将被OpenSSH直接使用:
openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa > ~/.ssh/id_rsa
我强烈建议使用密码加密私钥:
openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa -passout 'pass:Passw0rd!' > ~/.ssh/id_rsa
显然,在命令行上写明文密码也不安全,因此您应该从历史记录中删除最后一个命令,或者确保它不会出现在历史记录中。不同的shell有不同的方法。您可以在Bash和许多其他shell中使用空格前缀来防止命令被保存到历史记录中。以下是如何在Bash中从历史记录中删除命令的方法:
history -d $(history | tail -n 2 | awk 'NR == 1 { print $1 }')
或者,您可以使用不同的方式将私钥密码传递给OpenSSL - 参考OpenSSL文档中有关密码短语参数的说明。
然后,创建一个可添加到authorized_keys文件的OpenSSH公钥:
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
〜/ .ssh / id_rsa
),而没有使用 | openssl rsa
。我猜OpenSSH和其他使用身份文件的实用程序可以处理那些垃圾(我还没有尝试过),但是我习惯于仅提供必要的数据,特别是如果涉及到安全问题。 - F4-Z4openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts
- Andrew Aarestad方案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
解密私钥
openssl rsa -in encryptedPrivateKey.key [-outform PEM] -out decryptedPrivateKey.key
echo hello
。 - PatS以下是其中的一段摘录:
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>
"输入PEM密码短语:"
)留空,则只会提取localKeyID
而不是完整密钥。要获取完整的密钥,必须在运行以下命令时指定PEM密码。"输入导入密码:"
指定实际密码,也可以将此密码留空:openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
-passout pass:
。它需要以pass:我的密码
格式的参数作为输入。https://dev59.com/Dl4c5IYBdhLWcg3wz9FG#27497899 - nidheeshdas