.key 및 .crt 파일에서 .pem 파일을 얻는 방법?


답변:


799

키는 이미 PEM 형식이지만 .crt 또는 .key로 이름이 지정되었습니다.

파일 내용이 시작되어 -----BEGIN텍스트 편집기에서 읽을 수있는 경우 :

이 파일은 이진 형식이 아닌 ASCII로 읽을 수있는 base64를 사용합니다. 인증서는 이미 PEM 형식입니다. 확장자를 .pem으로 변경하십시오.

파일이 이진 파일 인 경우 :

server.crt의 경우 다음을 사용합니다.

openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem

server.key의 경우 openssl rsa대신 사용하십시오 openssl x509.

server.key는 개인 키일 수 있으며 .crt 파일은 반환되고 서명 된 x509 인증서입니다.

웹 서버용이고 별도의 개인 및 공개 키로드를 지정할 수없는 경우 :

두 파일을 연결해야 할 수도 있습니다. 이를 위해 :

cat server.crt server.key > server.includesprivatekey.pem

이 파일로 유지하는 권한을 관리하는 데 도움이되도록 "includesprivatekey"를 사용하여 파일 이름을 지정하는 것이 좋습니다.


2
server.key의 형식을 확인하십시오. RSA라고 가정했습니다. 그러나 파일의 첫 번째 줄을 읽으면 아마 그렇게 말할 것입니다.
maxwellb 2016 년

10
cat server.crt server.key > server.pem공개 의견을 자체 줄에 올리지 않는 것은 단지 요구 사항 인 것처럼 보입니다. 택배 우편은 나에게 지옥을 줬다. 그리고 무엇이 잘못되고 있는지 알아내는 데 몇 시간이 걸렸다.
Graham Walters

1
감사합니다 Graham. 다른 도구는 파일을 다르게 생성하므로 궁극적으로 일부 확인이 좋습니다. 이 단계를 수행하면 예를 들어 파일이 줄 바꿈으로 끝났습니다.
maxwellb 2019

.crt 및 .key 파일을 연결하는 방법에 대한 팁이 매우 유용했습니다. stunnel3과 함께 인증서를 사용하고 싶었지만 키 파일을 지정하는 방법이 없었습니다. 연결을 사용하여 작동했습니다. (실제로 stunnel3은 Perl 프로그램이므로 키 파일을 읽을 수있는 옵션을 직접 추가했습니다. 그러나 나중에 연결이 작동하는 것을 보았으므로 stunnel3을 원래 코드로 되돌 렸습니다.)
LS

2
고양이 server.crt server.key > server.includesprivatekey.pem가 haproxy 1.5를 사용하는 SSL에 유용 하다고 말할 수 있습니다.
jimm101

224

AWS ELB를 위해이 작업을 수행해야했습니다. 대화 상자에 여러 번 구타당한 후에 마침내 이것이 나를 위해 일한 것입니다.

openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem

감사합니다 NCZ

편집 : @ floatingrock이 말합니다

AWS에서는 파일 이름 앞에을 붙여야합니다 file://. 따라서 다음과 같습니다.

 aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://path/to/server.crt --private-key file://path/to/private.key --path /cloudfront/static/

http://docs.aws.amazon.com/cli/latest/reference/iam/upload-server-certificate.html


19
AWS에서는 파일 이름 앞에을 붙여야합니다 file://. aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://~/Desktop/server.crt --private-key file://~/Desktop/private.key --path /cloudfront/static/
FloatingRock

1
두 번째 명령은 입력 내용이 pem 파일 인 경우 아무 것도하지 않는다고 가정하면 첫 번째 명령 만 필요합니다
Kristofer

대박! 이것은 나를 위해 잘 작동합니다! 코드 줄을 사용하여 .key 및 .crt 파일을 .pem으로 변환 한 다음 AWS 콘솔을 통해 업로드 (복사 / 붙여 넣기)했습니다. 감사!
Diego D

79

pem파일은 인증서와 개인 키가 포함되어 있습니다. 인증서 / 키의 형식에 따라 다르지만 다음과 같이 간단합니다.

cat server.crt server.key > server.pem

계속 받고 있습니다-bash: server.key.pem: Permission denied
tq

2
@tq : 그것은 당신이 그 파일을 읽거나 쓸 수 없다는 것을 의미합니다.
sth

@sth가 허락을 찾아 주셔서 감사합니다. 그러나 나는 sudo 명령으로 이것을하고 있었다
tq

8
@tq : cat server.crt server.key | sudo 티 server.pem
dimir

2
Wa tch O ut에없는 줄 바꿈에 대한 우리의 당신의 PEM 파일이 ----- END 인증서와 같은 라인을 왜곡했을 수도 ---------- ----- 인증서 BEGIN
볼프강 Fahl

24

또한 암호를 요구하지 않으려면 다음 명령을 실행해야합니다.

openssl rsa -in server.key -out server.key

9
당신이로 시작하는 파일을 원하는 경우 -----BEGIN RSA PRIVATE KEY-----와 하나가로 시작하는지 -----BEGIN ENCRYPTED PRIVATE KEY-----, 이것은 당신이 사용하고자하는 명령입니다.
Philippe Gerber

18

이것은 .pem 파일을 만드는 가장 좋은 옵션입니다

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts

4

내가 관찰 한 것은 openssl을 사용하여 인증서를 생성하면 crt 파일에서 텍스트 부분과 base64 인증서 부분을 모두 캡처합니다. 엄격한 pem 형식은 파일이 BEGIN 및 END로 시작하고 끝나야 한다고 말합니다 ( wiki 정의 ).

.pem – (개인 정보 보호 강화 된 메일) Base64로 인코딩 된 DER 인증서로 "----- BEGIN CERTIFICATE -----"와 "----- END CERTIFICATE -----"로 묶여 있습니다.

따라서 엄격한 pem 형식을 기대하는 일부 라이브러리 (Java에서 이것을 만났습니다)의 경우 생성 된 crt는 '유효하지 않은 pem 형식'으로서 유효성 검사에 실패합니다.

BEGIN / END CERTIFICATE를 사용하여 행을 복사하거나 grep하여 cert.pem 파일에 붙여 넣어도 작동합니다.

여기에 내가하는 일이 매우 깨끗하지는 않지만 저에게 효과적입니다. 기본적으로 BEGIN 줄에서 시작하는 텍스트를 필터링합니다.

grep -A 1000 BEGIN cert.crt> cert.pem


1
또 다른 옵션은 엄격하지 않은 인증서를 통해 전달하는 것 openssl x509입니다. 유효한 PEM 인증서를 출력합니다 : cat certificate.crt | openssl x509 > certificate.pem
T0xicCode

"BEGIN"에서 파일 끝까지 모든 것을 얻으려면 sed에 대한 작업입니다. 특히이 sed -n '/--BEGIN/,$p' cert.crt경우 와 같은 것을 원합니다 . "-n"은 기본적으로 아무 것도 인쇄하지 않도록 sed에 지시 한 다음, 범위 표현식 /--BEGIN/,$p명령 (print)을 포함하는 첫 번째 행 --BEGIN과 파일 끝 ( $) 사이의 행에 적용합니다 .
dannysauer

4

godaddy에서 app 엔진으로 이동하려고했습니다. 트릭은이 줄을 사용하여 무엇을 했습니까?

openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr

정확하게 그대로, 이름을 내 도메인 이름으로 바꾸십시오 (실제로 중요하지는 않습니다)

그리고 저는 www.name.com으로 일반적인 이름 / 조직과 관련된 모든 질문에 답변했습니다

그런 다음 csr을 열고 복사하여 go daddy에 붙여 넣은 다음 다운로드하여 압축을 풀고 터미널이있는 압축이 풀린 폴더로 이동하여 입력했습니다.

cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt

그런 다음 Trouble의 다음 지침을 Google Apps 맞춤 도메인 SSL과 함께 사용했습니다 .

openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem

privateKey.key 대신 name.unencrypted.priv.key를 사용하고 www_mydomain_com.crt 대신 name.crt를 사용하는 것을 제외하고는 그대로

그런 다음 "PEM으로 인코딩 된 X.509 인증서"에 대한 관리 콘솔에 public.pem을 업로드하고 "암호화되지 않은 PEM으로 인코딩 된 RSA 개인 키"에 대해 private.pem을 업로드했습니다.

.. 그리고 마침내 효과가있었습니다.


4

GoDaddy 인증서를 AWS에 업로드하려고 시도했지만 여러 번 실패했지만 결국 매우 간단했습니다. .pem으로 변환 할 필요가 없습니다. 체인 매개 변수에 GoDaddy 번들 인증서를 포함시켜야합니다. 예 :

aws iam upload-server-certificate
    --server-certificate-name mycert
    --certificate-body file://try2/40271b1b25236fd1.crt
    --private-key file://server.key
    --path /cloudfront/production/
    --certificate-chain file://try2/gdig2_bundle.crt

이전에 실패한 업로드를 삭제하려면 다음을 수행하십시오.

aws iam delete-server-certificate --server-certificate-name mypreviouscert

이것은 나를 위해 작동하지 않았다An error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
Adam Raudonis

4
  1. appleId로 임시 포털에서 인증서 다운로드
  2. 키 체인에서 인증서를 내보내고 이름 (Certificates.p12)을 지정하십시오.
  3. Certificates.p12 파일 위에 저장 한 터미널 및 goto 폴더를 열고
  4. 아래 명령을 실행하십시오.

    a) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes,

    비) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts

  5. .pem 파일 준비 "pushcert.pem".

0
  • 터미널을 엽니 다.
  • 인증서가있는 폴더로 이동하십시오.
  • 이름을 인증서로 바꾸어 아래 명령을 실행하십시오.

openssl pkcs12-YOUR_CERTIFICATE.p12-out YOUR_CERTIFICATE.pem -nodes -clcerts에서

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