Solución:
Puede utilizar los siguientes comandos para extraer la clave pública / privada de un contenedor PKCS # 12:
-
PKCS # 1 Clave privada
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
-
Certificados:
openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem
Esto es posible con un poco de conversión de formato.
Para extraer la clave privada en un formato, openssh puede usar:
openssl pkcs12 -in pkcs12.pfx -nocerts -nodes | openssl rsa > id_rsa
Para convertir la clave privada en una clave pública:
openssl rsa -in id_rsa -pubout | ssh-keygen -f /dev/stdin -i -m PKCS8
Para extraer la clave pública en un formato, openssh puede usar:
openssl pkcs12 -in pkcs12.pfx -clcerts -nokeys | openssl x509 -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8
OpenSSH no puede usar archivos PKCS # 12 listos para usar. Como sugirieron otros, debe extraer la clave privada en formato PEM que lo lleva de la tierra de OpenSSL a OpenSSH. Otras soluciones mencionadas aquí no funcionan para mí. Utilizo OS X 10.9 Mavericks (10.9.3 en este momento) con utilidades “preempaquetadas” (OpenSSL 0.9.8y, OpenSSH 6.2p2).
Primero, extraiga una clave privada en formato PEM que será utilizada directamente por OpenSSH:
openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa > ~/.ssh/id_rsa
Sugiero encarecidamente cifrar la clave privada con contraseña:
openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa -passout 'pass:Passw0rd!' > ~/.ssh/id_rsa
Obviamente, escribir una contraseña de texto sin formato en la línea de comandos tampoco es seguro, por lo que debe eliminar el último comando del historial o simplemente asegurarse de que no llegue allí. Los diferentes caparazones tienen diferentes formas. Puede prefijar su comando con espacio para evitar que se guarde en el historial en Bash y muchos otros shells. Aquí también se explica cómo eliminar el comando del historial en Bash:
history -d $(history | tail -n 2 | awk 'NR == 1 { print $1 }')
Alternativamente, puede usar una forma diferente de pasar una contraseña de clave privada a OpenSSL; consulte la documentación de OpenSSL para obtener argumentos de frase de contraseña.
Luego, cree una clave pública OpenSSH que se puede agregar al archivo Authorized_keys:
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub