본문 바로가기
Miscellaneous

기기 간 보안 통신의 핵심인 SSL/TLS 과 X.509 인증서 (2)

강철지그·2014년 8월 26일·조회 3,781

1. 개요

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

키 파일과 인증서는 PEM 혹은 DER 포맷으로 생성됩니다. 인증서를 다루는 주체(일반적으로 웹 서버나 클라이언트)에 따라 PEM 인증서를 DER로 변환하여 적용하거나, 반대로 DER 인증서를 PEM으로 변환해야 하는 경우가 있습니다.


2. PEM

PEM은 ASCII 헤더로 묶인 Base64 인코딩 DER 포맷으로 저장됩니다. 텍스트 파일이기 때문에 편집기에서 열어 보면 -----BEGIN CERTIFICATE-----, -----END CERTIFICATE-----와 같은 구분자를 확인할 수 있습니다.

다음은 PKCS#12 형식의 cert.pfx 파일에서 PEM 형식의 개인키를 추출하는 방법입니다. -nocerts 옵션은 인증서를 제외하고 키만 내보내겠다는 뜻입니다.

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

PFX 파일에서 인증서만 PEM 형식으로 추출하려면 다음처럼 -nokeys 옵션을 사용합니다.

$ openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem

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

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

변환이 제대로 되었는지 확인하려면 다음처럼 인증서 내용을 출력해 볼 수 있습니다.

$ openssl x509 -in cert.pem -noout -text
$ openssl x509 -in cert.der -inform DER -noout -text

3. DER (Distinguished Encoding Rules)

DER은 바이너리 형식이며, ASN.1 DER 포맷으로 저장됩니다. 사람이 바로 읽기 쉬운 PEM과 달리 파일 내용을 텍스트 편집기로 열어도 의미 있는 문자열이 보이지 않는 경우가 많습니다.

ASN.1은 Abstract Syntax Notation One의 약자입니다. 이것은 구현에 관계없이 데이터 구조를 정의하기 위한 표기법입니다. 다시 말해 특정 인코딩 방법, 프로그래밍 언어, 하드웨어 플랫폼 등과는 무관하게 적용됩니다. DER은 ASN.1 데이터를 표현하는 인코딩 규칙 중 하나이며, ITU-T 권고안 X.690에 정의되어 있습니다.

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

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

4. 용도

클라이언트 인증서가 사용되는 용도는 크게 두 가지입니다.

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

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

인증서 로그인

인증서 로그인에 필요한 수준의 서명은 웹 브라우저에 내장되어 있습니다. 과거 표현으로는 SSL, 현재는 일반적으로 TLS 프로토콜의 일부라고 보면 됩니다. 이때 이루어지는 서명은 서버가 전달하는 임의의 숫자나 핸드셰이크 데이터를 클라이언트가 본인 인증서의 private key로 전자서명한 후, 서버에 인증서와 함께 전송하는 방식입니다. 서버는 이를 받아 검증하고, 이상이 없으면 client authenticated session이 시작됩니다.

거래 내역에 대한 전자서명

거래 내역에 대한 전자서명 기능은 웹 브라우저의 기본 기능만으로는 일반화하기 어렵습니다. 거래의 내역을 서명 대상 문서로 정의하고, 그 문서에 전자서명한 후 서버에 전송해야 하기 때문입니다. 인증서 로그인의 경우 서버가 보낸 임의의 값 또는 핸드셰이크 데이터에 서명하지만, 거래 내역은 서비스마다 형식과 의미가 매우 다양합니다. 따라서 웹 브라우저에 공통 기능으로 내장되기는 어렵습니다.

관련 글

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.