1. X.509 인증서란?
디지털 인증서는 공개키 기반 구조(PKI, Public Key Infrastructure)의 핵심 요소로 서버 및 클라이언트 인증, 데이터 암호화, 무결성 보장의 역할을 수행한다.
인증서가 위의 기능을 수행하려면 공개 키뿐만 아니라, 어느 인증 기관(CA, Certificate Authority)에서 발급한 것인지, 유효 기간이 지나진 않았는지, 사용된 공개 키 알고리즘이 무엇인지 등 다양한 정보가 수반되어야 한다. 공개 키와 더불어 이러한 필수 정보를 하나의 문서로 묶어 정의한 것이 'X.509 인증서'이며, 이는 ITU-T 표준으로 지정되어 있다.
X.509 인증서는 PKI의 발전과 함께 새로운 기능과 보안 요구사항을 충족시키기 위해 v1부터 v3까지 개정되어 왔다. 현재 사용되는 X.509 v3은 다양한 인증 요구사항을 반영할 수 있도록 확장 가능한 인증서 구조를 제공하며 널리 사용되고 있다.
이번 글을 통해 X.509 인증서가 어떤 구조로 이루어져 있으며, 어떤 정보가 포함되어 있는지 살펴본다.
2. X.509 인증서 전체 구조
정석대로 ASN.1의 구조적 표현으로 설명하기보다는 어떤 정보가 담겨있는지 쉽게 이해할 수 있도록 X.509 인증서 구조를 그려보면 다음과 같다.
X.509 Certificate
│
├─ TBSCertificate
├─ SignatureAlgorithm
└─ SignatureValue
X.509 인증서는 TBSCertificate, SignatureAlgorithm, SignatureValue로 구성된 복합 구조이다.
- TBSCertificate : X.509 인증서의 핵심 정보를 담고 있는 부분으로, 공개 키뿐만 아니라 CA 정보, 유효 기간, 서명 알고리즘 등 중요한 데이터를 포함한다. 이러한 데이터는 기본 필드와 확장 필드로 구분된다.
- SignatureAlgorithm : CA가 해당 인증서를 발급할 때 서명에 사용한 알고리즘이 OID 값으로 기재된다.
- SignatureValue : CA가 TBSCertificate에 대해 생성한 실제 서명 값이 포함된다.
※ 참고 : 객체 식별자 (OID, Object Identifier)
객체 식별자는 고유한 식별자를 제공하는 구조적인 데이터 형식이다. 특히 X.509 인증서에서는 알고리즘, 확장 필드 등 다양한 요소를 식별하기 위해 객체 식별자를 활용한다.
객체 식별자는 국제적으로 관리되는 기관에 의해 정의되고 등록된다. 객체 식별자는 계층적 구조로 구성되며, 고유하게 식별된다. 예를 들어 SignatureAlgorithm 중 '1.2.840.113549.1.1.11' 값이 기재되어 있다면, sha256WithRSAEncryption 서명 알고리즘을 사용한다는 의미이다.
다양한 OID에 대해 알고 싶다면 다음의 사이트를 참고하자.
3. 인증서 구조로 보는 인증서 생성 및 검증 과정
**CA**는 다음의 과정을 거쳐 인증서를 생성한다.
- CA는 사용자 A의 정보 및 A의 공개 키 등 인증서에 포함할 정보를 획득한다.
- CA는 ①의 정보를 기본 필드와 확장 필드로 구분한 후, ASN.1 문법을 사용하여 TBSCertificate를 생성한다.
- CA는 ②에서 생성한 TBSCertificate 데이터를 자신의 개인키로 서명한다.
- CA는 ③에서 사용한 서명 알고리즘을 SignatureAlgorithm에 OID로 값으로 기재한다.
- CA는 ③에서 생성된 서명 값을 ASN.1 문법을 사용하여 SignatureValue에 저장한다.
- CA는 TBSCertificate, SignatureAlgorithm, SignatureValue를 하나의 Sequence 구조로 조합하여 A의 인증서를 생성한다.
A의 인증서를 받은 **클라이언트(B)**는 다음 과정을 거쳐 인증서를 신뢰할 수 있는지 검증한다.
- B는 공개된 CA의 인증서와 A의 인증서를 모두 가지고 있다.
- B는 A의 인증서가 신뢰할 수 있는 CA에서 발급된 것인지 확인해야 한다.
- B는 CA의 인증서에서 공개 키를 추출한다.
- B는 A의 인증서의 SignatureAlgorithm을 확인하여 사용된 서명 알고리즘을 파악한다.
- B는 A의 인증서의 SignatureValue를 ③에서 획득한 CA의 공개 키로 복호화하여 데이터를 얻는다.
- ⑤에서 복호화한 결과가 A의 인증서의 TBSCertificate와 일치하는지 확인한다.
- 일치한다면 A의 인증서는 CA가 발급한 것이므로 신뢰할 수 있다.
- 일치하지 않는다면 인증서가 위변조 되었거나 신뢰할 수 없는 기관에서 발급된 것일 수 있다.
언급한 인증서 생성 및 검증 과정에 대해 수긍할 수 있다면 X.509 인증서 구조에 대해서 이해하고 있다고 말할 수 있다.
4. 기본 필드와 확장 필드
앞서 설명했듯이 TBSCertificate는 다양한 정보가 담겨 있으며, 이를 기본 필드(Mandatory Fields)와 확장 필드(Extension Fields)로 구분할 수 있다.
- 기본 필드
기본 필드는 모든 X.509 인증서에 반드시 포함되어야 하는 핵심 정보로 구성된다. 이러한 필드는 인증서의 신뢰성과 기본 기능을 보장하며, PKI에서 필수적인 요소로 작용한다. 또한, 인증서 간의 상호 운용성을 확보하기 위한 공통 구조로 설계되었다.
- 확장 필드
확장 필드는 기본 필드만으로는 충족되지 않는 특정한 요구 사항이나 추가적인 기능을 제공하기 위해 설계된 항목이다. 필수 요소는 아니며, 필요에 따라 추가될 수 있다.
글이 길어지는 관계로 기본 필드와 확장 필드에 대한 자세한 설명은 링크로 대체한다.
5. 예시 : OpenSSL 명령어로 인증서 구조 분석
OpenSSL 명령어를 실행하면 X.509 인증서의 내부 구조를 비롯하여 세부 내용을 확인할 수 있다. -text 옵션을 사용하면 사람이 읽을 수 있는 형태로 출력되니 실습해보자.
% openssl x509 -in cert.pem -text -noout
Certificate:
Data:
Version:
Serial Number:
Signature Algorithm:
Issuer:
Validity
Not Before:
Not After :
Subject:
Subject Public Key Info:
Public Key Algorithm:
Public-Key:
pub:
ASN1 OID:
NIST CURVE:
X509v3 extensions:
X509v3 Key Usage:
X509v3 Extended Key Usage:
X509v3 Basic Constraints:
CA:
X509v3 Subject Key Identifier:
X509v3 Authority Key Identifier:
Authority Information Access:
OCSP - URI:
CA Issuers - URI:
X509v3 Subject Alternative Name:
X509v3 Certificate Policies:
Policy:
X509v3 CRL Distribution Points:
Full Name:
URI:
Signature Algorithm:
Signature Value:
6. 마무리
이번 글을 정리하면 다음과 같다.
- X.509 인증서는 인증서에 어떠한 정보가 담겨야 하는지에 대한 ITU-T 표준이다.
- X.509 인증서의 구조는 크게 세 부분으로 나뉜다.
- TBSCertificate : 인증서 핵심 정보
- SignatureAlgorithm : 인증서 생성 시 서명 알고리즘
- SignatureValue : 서명값
- X.509 인증서 구조를 통하여 인증서가 어떻게 생성되는지, 생성 후 어떻게 검증될 수 있는지에 대해 살펴보았다.
- TBSCertificate는 기본 필드와 확장 필드로 구분할 수 있다. 해당 부분은 다음 글에서 추가 설명한다.
- OpenSSL 명령어 등을 활용하여 인증서 내부 구조를 확인할 수 있다.
'보안 > 인증서' 카테고리의 다른 글
인증 경로와 인증서 체인 (0) | 2025.03.04 |
---|---|
X.509 인증서 - 확장 필드 (0) | 2025.02.17 |
X.509 인증서 - 기본 필드 (0) | 2025.02.17 |
인증서와 ASN.1 (0) | 2025.01.21 |
인증서란? (0) | 2025.01.20 |