X.509 인증서란
X.509 인증서는 공개키 기반 구조(PKI, Public Key Infrastructure)에서 사용되는 표준화된 인증서 형식입니다. 주로 SSL/TLS, 전자서명, 암호화 이메일, VPN 등에서 신원 확인과 데이터 암호화를 위해 사용됩니다.
핵심 목적은:
- 공개키가 특정 엔티티(예: 사용자, 서버, 조직)에 속함을 증명
- 제3자(CA, 인증기관)를 통해 그 신뢰성을 보증
즉, 클라이언트가 서버에 연결할 때, 서버가 제공하는 X.509 인증서를 통해 서버의 신원을 확인하고, 교환하는 공개키가 신뢰할 수 있는지를 검증합니다.
X.509 인증서의 구조
인증서는 ASN.1 (Abstract Syntax Notation One)로 정의되고 DER 또는 PEM 형식으로 인코딩됩니다. 주요 필드는 아래와 같습니다:
1. 기본 필드
| 필드명 | 설명 |
| Version | 인증서 버전(v1, v2, v3) 현재 v3가 표준 |
| Serial Number | CA가 발생한 고유 인증서 일련번호 |
| Signature Algorithm | 인증서 서명에 사용된 알고리즘 (예 : SHA256withRSA) |
| Issuer | 인증서를 발행한 기관(CA)이름 |
| Validity Period | 인증서의 유효기간 (Not Before ~ Not After) |
| Subject | 인증서 소유자 (예: 도메인, 사용자, 조직) |
| Subject Public Key Info | 공개키 정보 및 알고리즘 (예: RSA, ECDSA) |
2. 서명 필드
| 필드명 | 설명 |
| Signature | CA가 인증서 내용에 대해 생성한 디지털 서명 |
| Signature Algorithm | 서명 생성에 사용된 알고리즘(위와 동일) |
이 서명을 통해 클라이언트는 인증서의 위조 여부를 검증할 수 있습니다.
3. 확장 필드 (v3 Extensions)
버전 3에서 확장 필드를 통해 다양한 기능이 추가됩니다:
| 확장 필드 | 설명 |
| Key Usage | 공개키 사용 목적 (예 : Digital Signature, Key Encipherment) |
| Extended Key Usage | 추가용도 (예: TLS 서버 인증, 클라이언트인증, 코드 서명) |
| Subject Alternative Name(SAN) | 추가 식별자 (예: 여러 도메인 이름, 이메일, IP 주소) |
| Basic Constraints | CA 여부(CA인증서인지 여부와 경로 길이 제한) |
| CRL Distribution Point | 인증서 폐기 목록(CRL)위치 |
| Authority Key Identifier | 상위 CA의 키 식별자 |
| Subject Key Identifier | 이 인증서의 키 식별자 |
CRL(Certificate Revocation List)란?
CRL은 더 이상 유효하지 않은 인증서 목록입니다.
CA(인증기관)가 발급한 인증서 중에서 특정 이유로 폐기(revoke)된 것들을 기록하고,
신뢰할 수 없는 인증서를 식별하기 위해 배포하는 리스트입니다.
인증서 예시 (PEM 형식)
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKP3...
-----END CERTIFICATE-----
이 파일을 base64로 디코딩하면 ASN.1로 인코딩된 바이너리 데이터가 나오고, 각 필드가 순서대로 들어 있습니다.
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
12:34:56:78:9a:bc:de:f0:12:34:56:78:9a:bc:de:f0
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=Example CA, CN=Example Root CA
Validity
Not Before: May 1 00:00:00 2025 GMT
Not After : May 1 23:59:59 2026 GMT
Subject: C=US, O=Example Corp, CN=www.example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:b1:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:
cd:ef:01:23:45:67:89:ab:cd:ef:01:23:45:67:89:
ab:cd:ef:01:23:45:67:89:ab:cd:ef:01:23:45:67:
89:ab:cd:ef:01:23:45:67:89:ab:cd:ef:01:23:45:
...
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Alternative Name:
DNS:www.example.com, DNS:example.com
Authority Information Access:
OCSP - URI:http://ocsp.exampleca.com
CA Issuers - URI:http://crt.exampleca.com/ExampleCA.crt
X509v3 Authority Key Identifier:
keyid:12:34:56:78:9A:BC:DE:F0:12:34:56:78:9A:BC:DE:F0
X509v3 Subject Key Identifier:
12:34:56:78:9A:BC:DE:F0:12:34:56:78:9A:BC:DE:F0
Signature Algorithm: sha256WithRSAEncryption
a1:b2:c3:d4:e5:f6:01:23:45:67:89:ab:cd:ef:01:23:
45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef:01:23:
...
PEM과 DER 형식 인증서의 차이
| 구분 | PEM | DER |
| 형식 | Base64로 인코딩된 텍스트 + 헤더/푸터 포함 | 바이너리(순수 ASN.1 인코딩) |
| 확장자 | .pem, .crt, .cer | .der, .cer |
| 사용 예 | 주로 웹서버, 텍스트 기반 시스템 | 주로 Windows, Java 시스템, 바이너리 처리 |
| 내용 | Base64 디코딩하면 DER 내용과 동일 | DER 바이너리 자체 |
X.509 신뢰 체계
- 루트 CA → 중간 CA → 최종 엔티티 인증서로 이어지는 체인이 있습니다.
- 클라이언트(예: 브라우저)는 루트 CA의 공개키를 신뢰하고, 그로부터 서명된 하위 인증서를 따라 내려오며 최종 서버 인증서까지 신뢰성을 검증합니다.
OpenSSL을 사용한 인증서 생성 방법
1. 개인키 생성
openssl genrsa -out server.key 2048
2. CSR(Certificate Signing Request) 생성
openssl req -new -key server.key -out server.csr
실행하면 여러 질문이 발생합니다.
- Country Name(국가코드, 예: KR)
- State or Province Name(도/시)
- Locality Name(구/군)
- Organization Name(회사명)
- Organizational Unit Name(부서)
- Common Name(도메인 명, 예: www.example.com)
- Email Address
3. 인증서 발급
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
3-1 (선택) CA를 통한 서명
- CA용 개인 키 및 자체 서명 루트 인증서 생성
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
- CA가 CSR을 서명
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256
4. 인증서 확인(PEM)
openssl x509 -in server.crt -outform DER -out server.der
4-1 DER 인증서인 경우
openssl x509 -in server.der -inform DER -text -noout'정보보호' 카테고리의 다른 글
| linux chmod 명령어 사용방법과 특수권한(setuid, setgid, sticky bit) (0) | 2025.05.11 |
|---|---|
| XXE Injection의 개념과 방어 방법 (0) | 2025.05.10 |
| 가상사설망 VPN의 종류 IPsecVPN, SSLVPN (0) | 2025.05.07 |
| SSRF(Server-Side Request Forgery)의 개념, 그리고 CSRF와의 차이 (0) | 2025.05.06 |
| Buffer Overflow의 개념과 예방방법 (0) | 2025.05.05 |