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