Answers:
您可以使用以下命令从PKCS#12容器中提取公钥/私钥:
PKCS#1私钥
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
证书:
openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem
openssl rsa -in privateKey.pem -out private.pem
-passout pass:
。它期望参数采用pass:mypassword的形式。 stackoverflow.com/a/27497899/206277
-nodes
正确地导出密钥
通过一点格式转换就可以做到这一点。
要以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
显然,在命令行上输入纯文本密码也不安全,因此您应该从历史记录中删除最后一个命令,或者只是确保它没有到达该位置。不同的外壳具有不同的方式。您可以在命令前面加上空格,以防止将其保存到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
| openssl rsa
用?
~/.ssh/id_rsa
带有一些“内容”的身份文件(),例如没有`|的Bag Attributes。openssl rsa`。我猜想OpenSSH和其他使用身份文件的实用程序可以处理这些问题(我还没有尝试过),但是我只是用来仅提供必要的数据而已,仅此而已,尤其是在安全性方面。
openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts
解决方案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和已加密的PrivateKey提取到txt文件中
openssl pkcs12 -in MyRootCA.p12 -out keys_out.txt
解密私钥
openssl rsa -in encryptedPrivateKey.key [-outform PEM] -out decryptedPrivateKey.key
echo hello
。
更新:我注意到,我的回答是一个良好的只是一个可怜的重复进行解释问题的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>
可接受的答案是正确的命令,我只想添加一件事,在提取密钥时,如果将PEM password("Enter PEM pass phrase:"
)留为空白,则不会提取完整的密钥,而只会localKeyID
提取。要获取完整的密钥,您必须运行以下命令来指定PEM密码。
请注意,在导入密码时,您可以为其指定实际密码,"Enter Import Password:"
也可以将该密码留为空白:
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem