Apache SSL 인증서를 위해 .CER를 .CRT로 변환해야합니까? 그렇다면 어떻게?


121

SSL로 Apache 2 서버를 설정해야합니다.

* .key 파일이 있지만 온라인에서 찾은 모든 문서, * .crt 파일이 지정되어 있으며 CA는 * .cer 파일 만 제공했습니다.

* .cer 파일은 * .crt와 동일합니까? 그렇지 않은 경우 CER을 CRT 형식으로 어떻게 변환 할 수 있습니까?


11
CERCRT확장은 아무 의미도 없습니다. 다른 PKI 공급 업체는 동일한 항목에 대해 다른 확장을 사용합니다. 파일이 바이너리 인 경우 ASN.1 / DER로 인코딩되었을 수 있습니다. 를 사용하여 사람이 읽을 수있는 파일이면 -----BEGIN CERTIFICATE-----PEM이 인코딩됩니다. 무엇을 가지고 있고 (DER 또는 PEM) 무엇이 필요합니까 (DER 또는 PEM)?
jww

답변:


106

암호화 인증서의 파일 확장자는 예상 한 것만 큼 표준화되지 않았습니다. Windows는 기본적으로 .crt파일을 두 번 클릭하는 것을 Windows 루트 인증서 저장소로 인증서를 가져 오기위한 요청으로 처리하지만 .cer파일을 인증서를보기위한 요청으로 처리합니다 . 따라서 Windows는 각 파일 유형을 두 번 클릭 할 때 발생하는 일에 대해 고유 한 다른 의미를 가지고 있다는 점에서 다릅니다.

그러나 두 번 클릭 할 때 Windows에서 처리하는 방식은 둘 사이의 유일한 차이점입니다. 두 확장 모두 공용 인증서가 포함되어 있음을 나타냅니다. 내가 본 모든 시스템 또는 구성 파일에서 다른 확장자 대신 하나의 확장자를 사용하도록 인증서 파일의 이름을 바꿀 수 있습니다. 그리고 Windows가 아닌 플랫폼 (및 Windows에서도)에서 사람들은 어떤 확장자를 사용하는지에 대해 특별히주의하지 않고 파일 내용이 정확하다면 둘 사이에 차이가 없기 때문에 두 가지를 상호 교환 적으로 취급합니다.

좀 더 혼란스럽게 만드는 것은 인증서 데이터를 파일에 저장하는 두 가지 표준 방법이 있다는 것입니다. 하나는 "이진"X.509 인코딩이고 다른 하나는 일반적으로 " -----BEGIN CERTIFICATE-----"로 시작하는 "텍스트"base64 인코딩입니다 . 이들은 동일한 데이터를 다른 방식으로 인코딩합니다. 대부분의 시스템은 두 가지 형식을 모두 허용하지만 필요한 경우 openssl 또는 다른 도구를 통해 하나를 다른 형식으로 변환 할 수 있습니다. 인증서 파일 내의 인코딩은 누군가가 파일에 부여한 확장자와는 무관합니다.


내 이해는 둘 다 X.509 인코딩이라는 것입니다. 달리 말하지는 않지만 위의 x.509를 비대칭 적으로 사용하면 독자에게 그렇지 않을 수 있습니다. 독자에게는이 두 가지 인코딩간에 인증서를 앞뒤로 변환 할 수 있다는 점에 주목할 가치가 있습니다.이 답변에서 언급했듯이 동일한 정보를 보유하고 있기 때문입니다. openssl x509 -inform 명령으로 다른 답변을 참조하십시오.
FreeText

55

문서 mod_ssl 에 따르면 :

SSLCertificateFile: 
   Name: SSLCertificateFile
   Description: Server PEM-encoded X.509 certificate file

인증서 파일은 PEM 인코딩 된 X.509 인증서 파일이어야합니다.

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

이렇게하면 신뢰할 수있는 루트 인증서를 방랑자 상자에 설치 하여 ( )에서 zscaler실행중인 SSL 인증서 오류를 해결할 수 있습니까? 나는 '다음 전환을 사용 심볼릭 링크를로 그들을 거라고 또한에 내용을 복사 프로비저닝하기 전에 파일을 여전히 메신저 얻기 에 오류 dev에 상자. vagrantwinvbox homesteadscp/etc/ssl/certsca-certificates.crtgoogle-recaptcha tls sslfile_get_contents
blamb

54

기본적으로 DER 및 Base64의 두 가지 CER 인증서 인코딩 유형이 있습니다. 유형 DER가 오류로드 인증서 (asn1 인코딩 루틴)를 반환 할 때 PEM을 시도하면 작동합니다.

openssl x509 -inform DER -in certificate.cer -out certificate.crt

openssl x509 -inform PEM -in certificate.cer -out certificate.crt


3
DER 형식은 내가 편집하려고 할 때 내 cer 파일이 바이너리처럼 보일 때 저에게 효과적이었습니다. 감사합니다!
Brad Parks

1
독자들에게 나는 openssl man 페이지가 유용하다는 것을 알았습니다. 어떤 명령이 무엇을했는지 (즉, 어떤 방식이 변환인지)은 나에게 모호했습니다. -inform 매개 변수는 입력 -in 파일의 형식을 지정합니다. 이는 직관적이지만 이미 약간 혼란 스러우면 명시 적으로 아는 것이 좋습니다. openssl.org/docs/manmaster/man1/openssl-x509.html
FreeText

32

PKCS # 7로 인코딩 된 인증서 데이터가 포함 된 .cer 파일이 있고이를 PEM으로 인코딩 된 인증서 데이터 (일반적으로 .crt 또는 .pem 파일)로 변환하려고한다고 가정합니다. 예를 들어 PKCS # 7로 인코딩 된 데이터가 포함 된 .cer 파일은 다음과 같습니다.

----- PKCS7 시작 -----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB + 6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+ bKhADEA
----- PKCS7 종료 -----

PEM 인증서 데이터는 다음과 같습니다.

----- 인증 시작 -----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
----- 인증서 종료 -----

.cer 파일 (PKCS # 7 데이터 포함)을 예상 할 수있는 PEM 데이터 ( BEGIN CERTIFICATE위 예제 의 블록 )로 변환하는 OpenSSL 명령이 있습니다 . certfile.cer라는 파일에서이 명령을 사용하여 PKCS # 7 데이터를 PEM 형식으로 강제 변환 할 수 있습니다.

openssl pkcs7 -text -in certfile.cer -print_certs -outform PEM -out certfile.pem

.cer 또는 .pem 파일에는 하나 이상의 인증서 (아마도 전체 인증서 체인)가 포함될 수 있습니다.


1
이 가정의 출처가 있다면 편리 할 것입니다. 나는 사람들이 .cer, .crt, .pem을 (아마도 틀리게) 사용한다고 생각하므로 진실의 근원을 가지고 오해를 바로 잡을 것입니다.
PhilT

30

CER 는 바이너리 형식의 X.509 인증서이며 DER로 인코딩됩니다.
CRT 는 텍스트 ( base-64 ) 인코딩으로 캡슐화 된 이진 X.509 인증서 입니다.

동일한 인코딩이 아닙니다.


13
이 대답은 틀 렸습니다. .CER 및 .CRT 모두 DER 또는 PEM (텍스트) 인코딩을 사용할 수 있습니다. 확장자 .pem 및 .der는 인코딩을 반영하지만 .cer 및 .crt는 그렇지 않습니다. 자세한 내용 .
eis

1
사실 그 반대 여야 합니다. 그러나 이러한 모든 확장 기능은 오랫동안 혼동되어 왔으므로 의존해서는 안됩니다.
Claudio Floreani 2017 년

16

.cer 파일을 .crt 파일로 변환하는 방법에 대한 질문에 대한 대답은 다음과 같습니다.

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt

5
이것은 나를 위해 일하지 않았습니다! 나는 사용 :openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59

이 오류 메시지가 나타납니다.unable to load PKCS7 object
friederbluemle

@friederbluemle이 답변을 확인 했습니까? serverfault.com/questions/417140/…
Alexander Presber

이것은 내 positiveSSL 인증서를 Azure에서 사용하기 위해 PKCS12로 변환 할 준비를하기 위해 수행해야하는 작업입니다.
Owen

16

나는 명령을 사용합니다.

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

그러나 CER는 DER로 인코딩 된 바이너리 형식의 X.509 인증서입니다. CRT는 텍스트 (base-64) 인코딩으로 캡슐화 된 이진 X.509 인증서입니다.

따라서 다음을 사용해야합니다.

openssl x509 -inform DER -in certificate.cer -out certificate.crt

그런 다음 인증서를 가져 오려면 :

CA를 디렉토리에 복사하십시오.

/usr/local/share/ca-certificates/

사용 명령 :

sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt

CA 저장소를 업데이트합니다.

sudo update-ca-certificates


5

cer 파일에 바이너리 형식이있는 경우 다음과 같이 변환해야합니다.

openssl x509 -inform DER -in YOUR_CERTIFICATE.cer -out YOUR_CERTIFICATE.crt

3

.cer 및 .crt 파일은 키 저장소로 가져 오는 한 교환 할 수 있어야합니다.

.cer 파일의 내용을 살펴보십시오. -----BEGIN CERTIFICATE-----줄 앞과 줄 뒤를 지우십시오 -----END CERTIFICATE-----. BEGIN / END 줄 사이에 Base64로 인코딩 된 항목이 많이 남게됩니다.

-----BEGIN CERTIFICATE-----
MIIDQTCCAqqgAwIBAgIJALQea21f1bVjMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
...
pfDACIDHTrwCk5OefMwArfEkSBo/
-----END CERTIFICATE-----

그런 다음 keytool을 사용하여 키 파일로 가져옵니다.

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer

저에게 도움이 된 것은 BASE-64 ENCODING에 대한 귀하의 의견이었습니다. 일반 인증서는 특수 인코딩이며 일반 텍스트를 읽을 수 없습니다. 감사.
DRapp 2011 년

-2

그냥 해

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt

8
이 라인이 정확히 무엇을하는지, 왜 정확히 그 매개 변수를 사용하는지 자세히 설명 하시겠습니까? 이 답변은 매우 짧으며 경험이 적은 사람들에게는 이해하기 어려울 수 있습니다.
GameDroids
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.