인증서 및 키 파일 확장자 완벽 가이드: PEM, CRT, DER, PFX 등
Nginx나 Apache와 같은 웹 서버를 설정하거나, SSH 키를 관리하거나, 디지털 서명을 작업해 본 적이 있다면 .pem, .crt, .cer, .der, .p12, .pfx, .key, .csr 등 혼란스러운 파일 확장자들을 마주쳤을 것입니다.
이것들은 모두 같은 것일까요? 단순히 파일 이름만 바꾸면 될까요? 이 가이드에서는 이러한 확장자들의 미스터리를 풀고, 내부 구성을 설명하며, 효과적으로 사용하는 방법을 보여드립니다.
왜 이렇게 많은 확장자가 있나요?
혼란의 원인은 크게 두 가지입니다:
- 표준 (X.509): 공개 키 인증서의 국제 표준입니다.
- 인코딩: 인증서 데이터가 실제로 파일에 저장되는 방식 (Base64 ASCII 텍스트 vs. 이진법/Binary).
본질적으로 서로 다른 플랫폼(Windows vs. Linux), 서버(IIS vs. Nginx), 프로토콜(SSL/TLS vs. SSH vs. PGP)이 동일한 기본 암호화 정보를 저장하기 위해 역사적으로 서로 다른 방식을 선호해 왔기 때문입니다.
빠른 참조 표: 일반적인 인증서 및 키 확장자
| 확장자 | 형식 | 설명 | 일반적인 용도 |
|---|---|---|---|
.pem |
ASCII (Base64) | Privacy Enhanced Mail | 웹 서버 (Nginx, Apache), SSL/TLS 인증서, 개인 키 |
.crt, .cer |
ASCII 또는 Binary | 인증서 (Certificate) | 공개 인증서 전용 (개인 키 미포함) |
.der |
Binary | Distinguished Encoding Rules | Java 플랫폼, Windows (특정 CA 인증서에 자주 사용) |
.key |
ASCII 또는 Binary | 개인 키 (Private Key) | 공개 인증서에 대응하는 개인 키 |
.csr |
ASCII (Base64) | 인증서 서명 요청 (Certificate Signing Request) | 서명된 인증서를 요청하기 위해 CA에 보내는 파일 |
.p12, .pfx |
Binary | PKCS#12 아카이브 | 인증서와 개인 키를 암호로 보호된 하나의 파일로 묶은 것 |
.p7b, .p7c |
ASCII (Base64) | PKCS#7 / CMS | 인증서 체인 내보내기 (개인 키 미포함) |
.asc, .sig, .gpg |
ASCII 또는 Binary | PGP / OpenPGP | 디지털 서명, 암호화된 이메일 및 소프트웨어 검증 |
1. X.509 인증서 인코딩 ("빅 3")
PEM (Privacy Enhanced Mail) — .pem, .crt, .cer, .key
Linux 및 웹 서버에서 가장 흔히 볼 수 있는 형식입니다. ASCII(텍스트 기반) 형식으로, -----BEGIN CERTIFICATE-----와 같은 헤더로 시작하여 -----END CERTIFICATE-----로 끝납니다. 그 사이의 데이터는 Base64로 인코딩되어 있습니다.
- 장점: 사람이 읽을 수 있으며 구성 파일에 복사/붙여넣기가 쉽습니다.
- 확장자 사용:
.pem이 표준이지만, 기술적으로는 모두 PEM 형식이더라도 공개 인증서에는.crt나.cer을, 개인 키에는.key를 사용하는 경우가 많습니다.
DER (Distinguished Encoding Rules) — .der, .cer
PEM 파일의 이진(Binary) 버전입니다. 텍스트 편집기에서 열면 "깨진" 문자들로 보입니다.
- 장점: PEM보다 용량이 작습니다.
- 사용처: Java 환경, Windows 인증서 내보내기, 일부 하드웨어 보안 모듈(HSM)에서 일반적입니다.
PKCS#12 (Personal Information Exchange) — .p12, .pfx
보통 단일 인증서나 키만 담는 PEM 및 DER과 달리, PKCS#12는 아카이브 형식입니다. 인증서, 개인 키, 그리고 전체 CA 체인을 암호로 보호된 단일 파일에 저장할 수 있습니다.
- 사용처: Windows (IIS), Java (KeyStore), macOS 키체인의 표준 형식입니다.
- 참고:
.pfx는 이전 Microsoft 확장자이고.p12는 새로운 크로스 플랫폼 표준이지만, 기능적으로는 동일합니다.
2. 요청 및 메타데이터 확장자
CSR (Certificate Signing Request) — .csr
이것은 인증서 자체가 아닙니다. 공개 키와 조직 정보를 포함하여 서버에서 생성한 요청서이며, 인증 기관(Let's Encrypt, DigiCert 등)에 보냅니다. CA는 이에 서명하여 .crt 또는 .pem 파일을 다시 보내줍니다.
PKCS#7 / CMS — .p7b, .p7c
이 형식은 주로 "인증서 체인"을 공유하는 데 사용됩니다. 본인의 인증서와 함께 중간(Intermediate) 및 루트(Root) CA 인증서가 포함될 수 있습니다. 개인 키는 절대 포함되지 않습니다. CA에서 "Windows" 또는 "IIS" 형식으로 인증서를 다운로드할 때 자주 볼 수 있습니다.
3. PGP 및 GPG 확장자
소프트웨어 다운로드(Linux 커널 또는 인기 라이브러리 등)를 검증할 때 다음과 같은 파일들을 볼 수 있습니다:
.asc: ASCII-armored PGP 파일 (텍스트 기반 서명)..sig,.gpg: 이진 PGP 서명 또는 키..pub: 보통 PGP 공개 키를 나타내는 데 사용됩니다.
4. 파일 열기 및 검증 방법
Linux / macOS / Windows (OpenSSL 사용 시)
OpenSSL은 이러한 파일들을 다루는 맥가이버 칼과 같습니다. 몇 가지 일반적인 명령은 다음과 같습니다:
PEM 파일(공개 인증서) 보기:
openssl x509 -in certificate.crt -text -noout
DER 파일(이진) 보기:
openssl x509 -in certificate.der -inform der -text -noout
PKCS#12 (.p12 / .pfx) 파일 보기:
openssl pkcs12 -info -in key-and-cert.p12
5. 형식 간 변환
플랫폼에 따라 특정 형식이 필요한 경우가 많습니다. 변환 방법은 다음과 같습니다:
PEM을 DER로:
openssl x509 -in cert.pem -outform der -out cert.der
DER을 PEM으로:
openssl x509 -in cert.der -inform der -outform pem -out cert.pem
PEM을 PFX (.p12)로: (인증서와 개인 키를 합쳐야 함)
openssl pkcs12 -export -out certificate.pfx -inkey private.key -in certificate.crt -certfile CA-chain.crt
자주 묻는 질문 (FAQ)
Q: .pem 파일의 이름을 .crt로 그냥 바꿔도 되나요?
A: 많은 경우 그렇습니다. 대부분의 웹 서버(예: Nginx)는 확장자보다는 파일 내부의 "BEGIN CERTIFICATE" 헤더를 확인합니다. 하지만 플랫폼이 이진 .der 파일을 기대하는데 이름만 바꾼 .pem 파일을 제공하면 실패하게 됩니다.
Q: .p12와 .pfx의 차이점은 무엇인가요?
A: 기능적 차이는 없습니다. .pfx는 Microsoft의 독자적인 확장자였고, .p12는 업계 표준(PKCS#12)입니다. 둘 다 인증서와 개인 키를 암호로 보호하여 담는 컨테이너 역할을 합니다.
Q: .p7b 파일에서 왜 개인 키를 볼 수 없나요?
A: .p7b에서 사용하는 PKCS#7 표준은 인증서 배포를 위해 특별히 설계되었으며 개인 키 저장을 지원하지 않기 때문입니다. 개인 키를 함께 묶어야 한다면 PKCS#12(.p12)를 사용해야 합니다.
Q: .key 파일은 항상 개인 키인가요?
A: 대개 그렇지만 항상 그런 것은 아닙니다. .key가 개인 키의 관례적인 확장자이긴 하지만, 일부 업체에서는 공개 키나 라이선스 파일에 사용하기도 합니다. 항상 내용을 확인하세요(예: -----BEGIN PRIVATE KEY-----).
Tool3M 관련 도구
- 해시 생성기: SHA-256을 사용하여 다운로드한 인증서 파일의 무결성을 확인하세요.
- SSL/TLS 인증서 가이드: 기본 보안 프로토콜에 대해 자세히 알아보세요.