임베디드 관련 카테고리/프로토콜

SSL/TLS 인증서 파일 확장자 종류(pem, key, csr, crt) 및 사용 가이드

CBJH 2025. 3. 11. 15:57
728x90
반응형

1. SSL/TLS 인증서 관련 주요 파일 형식

https://learnwoo.com/ssl-tls-protocol/

1.1 PEM (Privacy Enhanced Mail)

  • 가장 일반적인 인증서 포맷
  • Base64로 인코딩된 텍스트 파일
  • 보통 .pem, .crt, .cer, .key 확장자 사용
  • -----BEGIN CERTIFICATE-----와 -----END CERTIFICATE----- 형태로 시작과 끝 표시
  • 인증서, 개인 키, 공개 키, 인증서 체인 등 다양한 정보를 포함할 수 있음

1.2 키 파일 (.key)

  • 개인 키(Private Key)가 저장된 파일
  • 서버에서만 보관하고 절대 외부에 노출되면 안 됨
  • SSL/TLS 연결 시 암호화 및 복호화에 사용
  • 내부적으로는 보통 PEM 형식 사용

1.3 CSR (Certificate Signing Request) 파일

  • 인증서 서명 요청 파일
  • 인증 기관(CA)에 인증서 발급을 요청할 때 제출하는 파일
  • 웹사이트 정보와 공개 키를 포함
  • .csr 확장자 사용

1.4 CRT (Certificate) 파일

  • 서명된 SSL/TLS 인증서 파일
  • CA에서 CSR을 검증하고 서명한 후 발급
  • 웹 서버에 설치하여 클라이언트에게 제공
  • .crt 또는 .cer 확장자 사용
  • 내부적으로는 보통 PEM 형식 사용

https://darutk.medium.com/illustrated-x-509-certificate-84aece2c5c2e

 

1.5 레포키(Repo Key)

  • 일반적으로 코드 저장소(Repository)에 접근하기 위한 인증 키
  • Git과 같은 버전 관리 시스템에서 사용
  • SSL 인증서와는 직접적인 관련이 적으나, 보안 통신에 사용되는 키의 한 종류

2. PEM 형식과 파일 확장자의 관계

2.1 PEM 형식의 특징

  • PEM은 파일 내용의 형식을 나타냄
  • .pem, .crt, .key 등은 파일의 용도를 나타내는 확장자

2.2 확장자별 주요 용도

  • .key: 주로 개인 키(Private Key)를 나타냄
  • .crt, .cer: 주로 인증서(Certificate)를 나타냄
  • .pem: 위의 어느 것이든 포함할 수 있음 (범용적인 확장자)

2.3 PEM 파일의 내용 구분

PEM 파일은 시작과 끝 태그로 내용을 구분합니다:

-----BEGIN CERTIFICATE----- 
(Base64 인코딩된 인증서 내용)
-----END CERTIFICATE----- 

-----BEGIN PRIVATE KEY----- 
(Base64 인코딩된 개인 키 내용)
-----END PRIVATE KEY----- 

이러한 태그를 통해 하나의 PEM 파일에 여러 종류의 데이터(인증서, 키, 체인 등)를 포함할 수 있습니다.

3. 인증서 발급 과정

  1. 개인 키(.key) 생성
  2. 개인 키를 이용해 CSR 파일 생성
  3. CSR 파일을 인증 기관(CA)에 제출
  4. CA가 검증 후 서명된 인증서(.crt) 발급
  5. 웹 서버에 개인 키(.key)와 인증서(.crt) 설치

4. 인증서 및 키 관련 작업 예시

4.1 인증서와 키 생성 (OpenSSL 사용)

# 개인 키 생성
openssl genrsa -out private.key 2048

# CSR 생성
openssl req -new -key private.key -out request.csr

# 자체 서명 인증서 생성 (테스트용)
openssl x509 -req -days 365 -in request.csr -signkey private.key -out certificate.crt

4.2 웹 서버 설정 (Nginx 예시)

server {
    listen 443 ssl;
    server_name example.com;
    
    ssl_certificate /path/to/certificate.crt;  # 인증서 파일
    ssl_certificate_key /path/to/private.key;  # 개인 키 파일
}

4.3 파일 변환 예시

# DER 형식에서 PEM 형식으로 인증서 변환
openssl x509 -inform der -in certificate.der -out certificate.pem

# PEM 형식의 인증서와 키를 하나의 파일로 결합
cat certificate.crt private.key > combined.pem

# PFX/PKCS#12 형식에서 PEM 형식으로 변환
openssl pkcs12 -in certificate.pfx -out certificate.pem -nodes

4.4 인증서 정보 확인

# 인증서 내용 확인
openssl x509 -in certificate.crt -text -noout

# 개인 키 확인
openssl rsa -in private.key -check

# 인증서 체인 확인
openssl verify -CAfile ca.crt certificate.crt

4.5 MQTT TLS 설정 예시

# Mosquitto 브로커 설정
listener 8883
protocol mqtt
cafile /path/to/ca.crt
certfile /path/to/server.crt
keyfile /path/to/server.key

# 또는 단일 PEM 파일 사용
certfile /path/to/combined.pem  # 인증서와 키가 모두 포함된 단일 파일

5. 주의사항

  • 개인 키(.key)는 절대 외부에 노출되어서는 안 됨
  • 프로덕션 환경에서는 인증서와 개인 키를 별도 파일로 분리하는 것이 보안상 권장됨
  • 모든 인증서 파일에 적절한 권한 설정이 필요 (일반적으로 600 또는 400)
  • 인증서 만료일을 주기적으로 확인하고 갱신 필요
  • 자체 서명 인증서는 테스트 환경에서만 사용 권장