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?
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
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 o simplemente hacer que no llegue allí. Diferentes proyectiles tienen diferentes formas. Puede poner un prefijo en 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 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
Solución 1:
Extracto 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 -in MyRootCA.p12 -clcerts -nokeys -out MyRootCA.crt
Extrae la clave de jks
openssl pkcs12 -in MyRootCA.p12 -nocerts -out encryptedPrivateKey.pem openssl rsa -in encryptedPrivateKey.pem -out decryptedPrivateKey.key
Solución 2:
Extraiga PEM y encryptedPrivateKey para txt file“`
openssl pkcs12 -in MyRootCA.p12 -out keys_out.txt
Descifrar privateKey
openssl rsa -in encryptedPrivateKey.key [-outform PEM] -out decryptedPrivateKey.key
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.