PKCS#12
SSH-Public-Key-Authentication에서 나중에 사용하기 위해 파일 에서 공개 및 개인 키를 추출하고 싶습니다 .
지금 .ssh/authorized_key
은 클라이언트 측 어딘가에 ssh-keygen을 통해 키를 생성 하고 있습니다.
앞으로 PKCS#12
컨테이너 의 키를 사용하고 싶기 때문에 먼저 공개 키를 추출한 PKCS#12
다음 .ssh/authorized_keys
파일에 넣습니다 . 이 작업을 통해 얻을 수있는 기회가 openssl
있습니까? 키가 PKCS#12
ssh-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