从PKCS12文件中提取公钥/私钥,以便以后在SSH-PK身份validation中使用

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

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

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

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

  • PKCS#1私钥

    openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem 
  • 证书:

     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文件。 正如其他人所build议的,你必须提取PEM格式的私钥,它可以让你从OpenSSL的土地到OpenSSH。 这里提到的其他解决scheme不适合我。 我使用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 

我强烈build议用密码encryption私钥:

 openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa -passout 'pass:Passw0rd!' > ~/.ssh/id_rsa 

显然,在命令行上写明文密码也是不安全的,所以你应该从历史logging中删除最后一条命令。 不同的炮弹有不同的方式。 这里是你如何在Bash中做到这一点:

 history -d $(history | tail -n 2 | awk 'NR == 1 { print $1 }') 

或者,您可以使用不同的方式将私钥密码传递给OpenSSL – 请参阅OpenSSL文档以获取密码参数 。

然后,创build一个可以添加到authorized_keys文件的OpenSSH公钥:

 ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub 

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