1. 개요

지난 번에 PEM, DER 의 종류까지만 언급하고 끝났는데, 오늘 이어서 적어보려고 합니다.

키파일과 인증서는 PEM 혹은 DER 포맷으로 생성됩니다. 인증서를 다루는 주체 (일반적으로 웹 서버)에 따라 PEM 인증서를 DER 로 변경하여 적용하거나 반대의 경우가 있을 수도 있습니다.


2. PEM

Ascii Header 로 묶인 Base64 인코딩 DER 포맷으로 저장됩니다.

다음은 PEM 인증서를 생성하는 방법입니다.

$ openssl pkcs12 -in cert.pfx -nocerts -nodes -out cert.pem

PEM 인증서를 DER 로 바꾸는 방법입니다.

$ openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER

3. DER (Definite Encoding Rules)

Binary로 묶여 있으며,  ASN.1 DER 포맷으로 저장됩니다. 더욱 보편적으로 사용됩니다.

ASN.1 은 Abstract Syntax Notation One 입니다. 이것은 구현에 관게없이 단순히 표준을 정의하는 언어입니다. 다시 말해, 특정 표준, 인코딩 방법, 프로그래밍 언어, 하드웨어 플랫폼 등과는 무관하게 적용됩니다. ITU-T 권고안 X.209 및 X.690 에 정의되어 있습니다.

DER 인증서를 PEM 으로 바꾸는 방법입니다.

$ openssl x509 -in cert.der -inform DER -out cert.pem -outform PEM

4. 용도

client 인증서가 사용되는 용도는 크게 두가지입니다.

  • 인증서 로그인 (authentication)
  • 거래 내역에 대한 전자서명 (non-repudiation)

물론 두 경우 모두 서명 기능은 필요합니다.

인증서 로그인에 필요한 수준의 서명은 웸 브라우저에 내장되어 있습니다. (SSL 프로토콜의 일부라고 보면 됨) 이 때 이루어지는 서명은 SSL 서버가 전달하는 임의의 숫자를 client 가 본인 인증서의 private key 로 전자 서명한 후 서버에 인증서와 함께 전송하는 것입니다. 서버는 이를 받아 검증을 하고, 이상이 없으면 SSL client authenticated session 이 시작됩니다.

거래 내역에 대한 전자서명 기능은 웹 브라우저에는 없습니다. 거래의 내역을 서명 대상 문서로 정의하고, 그 문서에 전자 서명한 후 서버에 전송합니다. 인증서 로그인의 경우 임의의 숫자에 서명하지만, 거래 내역이라 함은 매우 다양한 상황을 가집니다. 따라서 웹 브라우저에 내장되기는 어렵습니다.