[ssh] SSH-PK 인증에서 나중에 사용하기 위해 PKCS12 파일에서 공개 / 개인 키 추출

PKCS#12SSH-Public-Key-Authentication에서 나중에 사용하기 위해 파일 에서 공개 및 개인 키를 추출하고 싶습니다 .

지금 .ssh/authorized_key은 클라이언트 측 어딘가에 ssh-keygen을 통해 키를 생성 하고 있습니다.

앞으로 PKCS#12컨테이너 의 키를 사용하고 싶기 때문에 먼저 공개 키를 추출한 PKCS#12다음 .ssh/authorized_keys파일에 넣습니다 . 이 작업을 통해 얻을 수있는 기회가 openssl있습니까? 키가 PKCS#12ssh-public-key 인증과 호환됩니까?



답변

다음 명령을 사용하여 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 파일을 사용할 수 없습니다. 다른 사람들이 제안했듯이 OpenSSL에서 OpenSSH로 이동하는 PEM 형식의 개인 키를 추출해야합니다. 여기에 언급 된 다른 솔루션은 효과가 없습니다. “사전 패키지 된”유틸리티 (OpenSSL 0.9.8y, OpenSSH 6.2p2)와 함께 OS X 10.9 Mavericks (현재 10.9.3)을 사용합니다.

먼저 OpenSSH에서 직접 사용할 PEM 형식의 개인 키를 추출하십시오.

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 $1 }')

또는 다른 방법으로 개인 키 암호를 OpenSSL에 전달할 수 있습니다. 암호 구문 인수에 대해서는 OpenSSL 설명서를 참조하십시오 .

그런 다음 authorized_keys 파일에 추가 할 수있는 OpenSSH 공개 키를 작성하십시오.

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


답변

해결책 1 :

jks에서 P12 추출

keytool -importkeystore -srckeystore MyRootCA.jks -destkeystore MyRootCA.p12 -deststoretype PKCS12

P12에서 PEM 추출 및 crt 파일에서 파일 및 pem 편집

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

개인 키 해독

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


답변

업데이트 : 내 대답은 잘 단지 가난한 중복이었다에 질문을 설명한 것으로 나타났습니다 //unix.stackexchange.com / … : HTTPS 에 의해 BryKKan

여기에서 추출한 내용이 있습니다.

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>

openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>

openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>


답변

내가 아는 한 PKCS # 12는 인증서 / 공개 / 개인 키 저장소 일뿐입니다. PKCS # 12 파일에서 공개 키를 추출한 경우 OpenSSH는 PEM 형식 으로 추출 된 키를 사용할 수 있어야 합니다. ssh-public-key 인증에 사용하려면 해당 개인 키 ( PEM ) 도 필요하다는 것을 이미 알고있을 것입니다 .


답변

허용 된 답변은 올바른 명령입니다 .PEM password ( "Enter PEM pass phrase:")를 비워 두면 키를 추출 할 때 전체 키가 추출되지 않지만 추출 만 localKeyID추출됩니다. 완전한 키를 얻으려면 다음 명령을 실행하는 PEM 비밀번호를 지정해야합니다.

비밀번호 가져 오기와 관련하여 실제 비밀번호를 지정하거나이 비밀번호를 "Enter Import Password:"비워 둘 수 있습니다.

openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem