PEM 파일을 CRT로 변환하는 완벽 가이드

SSL 인증서 관리하다가 파일 형식 때문에 막힌 적 있으신가요? PEM과 CRT 파일 형식의 차이점부터 실제 변환 방법까지, 모든 것을 한 번에 해결하는 실용적인 가이드를 준비했습니다.

📋 목차

  1. PEM과 CRT 파일이란?
  2. 언제 파일 변환이 필요한가?
  3. OpenSSL을 이용한 변환 방법
  4. 실무에서 자주 사용하는 변환 패턴
  5. 변환 시 주의사항과 문제해결

PEM과 CRT 파일이란?

PEM 파일의 특징

PEM(Privacy-Enhanced Mail) 파일은 Base64로 인코딩된 텍스트 형식의 인증서입니다. 파일을 열어보면 -----BEGIN CERTIFICATE-----로 시작하고 -----END CERTIFICATE-----로 끝나는 구조를 가지고 있습니다.

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/heBjcOuMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV...
-----END CERTIFICATE-----

CRT 파일의 정체성

CRT 파일은 인증서를 담고 있는 컨테이너입니다. 내부적으로는 PEM 형식이나 DER(바이너리) 형식으로 저장될 수 있어서, 단순히 확장자만 다른 경우가 많습니다.

핵심 차이점 정리

  • PEM: 텍스트 형식, Base64 인코딩, 사람이 읽을 수 있음
  • CRT: 인증서 파일의 일반적인 확장자, 내부 형식은 PEM 또는 DER
  • 실제로는 대부분의 CRT 파일이 PEM 형식을 사용

언제 파일 변환이 필요한가?

웹서버 설정 시나리오

  • Apache: .crt 확장자를 선호
  • Nginx: .pem, .crt 모두 지원
  • IIS: .cer, .crt 형식 요구
  • Java Keystore: .jks 형식으로 별도 변환 필요

클라우드 서비스 요구사항

현대의 클라우드 환경에서는 각 서비스마다 선호하는 인증서 형식이 다릅니다:

  • AWS ELB: PEM 형식 필수
  • Google Cloud: PEM 또는 CRT 모두 지원
  • Azure: PFX, CER 형식 선호

OpenSSL을 이용한 변환 방법

기본 변환 명령어

1. PEM에서 CRT로 변환

# 기본 변환 (사실상 파일명만 변경)
openssl x509 -in certificate.pem -out certificate.crt

# 더 명확한 형식 지정
openssl x509 -inform PEM -in certificate.pem -outform PEM -out certificate.crt

2. 개인키 파일 변환

# RSA 개인키 변환
openssl rsa -in private.key -text -out private.pem

# 암호화된 개인키 변환
openssl rsa -in encrypted_private.key -out decrypted_private.pem

3. 체인 인증서 포함 변환

# 인증서 체인을 포함한 변환
cat certificate.pem intermediate.pem > certificate_chain.crt

실무 활용 변환 스크립트

웹서버 배포를 위한 일괄 변환 스크립트입니다:

#!/bin/bash
# SSL 인증서 변환 스크립트

echo "=== SSL 인증서 변환 시작 ==="

# 변수 설정
DOMAIN="example.com"
PEM_CERT="${DOMAIN}.pem"
KEY_FILE="${DOMAIN}.key"
OUTPUT_DIR="./converted"

# 출력 디렉토리 생성
mkdir -p $OUTPUT_DIR

# 1. PEM을 CRT로 변환
if [ -f "$PEM_CERT" ]; then
    openssl x509 -in $PEM_CERT -out $OUTPUT_DIR/${DOMAIN}.crt
    echo "✅ CRT 파일 생성 완료: $OUTPUT_DIR/${DOMAIN}.crt"
else
    echo "❌ PEM 파일을 찾을 수 없습니다: $PEM_CERT"
fi

# 2. 키 파일 변환
if [ -f "$KEY_FILE" ]; then
    openssl rsa -in $KEY_FILE -out $OUTPUT_DIR/${DOMAIN}_private.pem
    echo "✅ 개인키 변환 완료: $OUTPUT_DIR/${DOMAIN}_private.pem"
fi

echo "=== 변환 작업 완료 ==="

실무에서 자주 사용하는 변환 패턴

Apache 웹서버용 변환

Apache에서 SSL을 설정할 때 필요한 파일들을 준비하는 과정입니다:

# 1. 인증서 파일 변환
openssl x509 -in domain.pem -out domain.crt

# 2. 중간 인증서 결합
cat domain.crt intermediate.crt > domain_bundle.crt

# 3. Apache 설정에서 사용할 형식 확인
openssl x509 -in domain_bundle.crt -text -noout

Nginx 웹서버용 준비

Nginx는 PEM 형식을 기본으로 사용하지만, 체인 인증서를 하나의 파일로 결합해야 합니다:

# 인증서와 체인을 하나로 결합
cat domain.pem intermediate.pem > domain_fullchain.pem

# 개인키는 별도 보관
cp private.key domain.key

인증서 정보 확인 명령어

변환 후 인증서가 올바르게 생성되었는지 확인하는 방법입니다:

# 인증서 정보 확인
openssl x509 -in certificate.crt -text -noout

# 인증서 유효기간 확인
openssl x509 -in certificate.crt -dates -noout

# 인증서와 개인키 매칭 확인
openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in private.key | openssl md5

변환 시 주의사항과 문제해결

자주 발생하는 오류들

1. 파일 형식 오류

# 오류: unable to load certificate
# 해결: 파일 형식 명시적 지정
openssl x509 -inform PEM -in certificate.pem -outform PEM -out certificate.crt

2. 권한 문제

# 개인키 파일 권한 설정
chmod 600 private.key

# 인증서 파일 권한 설정  
chmod 644 certificate.crt

3. 암호화된 개인키 처리

# 암호 제거
openssl rsa -in encrypted_private.key -out unencrypted_private.key

# 암호 추가
openssl rsa -aes256 -in private.key -out encrypted_private.key

파일 무결성 검증

변환된 파일이 손상되지 않았는지 확인하는 체크리스트입니다:

  1. 인증서 구조 확인
   openssl x509 -in certificate.crt -text -noout | head -10
  1. 인증서-키 매칭 검증
   # 두 해시값이 동일해야 함
   openssl x509 -noout -modulus -in certificate.crt | openssl md5
   openssl rsa -noout -modulus -in private.key | openssl md5
  1. 인증서 체인 검증
   openssl verify -CAfile ca-bundle.crt certificate.crt

보안 모범 사례

  • 개인키 파일: 600 권한으로 설정하여 소유자만 읽기 가능
  • 인증서 파일: 644 권한으로 설정하여 모든 사용자가 읽기 가능
  • 백업 보관: 원본 파일은 안전한 위치에 별도 백업
  • 만료일 관리: 인증서 만료 30일 전 갱신 알림 설정

마무리

PEM과 CRT 파일 변환은 웹서버 관리자라면 반드시 알아야 할 기본 스킬입니다. OpenSSL 명령어를 활용하면 복잡해 보이는 인증서 관리도 간단하게 처리할 수 있습니다.

특히 클라우드 환경에서 SSL 인증서를 다룰 때는 각 서비스의 요구사항에 맞는 형식으로 변환하는 것이 중요합니다. 이 가이드의 명령어들을 참고하여 안전하고 효율적인 인증서 관리를 해보세요.

추가 참고 자료

💡 도움이 되셨다면 북마크 저장하시고, 동료 개발자분들과 공유해보세요!

댓글 남기기