X.509
From IT위키
- 인증서 표기 공식 표준
X.509 인증서
구분 | 설명 |
---|---|
버전 | X.509 인증서 형식의 버전으로, 현재 v1-v3까지 있음 |
일련번호 | CA에서 인증서를 발행할 때 마다 할당되는 유일한 번호 |
알고리즘 식별자 | CA가 사용한 서명 알고리즘의 식별자 |
발행자 | 인증서를 발행한 CA의 이름 |
유효 개시 시간 | 인증서가 유효한 최초 시간 |
유효 만기 시간 | 인증서가 유효한 마지막 시간 |
주체 | DN(Distinguished Name). 사람뿐만 아니라 서버도 해당 |
주체 공개키 | 암호용 또는 서명용 공개키, 키가 사용될 알고리즘의 종류, 키 길이 등 정보로 구성 |
알고리즘 | 공개키 알고리즘의 OID |
공개키 | 주체의 공개키 값 |
서명값 | CA의 서명 값 |
X.509 버전별 추가사항
- 버전 2에서 추가된 영역
- 인증 기관 고유 식별자 : 한 주체에 대해 둘 이상의 인증기관으로부터 인증서가 발급된 경우, 인증기관 구분
- 주체 고유 식별자 : 주체를 식별하는 값, 예를 들어 같은 회사에 동명이인이 있는 경우 구분하기 위해 사용
- 버전 3에서 추가된 영역
- 확장 키 사용 : Key usage 항목으로 표시할 수 없는 세부적인 추가용도를 OID 형태로 표시. TLS 웹 서버 인증용, TLS 웹 클라이언트 인증용, 코드 서명용, 전자 우편용, IPSec 용 등을 지시
- 인증기관 키 식별자 : 하나의 인증기관이 여러 개의 비밀키로 인증서를 발급한 경우, 서명 검증용 공개키를 식별하기 위해 사용. SHA-1해시 값인 KeyIdentifier, 발행기관 이름, 일련 번호로 구성
- 주체 키 식별자 : 한 주체가 여러 키 쌍에 대해 발급받은 인증서를 가지고 있을 때, 인증서에 포함된 공개키를 구별하는데 사용
- 키 용도 : 해당 공개키가 암호용인지 서명용인지를 해당 비트로 표시
- 비밀키 사용기간 : 인증서의 유효기간과 서명용 비밀키의 사용시간이 다를 때 사용
- CRL 배포 지점 : 폐기한 인증서의 리스트가 저장되어있는 곳의 URL
- 주체 대체 이름 : DNS 이름, IP 주소, 메일 주소, 커버로스 이름 등 주체 이름에 대한 또 다른 이름
- 발행자 대체 이름 : CA의 또 다른 이름
- 기본 제한 : {CA 플래그, pathLenConstraint로 구성}
- 기관 정보 액세스 : 인증기관이 제공하는 인증서 관련 서비스에 접근할 수 있는 URL이나 프로토콜 관련 정보
- 주체 정보 액세스 : 인증서 주체가 제공할 수 있는 정보와 서비스에 접근하는 방법 제공, 주로 CA의 루트 인증서에 사용
키 종류 및 용도
- digitalSignature : keyCertSign, cRLSign을 제외한 서명용도의 공개키
- nonRepudiation : 부인방지를 위한 서명용 공개키
- keyEncipherment : 공유 비밀키를 암호화할 때 사용하는 공개키
- dataEncipherment : 데이터 암호용 공개키
- keyAgreement : 키 분배 프로토콜에 사용할 공개키
- keyCertSign : 루트 인증서의 서명용 공개키
- CRLSign : CRL 서명용 공개키
- encipheronly : keyAgreement 비트가 1일 때, 암호 전용 공개키 임을 지시
- dncipheronly : keyAgreement 비트가 1일 때, 복호 전용 공개키 임을 지시
인증서 내용 예시
PEM 형태
인증서는 일반적으로 PEM 포맷으로 전달된다. 자세한 내용은 TLS 인증서 포맷 참고
-----BEGIN CERTIFICATE----- MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== -----END CERTIFICATE-----
Base64로 인코딩된 바이너리이며, 디코딩 및 파싱을 하면 아래와 같이 나온다. 디코더(예시)는 온라인에서 쉽게 찾을 수 있다.
파싱 결과
참고로 이 인증서는 AWS에서 발행한 루트 인증서이며, 일반적인 서버 인증서는 이것보다 내용이 많다. (확장 필드들을 더 많이 쓴다.)