개발자를 위한 X.509 인증서: 구조, 유형 및 생성 방법
X.509 인증서는 공개 키 기반 구조(PKI)의 핵심으로, 공개 키와 주체 정보를 담고 있습니다. 이 표준은 X.500 DAP에서 유래했으며, 현재는 LDAP로 대부분 대체되었습니다. 모든 구조는 데이터 직렬화를 위한 메타언어인 ASN.1로 정의되며, X.690 또는 XER의 BER, CER, DER 규칙에 따라 인코딩됩니다.
기본 TBSCertificate 구조:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING
}
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL
}
ASN.1에서 SEQUENCE는 C 언어의 struct와 유사합니다. 구문 세부 사항은 X.680(2008)을 참조하세요. 인증서는 주로 공개 키 컨테이너로 사용되며, 도메인 소유권이나 신원을 확인하는 데도 쓰이지만 신뢰도는 다양합니다.
인증서 계층 구조와 유형
신뢰 체인은 루트 CA에서 최종 주체로 이어집니다.
- 루트 CA: 발급자 = 주체, basicConstraints.cA = TRUE.
- 중간 CA: 상위 CA가 서명, 체인 구축.
- 최종 주체: 다른 인증서를 서명하지 않음; 최종 시스템에서 사용.
유효성 검사 수준별:
- DV (도메인 검증): 이메일 또는 HTTP 챌린지를 통한 자동 도메인 확인.
- OV (조직 검증): WHOIS, 등록 정보, 연락처 확인 — 며칠 소요.
- EV (확장 검증): 완전한 사업체 감사, 독점 도메인 권한, 승인. 회사 이름이 포함된 녹색 바 표시. subject에 jurisdictionOfIncorporationCountryName, businessCategory, serialNumber 필요.
기타 유형:
- 다중 도메인: 여러 도메인을 위한 SAN (subjectAltName).
- 와일드카드: 서브도메인을 위한 CN=*.example.com.
- 자격 인증서: RFC 3739에 따른 개인 인증서로 givenName, dateOfBirth, countryOfCitizenship 포함.
인증서 생성
ECC를 사용한 자체 서명 인증서
타원 곡선 암호(ECC)는 CPU 효율성과 키 크기에서 RSA를 앞서지만, TLS 1.2 미만 지원은 다양합니다.
secp521r1 개인 키 생성:
openssl ecparam -name secp521r1 -genkey -param_enc explicit -out private-key.pem
SHA256 CSR:
openssl req -new -sha256 -key private-key.pem -out server.csr -days 730
자체 서명:
openssl x509 -req -sha256 -days 365 -in server.csr -signkey private-key.pem -out public.crt
검사:
openssl x509 -text -noout -in public.crt
도움말: openssl -help, openssl x509 -help.
Java keytool 사용
RSA 2048:
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
PKCS12 변환:
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype pkcs12
출력에 SubjectKeyIdentifier (OID 2.5.29.14, RFC 5280 비중요) 포함.
Let's Encrypt (DV)
certbot 설치 후 인증서 발급:
sudo certbot certonly --standalone -d example.com -d www.example.com
(Gentoo: sudo emerge certbot; Debian: sudo apt-get install certbot -t stretch-backports; Fedora: sudo dnf install certbot).
확장 기능과 분석
인증서는 식별을 위해 OID 사용: subjectKeyIdentifier ::= KeyIdentifier. 전체 분석은 openssl x509 -text. 체인은 루트 → 중간 → 리프(최종)로 신뢰 구축.
핵심 요약:
- X.509는 ASN.1 사용: struct 같은 SEQUENCE, DER/BER 인코딩.
- 유형: 검증별 DV/OV/EV, 유연성 위한 와일드카드/SAN.
- 생성: ECC/RSA openssl, JKS/PKCS12 keytool, Let's Encrypt certbot.
- 체인: 루트 (cA=TRUE) → 중간 → 최종 주체.
체인 디버그: openssl s_client -connect host:443 -showcerts. X.680/690, RFC 5280/3739 등의 표준이 PKI 상호 운용성을 보장합니다.
— Editorial Team
아직 댓글이 없습니다.