TIL

SSL 인증서 파일 정리 (.crt, .pem, .key, fullchain.pem 차이)

하얀잔디 2026. 5. 6. 16:56

SSL 설정하다 보면 파일 이름이 너무 많아서 헷갈림.

  • .crt
  • .pem
  • .key
  • fullchain.pem
  • privkey.pem
  • .csr
  • .pfx

대충 다 비슷해보이는데 역할이 다름.

 

핵심


실제로 HTTPS 서버 운영할 때 필요한 건 보통 이것뿐임.

  • 서버 인증서 (  이 안에 공개키가 들어가있음)
  • 개인키(private key) 

즉:

인증서 + 개인키
 

이 2개만 있으면 nginx/apache/k8s 대부분 구성 가능함.

 

 

[1. .key]

가장 중요함.

server.key
tls.key
privkey.pem
 

같은 이름으로 존재함.

이건 개인키(private key)임.

절대 외부 유출되면 안 됨.

nginx에서는 보통:

 
ssl_certificate_key /etc/ssl/tls.key;
 

처럼 사용함.


[2. .crt]

서버 인증서임.

server.crt
tls.crt
 

같은 형태.

브라우저가 서버 신뢰할 수 있는지 확인하는 인증서임.

nginx에서는:

 
ssl_certificate /etc/ssl/tls.crt;
 

처럼 사용함.


[3. .pem]

이건 파일 종류라기보다 포맷 개념에 가까움.

PEM = Base64 텍스트 인코딩 형식.

내용 보면 보통 이런 형태임.

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
 

또는:

-----BEGIN PRIVATE KEY-----
 

즉 .pem 안에는:

  • 인증서도 들어갈 수 있음
  • 개인키도 들어갈 수 있음
  • 체인 인증서도 들어갈 수 있음

확장자만 보고 역할 판단하면 안 됨.


[4. fullchain.pem]

Let's Encrypt 쓸 때 많이 봄.

이건:

서버 인증서 + 중간 인증서(intermediate CA)
 

를 합쳐놓은 파일임.

보통 nginx에서는 이걸 많이 사용함.

 
ssl_certificate /etc/letsencrypt/live/domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain/privkey.pem;
 

왜 필요하냐면,

브라우저가 인증서 신뢰 경로(chain)를 확인해야 하기 때문임.

요즘은 대부분 fullchain 사용함.


[5. privkey.pem]

이건 그냥 개인키 파일임.

실질적으로 .key랑 같은 역할.

privkey.pem == tls.key == server.key
 

느낌임.


[6. .csr]

인증서 발급 요청 파일.

Certificate Signing Request
 

약자임.

CA(인증기관)에 인증서 발급 요청할 때만 사용함.

운영 서버에서는 보통 안 씀.

생성 예시:

 
openssl req -new -newkey rsa:2048 -nodes \
-keyout server.key \
-out server.csr
 

 

 

최종 정리

 

 

.key 개인키
.crt 서버 인증서
.pem 인증서/키를 담는 포맷
fullchain.pem 서버 인증서 + 중간 인증서
privkey.pem 개인키
.csr 인증서 발급 요청 파일
.pfx .p12 인증서+키 묶음(Windows 계열 많이 사용)