.pem을 .crt 및 .key로 변환


371

누구나 파일에서 인증서 .crt와 개인 키 .key파일 을 추출 / 변환하는 올바른 방법 / 명령을 말해 줄 수 있습니까 .pem? 나는 그것들이 상호 교환 가능하지만 어떻게 읽을 수는 없다는 것을 읽었습니다.



답변:


500

이것을 사용하여 pem을 crt로 변환 할 수있었습니다.

openssl x509 -outform der -in your-cert.pem -out your-cert.crt

13
텍스트 편집기를 사용하는 것이 가장 좋은 방법은 아닙니다. PKCS8 형식으로 키를 추출하려면 다음을 수행 openssl pkey -in mumble.pem -out mumble-key.pem 하십시오. OpenSSL 버전이 1.0.0보다 오래된 경우 키를 RSA 키로 추출하십시오.openssl rsa -in mumble.pem -out mumble-key.pem
Andron

131
나는 당신의 명령을 시도했지만 나는했다 :unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Damien Carol

15
키 명령 (openssl pkey -in mumble.pem -out mumble-key.pem)은 다음을 제공합니다 : 키 129051320116880 : error : 0906D06C : PEM 루틴을로드 할 수 없습니다 : 개인 키
mylord

2
openssl rsa -in-cert.pem -outform pem -out your-key.pem
troyfolger

3
@Andron pkey와 rsa는 모두 Expecting: ANY PRIVATE KEY오류를냅니다.
Aero Wang

393

OpenSSL을 사용하여 변환

이 명령을 사용하면 인증서와 키를 다른 형식으로 변환하여 특정 유형의 서버 나 소프트웨어와 호환되도록 할 수 있습니다.

  • DER 파일 (.crt .cer .der)을 PEM으로 변환

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  • PEM 파일을 DER로 변환

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • 개인 키와 인증서가 포함 된 PKCS # 12 파일 (.pfx .p12)을 PEM으로 변환

    openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
    
    You can add -nocerts to only output the private key or add -nokeys to only output the certificates.
    
  • PEM 인증서 파일 및 개인 키를 PKCS # 12 (.pfx .p12)로 변환

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    
  • PEM을 CRT (.CRT 파일)로 변환

    openssl x509 -outform der -in certificate.pem -out certificate.crt
    

OpenSSL Convert PEM

  • PEM을 DER로 변환

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • PEM에서 P7B로 변환

    openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
    
  • PEM을 PFX로 변환

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    

OpenSSL Convert DER

  • DER에서 PEM으로 변환

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    

OpenSSL Convert P7B

  • P7B에서 PEM으로 변환

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
  • P7B를 PFX로 변환

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
    openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
    

OpenSSL Convert PFX

  • PFX에서 PEM으로 변환

    openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
    

OpenSSL로 rsa 키 생성

  • 명령 행에서 공개 및 개인 키를 생성해야하는 명령 행에서 OpenSSL을 사용하는 경우 -passout 인수를 사용하여이 파일을 비밀번호로 보호해야합니다.이 인수가 취할 수있는 다양한 양식이 있으므로 OpenSSL 문서를 참조하십시오.

    openssl genrsa -out private.pem 1024
    
  • 1024 비트를 사용하는 private.pem이라는 키 파일을 만듭니다. 이 파일에는 실제로 개인 키와 공개 키가 모두 있으므로이 파일에서 공개 키를 추출해야합니다.

    openssl rsa -in private.pem -out public.pem -outform PEM -pubout
    
    or
    
    openssl rsa -in private.pem -pubout > public.pem
    
    or
    
    openssl rsa -in private.pem -pubout -out public.pem
    

    이제 공개 키만 포함 된 public.pem을 갖게되며이를 타사와 자유롭게 공유 할 수 있습니다. 공개 키를 사용하여 직접 무언가를 암호화 한 다음 개인 키를 사용하여 해독하면 모든 것을 테스트 할 수 있습니다. 먼저 암호화하려면 약간의 데이터가 필요합니다.

  • 예제 파일 :

    echo 'too many secrets' > file.txt
    
  • 이제 file.txt에 일부 데이터가 있으며 OpenSSL 및 공개 키를 사용하여 암호화 할 수 있습니다.

    openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
    
  • 이 파일은 file.ssl이라고하는 암호화 된 버전의 file.txt를 생성합니다.이 파일을 보면 파일이 바이너리 정크 일뿐입니다. 이제 개인 키를 사용하여 암호화를 해제 할 수 있습니다.

    openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
    
  • 이제 decrypted.txt에 암호화되지 않은 파일이 있습니다.

    cat decrypted.txt
    |output -> too many secrets
    

OpenSSL의 RSA 도구 옵션

  • 이름

    rsa-RSA 키 처리 도구

  • 개요

    openssl rsa [-도움말] [-정보 PEM | NET | DER] [-결과 PEM | NET | DER] [-파일 이름] [-passin arg] [-out 파일 이름] [-passout arg] [-aes128] [- aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-엔진 ID]

  • 기술

    rsa 명령은 RSA 키를 처리합니다. 그것들은 다양한 형태와 그들의 구성 요소 사이에서 변환 될 수 있습니다. 이 명령은 개인 키 암호화에 기존 SSLeay 호환 형식을 사용합니다. 최신 응용 프로그램은 pkcs8 유틸리티를 사용하여보다 안전한 PKCS # 8 형식을 사용해야합니다.

  • 명령 옵션

    -help
    

    사용법 메시지를 인쇄하십시오.

    -inform DER|NET|PEM
    

    입력 형식을 지정합니다. DER 옵션은 PKCS # 1 RSAPrivateKey 또는 SubjectPublicKeyInfo 형식과 호환되는 ASN1 DER 인코딩 형식을 사용합니다. PEM 형식은 기본 형식입니다. 추가 헤더 및 바닥 글 줄로 인코딩 된 DER 형식 base64로 구성됩니다. 입력 PKCS # 8 형식에서는 개인 키도 허용됩니다. NET 양식은 형식 섹션에 설명되어 있습니다.

    -outform DER|NET|PEM
    

    이것은 출력 형식을 지정하며 옵션은 -inform 옵션과 동일한 의미를 갖습니다.

    -in filename
    

    이 옵션이 지정되지 않은 경우 키 또는 표준 입력에서 읽을 파일 이름을 지정합니다. 키가 암호화되면 암호 문구를 입력하라는 메시지가 표시됩니다.

    -passin arg
    

    입력 파일 비밀번호 소스 arg 형식에 대한 자세한 내용은 openssl의 PASS PHRASE ARGUMENTS 섹션을 참조하십시오.

    -out filename
    

    이 옵션이 지정되지 않은 경우 키 또는 표준 출력에 쓸 출력 파일 이름을 지정합니다. 암호화 옵션이 설정되면 암호 문구가 표시됩니다. 출력 파일 이름은 입력 파일 이름과 같아서는 안됩니다.

    -passout password
    

    출력 파일 비밀번호 소스 arg 형식에 대한 자세한 내용은 openssl의 PASS PHRASE ARGUMENTS 섹션을 참조하십시오.

    -aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea
    

    이 옵션은 개인 키를 출력하기 전에 지정된 암호로 암호화합니다. 암호 문구가 프롬프트됩니다. 이러한 옵션을 지정하지 않으면 키가 일반 텍스트로 작성됩니다. 이는 rsa 유틸리티를 사용하여 암호화 옵션이없는 암호화 된 키를 읽음으로써 암호 문구를 키에서 제거하거나 암호 옵션을 설정하여 암호 문구를 추가하거나 변경하는 데 사용할 수 있음을 의미합니다. 이 옵션은 PEM 형식 출력 파일에만 사용할 수 있습니다.

    -text
    

    인코딩 된 버전 외에도 다양한 공개 또는 개인 키 구성 요소를 일반 텍스트로 인쇄합니다.

    -noout
    

    이 옵션은 인코딩 된 키 버전의 출력을 방지합니다.

    -modulus
    

    이 옵션은 키 모듈러스 값을 인쇄합니다.

    -check
    

    이 옵션은 RSA 개인 키의 일관성을 검사합니다.

    -pubin
    

    기본적으로 개인 키는 입력 파일에서 읽습니다.이 옵션을 사용하면 공개 키가 대신 읽 힙니다.

    -pubout
    

    기본적으로 개인 키가 출력됩니다.이 옵션을 사용하면 공개 키가 대신 출력됩니다. 이 옵션은 입력이 공개 키인 경우 자동으로 설정됩니다.

    -RSAPublicKey_in, -RSAPublicKey_out
    

    RSAPublicKey 형식을 제외하고 -pubin 및 -pubout과 같이 사용됩니다.

    -engine id
    

    고유 한 id 문자열로 엔진을 지정하면 rsa가 지정된 엔진에 대한 기능 참조를 얻으려고하므로 필요한 경우 초기화합니다. 그러면 엔진이 사용 가능한 모든 알고리즘의 기본값으로 설정됩니다.

  • 노트

    PEM 개인 키 형식은 머리글과 바닥 글 줄을 사용합니다.

    -----BEGIN RSA PRIVATE KEY-----
    
    -----END RSA PRIVATE KEY-----
    

    PEM 공개 키 형식은 머리글과 바닥 글 줄을 사용합니다.

    -----BEGIN PUBLIC KEY-----
    
    -----END PUBLIC KEY-----
    

    PEM RSAPublicKey 형식은 머리글과 바닥 글 줄을 사용합니다.

    -----BEGIN RSA PUBLIC KEY-----
    
    -----END RSA PUBLIC KEY-----
    

    NET 양식은 이전 Netscape 서버 및 Microsoft IIS .key 파일과 호환되는 형식으로, 암호화에 무염 RC4를 사용합니다. 매우 안전하지 않으므로 필요할 때만 사용해야합니다.

    일부 최신 버전의 IIS에는 내 보낸 .key 파일에 추가 데이터가 있습니다. 이들을 유틸리티와 함께 ​​사용하려면 이진 편집기로 파일을보고 문자열 "private-key"를 찾은 다음 바이트 시퀀스 0x30, 0x82 (ASN1 SEQUENCE)로 다시 추적하십시오. 이 시점부터 모든 파일을 다른 파일로 복사하고이를 -inform NET 옵션과 함께 rsa 유틸리티의 입력으로 사용하십시오.

    실시 예

    RSA 개인 키에서 암호 문구를 제거하려면

     openssl rsa -in key.pem -out keyout.pem
    

    트리플 DES를 사용하여 개인 키를 암호화하려면

     openssl rsa -in key.pem -des3 -out keyout.pem
    

    개인 키를 PEM에서 DER 형식으로 변환하려면

      openssl rsa -in key.pem -outform DER -out keyout.der
    

    개인 키의 구성 요소를 표준 출력으로 인쇄하려면 다음을 수행하십시오.

      openssl rsa -in key.pem -text -noout
    

    개인 키의 공개 부분 만 출력하려면 다음을 수행하십시오.

      openssl rsa -in key.pem -pubout -out pubkey.pem
    

    개인 키의 공개 부분을 RSAPublicKey 형식으로 출력하십시오.

      openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
    

32
여전히 이것은 (내 보낸) 이진 인증서에서 개인 키를 얻는 방법에 대한 질문에 대답하지 않습니다 .
bbaassssiiee

개인 키와 인증서가 포함 된 PEM이 있는지 궁금합니다. 인증서 만 얻는 방법은 무엇입니까? 텍스트 편집기를 사용하여 인증서 부분을 복사 할 수는 있지만 openssl 명령을 알고 싶습니다.
workplaylifecycle

46

pem 파일에서 키와 인증서를 추출하려면 다음을 수행하십시오.

추출 키

openssl pkey -in foo.pem -out foo.key

키를 추출하는 또 다른 방법 ...

openssl rsa -in foo.pem -out foo.key

CA Chain을 포함한 모든 인증서 추출

openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert

텍스트로 첫 번째 인증서를 DER로 추출

openssl x509 -in foo.pem -outform DER -out first-cert.der

7
openssl x509 -outform der -in C : \ Users \ Greg \ .ssh \ e360_stork_listener.pem -out C : \ Users \ Greg \ .ssh \ e360_stork_listener.crt 인증서 4294956672를로드 할 수 없음 : 오류 : 0906D06C : PEM 루틴 : PEM_read_bio : 시작 줄 없음 : pem_lib.c : 708 : 예상 :
신뢰할 수있는

5

0. 전제 조건 : openssl 설치해야합니다. Windows에서 Git Bash설치되어 있으면 시도하십시오! 대체 바이너리 는 여기에서 찾을 수 있습니다.

1. 추출 .key에서 .pem:

openssl pkey -in cert.pem -out cert.key

.crt에서 추출 .pem:

openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -out cert.crt

1

.crt는 인증서를 pem 형식으로 저장합니다. 따라서 .pem은 csr (인증서 서명 요청), 개인 키, 공개 키 또는 다른 인증서와 같은 다른 인증서를 가질 수 있지만 인증서 만 저장하는 경우 .crt와 동일합니다.

pem은 각 섹션 사이에 머리글과 바닥 글이있는 기본 64 인코딩 파일입니다.

특정 섹션을 추출하려면 다음과 같은 perl 스크립트가 완전히 유효하지만 openssl 명령 중 일부를 자유롭게 사용할 수 있습니다.

 perl -ne "\$n++ if /BEGIN/; print if \$n == 1 && /BEGIN/.../END/;" mydomain.pem

여기서 == 1은 필요한 섹션으로 변경할 수 있습니다. 분명히 필요한 머리글과 바닥 글을 정확히 알고 파일에 하나만 있으면 (일반적으로 인증서와 키만 보관하는 경우) 간단하게 만들 수 있습니다.

 perl -ne "print if /^-----BEGIN CERTIFICATE-----\$/.../END/;" mydomain.pem

0

사용하고 있기 때문에이 질문을 mkcert한 경우 .pem파일은 인증서이고 -key.pem파일은 키입니다.

(당신은 변환 할 필요가 없습니다, 그냥 실행하십시오 mkcert yourdomain.dev otherdomain.dev)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.