SSL 인증서 파일 종류 이해하기 : pem, pfx, jks, der 차이

ssl 인증서 파일은 단일 확장자가 아닌 pem, pfx, jks, der, crt, cer, csr, key … 처럼 여러 확장자가 사용됩니다. 그래서 어떤 상황에서 각 파일을 구분해서 써야하는 건지 혼란스럽습니다. 이 글에선 ssl 인증서 파일의 종류와 차이에 대해 설명하겠습니다.

SSL 인증서 파일 내용

SSL 인증서는 개인키(Private Key), 인증서(Certificate), 공개키(Public Key) 정보로 구성됩니다.

큰 틀에서 보면 어떤 형식, 어떤 확장자의 인증서 파일인지에 관계 없이 이 정보 중 일부 또는 모두가 포함되어 있고 그걸 SSL 인증서 파일이라고 부른다. 라고 이해하고 출발하면 됩니다.

인증서 파일이 바이너리인지, 인코딩된 텍스트인지 같은 형식의 차이가 있을 뿐이고 본질은 같습니다.

SSL 인증서 파일 종류

파일의 ‘형식’과 ‘확장자’는 다르다는 걸 먼저 인지해야 합니다. 형식이 본질이고 확장자는 그냥 이름입니다. 예를 들어 .exe 파일도 .txt로 바꿀 수 있는 거고 .txt 파일도 .sql 이나 .java로 바꿀 수 있는 것처럼요.

인증서 파일도 다양한 확장자가 있지만 중요한 건 형식이고 확장자는 ‘이 파일이 어떤 형식의 파일이다’라는 걸 표시하기 위한 수단입니다. 제 생각엔 여기서부터 혼란이 오는 거 같습니다. 이 내용은 아래서 좀 더 설명하겠습니다.

PEM 형식

base64로 인코딩된 텍스트 파일 형식입니다. pem 형식 파일은 편집기로 열어보면 인코딩된 텍스트를 직접 볼 수 있습니다.

물론 인코딩되어 있기 때문에 바로 자세한 내용을 알아볼 순 없지만 주석을 보고 ‘아 여기 certificate 정보가 있구나, private key 정보가 있구나’ 정도를 바로 인지할 수 있습니다.

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----

pem 형식 파일 확장자는 .pem .crt .cer .key 를 사용합니다. 여기서 형식과 확장자를 혼동해서 헷갈릴 수 있는 부분을 짚어보겠습니다.

pem 형식은 주로 nginx, apache 같은 웹서버에 사용됩니다. nginx ssl 적용 시엔 certificate 파일과 key 파일 두 개가 필요합니다. certificate 정보와 private key 정보를 구분해서 각 파일로 저장하기 때문입니다.

.key 파일에 private key 정보가 있습니다. 그런데 domain_key.pem 처럼 파일명에 key라고 써 있는데 확장자는 pem인 경우가 있습니다. 그럼 ‘이건 key 파일이 아닌가?’라고 헷갈릴 수 있습니다. 하지만 그건 key 파일이 맞는 겁니다. 편집기로 열어보면 —–BEGIN PRIVATE KEY—– 라인이 있는 걸 볼 수 있을 거에요.

즉 같은 형식 파일의 같은 내용이라면 확장자가 .key 인것과 .pem 인 것의 차이는 없는 겁니다.

PKCS#12 형식

.pfx .p12 확장자를 가진 형식의 바이너리 파일입니다. 편집기로는 내용을 확인할 수 없습니다. 이 형식은 개인키, 인증서 정보를 모두 하나의 파일에 저장합니다. 이 형식은 jks 형식으로 변환할 수도 있습니다. 윈도우 환경에서 주로 사용됩니다.

JKS 형식

jks도 바이너리 파일입니다. 확장자는 .jks 입니다. 개인키, 인증서 정보를 모두 하나의 파일에 저장합니다. tomcat, jetty, weblogic, websphere 등의 WAS로 구동하는 자바 애플리케이션에 주로 사용됩니다. 아무래도 시중에 자바 애플리케이션이 가장 많을테니 앞단에 프록시 서버를 두지 않는 구성에선 jks 형식이 제일 빈번하게 사용되지 않을까 싶네요.

der 형식

바이너리 형식의 파일입니다. 저도 이 형식으로 ssl 인증서를 적용해보진 않았는데 오래된 구형 시스템을 제외하고는 흔히 사용되는 형식은 아니라고 합니다.

SSL 루트 인증서와 CA 이해하기

SSL 인증서 체인 이해하기

SSL 인증서가 맞나 TLS 인증서가 맞나?

JVM에 SSL 루트 인증서 추가 방법

댓글 남기기