Skip to content

Certificate_formats

SSL 인증서 형식은 다양하지만, 모두 ASN.1(Abstract Syntax Notation 1) 형식 데이터를 기계가 읽을 수 있는 방식으로 인코딩하는 방법의 차이임. x509 인증서도 이 형식으로 정의됨.

기본 개념:

  • ASN.1: 데이터 구조를 정의하는 표준 표기법
  • X.509: ASN.1로 정의된 공개키 인증서 표준
  • DER (Distinguished Encoding Rules): ASN.1을 바이너리로 인코딩하는 규칙
  • PEM: DER을 Base64로 인코딩하고 평문 앵커 라인 추가

.csr (Certificate Signing Request):

  • 인증서 서명 요청 파일
  • 실제 형식은 RFC 2986에 정의된 PKCS10
  • 인증 기관에 제출하기 위해 일부 애플리케이션에서 생성 가능
  • 요청된 인증서의 주체, 조직, 상태 등 주요 세부 정보와 서명할 공개 키 포함
  • CA에서 서명하고 인증서 반환
  • 반환된 인증서는 공개 인증서(공개 키 포함, 개인 키 미포함)이며 여러 형식 가능

.pem:

  • PEM 자체는 인증서가 아니라 데이터 인코딩 방식
  • X.509 인증서가 PEM으로 인코딩되는 대표적 데이터 유형
  • X.509 인증서(구조는 ASN.1로 정의)를 ASN.1 DER로 인코딩한 후 Base64 인코딩하고 평문 앵커 라인(BEGIN CERTIFICATE와 END CERTIFICATE) 사이에 배치
  • RFC 1422(1421~1424 시리즈의 일부)에 정의
  • 공개 인증서만 포함하거나(Apache 설치의 경우, CA 인증서 파일 /etc/ssl/certs), 공개 키, 개인 키, 루트 인증서를 포함한 전체 인증서 체인 포함 가능
  • PKCS10 형식을 PEM으로 변환할 수 있어 CSR도 인코딩 가능
  • 이름은 Privacy Enhanced Mail(PEM)에서 유래, 실패한 보안 이메일 방법이었지만 컨테이너 형식은 살아남음
  • x509 ASN.1 키의 base64 변환
  • RFC에 의해 관리, 텍스트 기반이므로 변환/전송 오류에 덜 취약해 오픈소스 소프트웨어에서 선호
  • 다양한 확장자 가능(.pem, .key, .cer, .cert 등)

.key:

  • 일반적으로 PEM 형식 파일로 특정 인증서의 개인 키만 포함
  • 관례적 이름일 뿐 표준화된 이름 아님
  • Apache 설치에서 /etc/ssl/private에 자주 위치
  • 파일 권한이 매우 중요하며, 잘못 설정되면 일부 프로그램에서 인증서 로드 거부

.pkcs12 .pfx .p12:

  • RSA의 PKCS(Public-Key Cryptography Standards)에서 정의
  • ”12” 변형은 Microsoft에서 향상시켰으며 나중에 RFC 7292로 제출
  • 공개 및 개인 인증서 쌍을 모두 포함하는 비밀번호 보호 컨테이너 형식
  • .pem 파일과 달리 완전히 암호화됨
  • 평문 PEM 형식보다 향상된 보안 제공
  • 개인 키 및 인증서 체인 자료 포함 가능
  • Windows 시스템에서 선호
  • OpenSSL로 공개 및 개인 키를 포함한 .pem 파일로 변환 가능: openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes
  • openssl로 PEM 형식으로 자유롭게 변환 가능

.der:

  • ASN.1 구문을 바이너리로 인코딩하는 방법
  • .pem 파일은 Base64로 인코딩된 .der 파일
  • PEM의 상위 형식, base64 인코딩된 PEM 파일의 바이너리 버전으로 생각하면 유용
  • OpenSSL로 .pem으로 변환 가능: openssl x509 -inform der -in to-convert.der -out converted.pem
  • Windows에서 인증서 파일로 인식
  • Windows는 기본적으로 다른 확장자를 가진 .DER 형식 파일로 인증서 내보냄
  • Windows 외부에서는 일반적으로 많이 사용 안됨

.cert .cer .crt:

  • 다른 확장자를 가진 .pem(또는 드물게 .der) 형식 파일
  • Windows Explorer에서 인증서로 인식됨 (.pem은 인식 안됨)

.p7b .keystore:

  • RFC 2315에 PKCS 번호 7로 정의
  • Windows에서 인증서 교환에 사용되는 형식
  • Java에서 기본적으로 이해하며 종종 .keystore 확장자 사용
  • .pem 스타일 인증서와 달리 인증 경로 인증서를 포함하는 정의된 방법 있음
  • Java에서 사용하고 Windows에서 지원하는 개방형 표준
  • 개인 키 자료 미포함

.crl:

  • 인증서 폐기 목록(Certificate Revocation List)
  • 인증 기관에서 만료 전 인증서를 무효화하는 방법으로 생성
  • CA 웹사이트에서 다운로드 가능

요약:

인증서와 구성 요소를 제시하는 네 가지 주요 방법:

  • PEM: RFC에 의해 관리, 텍스트 기반이므로 변환/전송 오류에 덜 취약, 오픈소스 소프트웨어에서 선호, 다양한 확장자 가능
  • PKCS7: Java에서 사용하고 Windows에서 지원하는 개방형 표준, 개인 키 자료 미포함
  • PKCS12: Microsoft 비공개 표준이었으나 나중에 RFC로 정의, 평문 PEM 형식보다 향상된 보안 제공, 개인 키 및 인증서 체인 자료 포함 가능, Windows 시스템에서 선호, openssl로 PEM 형식으로 자유롭게 변환 가능
  • DER: PEM의 상위 형식, base64 인코딩된 PEM 파일의 바이너리 버전, Windows 외부에서는 일반적으로 많이 사용 안됨

참고: