내 openssl 함수에서 사용할 수 있는 공개 키를 생성하는 데 문제가 있습니다 PEM_read_bio_RSA_PUBKEY()
. 계속 오류가 발생합니다.
ssh-keygen <>.pub
분명히 SSH 파일 형식이나 구조화 방법 때문에 키 파일에 ASCII 문자열을 사용할 수는 없습니다 SubjectPublicKeyInfo
.
다음은 키 생성 코드입니다.ssh-keygen -t rsa -b 1024 -C "Test Key"
공개 키의 내용을 base64 PEM ASCII 문자열 형식으로 변환하는 PHP 변환기를 온라인에서 찾았습니다. 그러나 이 기능은 여전히 마음에 들지 않습니다.
Openssl 문서에는 다음과 같이 명시되어 있습니다.
- "EVP_PKEY 구조를 사용하여 공개 키를 처리하는 RSA_PUBKEY() 함수"
- "RSA_PUBKEY 함수는 RSA 구조를 사용하여 RSA 공개 키도 처리합니다."
OpenSSH 공개 키를 OpenSSL 기능이 사용할 형식으로 변환하려면 어떻게 해야 합니까?
답변1
좋아요!
그래서 저는 "쉽네요, 알겠습니다."라고 생각하기 시작했습니다. 알고 보니 제가 생각했던 것보다 훨씬 더 많은 의미가 있었습니다.
첫 번째 문제는 OpenSSL 매뉴얼 페이지에 따르면 man 3 pem
OpenSSL은 RSA 키가 PKCS#1 형식일 것으로 예상한다는 것입니다. 분명히 이것은 ssh-keygen이 처리하는 것이 아닙니다. 두 가지 옵션이 있습니다(검색하여).
OpenSSH v. 5.6 이상이 있는 경우(내 노트북에는 없습니다) 다음 명령을 실행할 수 있습니다.
ssh-keygen -f key.pub -e -m pem
더 장기적인 접근 방식은 SSH 키를 개별 구성요소(블로그 항목나는 그들 중 일부가 OpenSSH가 "독점적"이라고 비난하고(저는 "고유"라고 부르는 것을 선호함) ASN1 라이브러리를 사용하여 콘텐츠를 교환하는 것을 발견했습니다.
운 좋게도 누군가가 이를 수행하는 코드를 작성했습니다.
답변2
SSH 개인 키가 있다고 가정하면 id_rsa
다음과 같이 공개 키를 추출할 수 있습니다.
openssl rsa -in id_rsa -pubout -out id_rsa.pub.pem
OP가 공개 키 변환에 대해 요청했다는 것을 알고 있으므로 이것이 질문에 정확하게 대답하지는 않지만 어쨌든 일부 사람들에게는 유용할 것이라고 생각했습니다.
또한 이 명령은 일반적으로 OpenSSL에서 예상되는 PEM 공개 키 형식을 생성합니다. 반면에 Brian의 대답은 OpenSSL이 기대하는 일반적인 형식이 아닌 RSAPublicKey 형식으로 파일을 생성합니다(나중 버전에서는 분명히 flags 를 통해 읽을 수 있음 -RSAPublicKey_in
). 변환하려면 다음을 수행할 수 있습니다.
openssl rsa -RSAPublicKey_in -in id_rsa.rsapub.pem -pubout -out id_rsa.pub.pem
답변3
원하는 형식은 입니다 ssh-keygen
. PKCS8
따라서 다음 명령은 원하는 출력을 생성합니다.
ssh-keygen -f key.pub -e -m pkcs8
ssh-keygen
매뉴얼 페이지 에서 :
-m key_format
Specify a key format for the -i (import) or -e (export) conversion
options. The supported key formats are:
``RFC4716'' (RFC 4716/SSH2 public or private key),
``PKCS8'' (PEM PKCS8 public key) or
``PEM'' (PEM public key).
The default conversion format is ``RFC4716''.
답변4
ssh-keygen -f path/to/id_rsa.pub -e -m pem > path/to/rsa.pem
명령의 각 부분은 다음을 수행합니다.
-f path/to/id_rsa.pub: 입력 파일, 즉 기존 OpenSSH 공개 키 파일(id_rsa.pub)의 경로를 지정합니다.
-e -m pem: 지정된 형식을 PEM으로 변환합니다.
">" path/to/rsa.pem: 지정된 디렉터리(path/to/)에 있는 rsa.pem이라는 파일로 출력을 리디렉션합니다.
ssh-keygen -f id_rsa.pub -e -m pem > yourfilename.pem