que publica privadas privada pida para llaves llave generar enviar contraseña configurar conectarse con clave agregar ssh openssl certificate x509 pkcs#12

publica - Extraiga la clave pública/privada del archivo PKCS12 para su uso posterior en SSH-PK-Authentication



llaves privadas ssh (5)

Solución 1:

Extraiga P12 de jks: keytool -importkeystore -srckeystore MyRootCA.jks -destkeystore MyRootCA.p12 -deststoretype PKCS12

Extraiga PEM de P12 y Edite archivo y pem desde el archivo crt: openssl pkcs12 -en MyRootCA.p12 -clcerts -nokeys -out MyRootCA.crt

Extraiga la clave de jks: openssl pkcs12 -en MyRootCA.p12 -nocerts -out encryptedPrivateKey.pem openssl rsa -in encryptedPrivateKey.pem -out decryptedPrivateKey.key

Solución 2:

Extraiga PEM y encryptedPrivateKey al archivo txt: openssl pkcs12 -en MyRootCA.p12 -out keys_out.txt

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

Deseo extraer la clave pública y privada de mi archivo PKCS # 12 para usarla posteriormente en SSH-Public-Key-Authentication.

En este momento, estoy generando claves a través de ssh-keygen que puse en .ssh / authorized_key , respectiva en algún lugar en el lado del cliente.

En el futuro, quiero usar las claves de un contenedor PKCS # 12, así que primero tengo que extraer la clave pública de PKCS # 12 y luego ponerlas en .ssh / authorized_keys -file. ¿Hay alguna posibilidad de hacer que esto funcione a través de openssl? ¿Las teclas en PKCS # 12 son compatibles para la autenticación con clave pública ssh?


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 a 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 de fábrica. Como otros sugirieron, debe extraer la clave privada en formato PEM que lo lleva desde el terreno de OpenSSL a OpenSSH. Otras soluciones mencionadas aquí no funcionan para mí. Uso OS X 10.9 Mavericks (10.9.3 por el momento) con utilidades "preempacadas" (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

Recomiendo encarecidamente encriptar la clave privada con contraseña:

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

Obviamente, tampoco es seguro escribir una contraseña de texto sin formato en la línea de comandos, por lo que debe eliminar el último comando del historial. Diferentes proyectiles tienen diferentes formas. Aquí es cómo puedes hacer esto 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 ver los argumentos de la frase de contraseña.

A continuación, cree una clave pública de OpenSSH que se puede agregar al archivo authorized_keys:

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


Por lo que sé, PKCS # 12 es solo un certificado / almacén de claves públicas / privadas. Si extrajo una clave pública del archivo PKCS # 12, OpenSSH debería poder usarla siempre que se haya extraído en formato PEM . Probablemente ya sepa que también necesita una clave privada correspondiente (también en PEM ) para usarla en la autenticación de clave pública de ssh.


Puede usar 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