Извлечение открытого / закрытого ключа из файла PKCS12 для последующего использования В SSH-PK-аутентификации
Я хочу извлечь открытый и закрытый ключ из моего файла PKCS#12 для последующего использования В SSH-Public-Key-Authentication.
прямо сейчас я генерирую ключи через ssh-keygen, который я помещаю в .ssh / authorized_key, соответственно где-то на стороне клиента.
в будущем я хочу использовать ключи из контейнера PKCS#12, поэтому я должен сначала извлечь открытый ключ из PKCS#12, а затем поместить их в .ssh / authorized_keys-файл. Есть ли шанс получить эту работу через openssl? Совместимы ли ключи в PKCS#12 для аутентификации с открытым ключом ssh?
5 ответов:
вы можете использовать следующие команды для извлечения открытого / закрытого ключа из контейнера 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 из коробки. Как предлагали другие, вы должны извлечь закрытый ключ в формате PEM, который доставит вас из земли OpenSSL в OpenSSH. Другие решения, упомянутые здесь, не работают для меня. Я использую OS X 10.9 Mavericks (10.9.3 на данный момент) с "предварительно упакованными" утилитами (OpenSSL 0.9.8 y, 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 и многих других оболочек. Вот также Как удалить команду из истории в Bash:
history -d $(history | tail -n 2 | awk 'NR == 1 { print }')
кроме того, вы можете использовать различные способ передачи пароля закрытого ключа в OpenSSL-consult документация OpenSSL для Аргументов парольной фразы.
затем создайте открытый ключ OpenSSH, который можно добавить в файл authorized_keys:
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
Решение 1:
извлечь P12 из jks
keytool -importkeystore -srckeystore MyRootCA.jks -destkeystore MyRootCA.p12 -deststoretype PKCS12
извлеките PEM из P12 и отредактируйте файл и pem из файла crt
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 и encryptedPrivateKey в txt файл"'
openssl pkcs12 -in MyRootCA.p12 -out keys_out.txt
расшифровать privateKey
openssl rsa -in encryptedPrivateKey.key [-outform PEM] -out decryptedPrivateKey.key
насколько я знаю, PKCS#12-это просто хранилище сертификатов/открытых/закрытых ключей. Если вы извлекли открытый ключ из файла PKCS#12, OpenSSH должен иметь возможность использовать его до тех пор, пока он был извлечен в PEM. Вы, наверное, уже знаете, что вам также нужен соответствующий закрытый ключ (также в PEM) для того, чтобы использовать его для аутентификации ssh-открытого ключа.