홈으로 돌아가기

X.509 certificates: ASN.1 및 생성

이 기사는 ASN.1의 X.509 인증서 구조를 분석하고, 검증 유형(DV/OV/EV), 체인 계층을 설명합니다. openssl(ECC/RSA), keytool 및 certbot을 사용한 생성 명령어가 제공됩니다. 시니어 개발자를 위한: OID 확장, DER/BER 인코딩.

X.509 가이드: ASN.1부터 ECC 키까지
Advertisement 728x90

개발자를 위한 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)을 참조하세요. 인증서는 주로 공개 키 컨테이너로 사용되며, 도메인 소유권이나 신원을 확인하는 데도 쓰이지만 신뢰도는 다양합니다.

Google AdInline article slot

인증서 계층 구조와 유형

신뢰 체인은 루트 CA에서 최종 주체로 이어집니다.

  • 루트 CA: 발급자 = 주체, basicConstraints.cA = TRUE.
  • 중간 CA: 상위 CA가 서명, 체인 구축.
  • 최종 주체: 다른 인증서를 서명하지 않음; 최종 시스템에서 사용.

유효성 검사 수준별:

  • DV (도메인 검증): 이메일 또는 HTTP 챌린지를 통한 자동 도메인 확인.
  • OV (조직 검증): WHOIS, 등록 정보, 연락처 확인 — 며칠 소요.
  • EV (확장 검증): 완전한 사업체 감사, 독점 도메인 권한, 승인. 회사 이름이 포함된 녹색 바 표시. subject에 jurisdictionOfIncorporationCountryName, businessCategory, serialNumber 필요.

기타 유형:

Google AdInline article slot
  • 다중 도메인: 여러 도메인을 위한 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:

Google AdInline article slot
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

Advertisement 728x90

다음 읽기