공인 인증 기관, CA(Certificate Authority)
공인 인증 기관(CA)은 인증 정책을 수립하고, 인증서 발급과 관리 역할을 하며 다른 CA와 상호 인증을 제공한다. 다시 풀어서 설명하자면, CA에서는 개인키와 공개키 쌍을 만들고, 개인키를 자신이 만들었다고 인증서를 발행하게 된다.
즉, Private key를 보증하기 위해 쌍이 되는 Public key, 그리고 인증기관이 정식으로 발행했다는 것을 알리기 위한 공인 인증 기관의 전자 서명이 인증서에 들어있다.그런데 이때 인증서를 작성하는 인증기관마다 상이하면 인증서의 내용을 이해하는데 문제가 있을 것이다. 이러한 인증서들의 표준이 되는 규칙이 있어야 하는데, 현재 가장 널리 사용되는 PKI의 표준이 x509이다.
PKI란?
PKI-공개키기반구조(Public Key Infrastructure)는 기본적으로 인터넷과 같이 안전이 보장되지 않은 공개된 망 사용자들이 한쌍의 공개키와 개인키를 사용함으로써, 안전하게 데이터를 교환할 수 있게 한다.
x509 규칙을 따르는 CA의 항목들
x509 규칙을 따르는 인증서에는 어떤 내용들이 들어가는지 살펴보도록 하자.
위의 필수항목에서 언급한 DN 형식은 다음 항목들로 구성된다.
이렇게 소유자와 발급자에 대한 정보를 인증서 안에 표기하게 되어있다.
인증서를 생성하게 되면 크게 두 가지 형식으로 인증서가 저장되게 된다. base64로 인코딩 되어 저장하는 형식을 PEM, 바이너리 형식으로 저장되는 형식을 DER이라고 한다.
그러면 이제 인증서 안에 뭐가 들어있는지 알았으니 인증서는 어떻게 발급받는지 알아보도록 하자.
인증서
신뢰할 수 있는 인증서는 공인인증기관이 발급하게 된다. 공인인증기관은 철저하게 수직적인 구조를 기반으로 신뢰성이 상속되는 구조이다. 최상위 루트 기관이 서명한 하위 인증서가 있고, 이 하위인증서를 사용하는 하위 인증기관이 다시 서명하는 체인형태로 인증서가 발급된다.
이렇게 수직적인 구조로 인증받게 되는데 어떻게 인증서가 작동되어 인증이 되게 되는지 알아보도록 하자.
이 세상에는 무조건 신뢰할 수 있는 기관이 몇군데 존재한다. 최상위 인증기관(RootCA)이라고도 하며 가장 최상위의 인증서를 발급하는 기관이다. 위 네이버 예시의 DigiCert가 RootCA인 것이다.
이러한 RootCA의 인증서들은 일반적으로 웹브라우저에 미리 내장되어 있으며, 해당 인증서에 대응하는 공개키 또한 인증서 내부에 포함되어 있다. 그리고 암묵적으로 이 RootCA들은 신용할 수 있다! 를 서로 약속하고 RootCA들의 공개키로 복호화가 가능한 데이터는 RootCA의 꽁꽁 숨겨진 비밀키로 암호화되었기 때문에 신용할 수 있는 데이터라고 간주한다.
위의 네이버 예시와 같이 인증서는 대부분 계층구조로 되어있다. (보통 3계층)
RootCA가 DigiCert이고, 중간에 있는 DigiCert SHA2~CA도 인증기관이다. RootCA와 구분 짓기 위해 ICA(Intermidiate CA):중간인증기관이라고 부른다.
하지만 우리는 암묵적으로 RootCA들을 신뢰할 수 있다고 약속했지만 ICA에 대해서는 약속하지 않았다. 그런데 어떻게 ICA에서 발급받은 인증서를 신뢰할 수 있다고 할 수 있을까?
인증서 발급하기
인증서를 발급받는 과정은 다음과 같다. 위에서 언급했다시피, 우리는 이미 RootCA의 공개키로 복호화할 수 있는 데이터는 신뢰하기로 약속했다. B회사가 인증서 발급요청을 하게 되면, B회사 인증서해시값을 RootCA의 비밀키로 암호화하게 된다.
이렇게 하면 B회사의 인증서해시값은 RootCA의 공개키로 복호화가 가능할 것이고, 만약 복호화 시의 해시값과 인증서 내용물의 해시값이 상이하다면 B회사 인증서 내용물은 누군가에 의해 변조되었음을 의미한다.
즉, 상위기관의 공개키로 하위 기간의 인증서 해시값을 복호화함으로써 쉽게 변조 유무를 확인할 수 있기 때문에 하위기관을 신뢰할 수 있다고 간주할 수 있다.
이러한 원리를 Chain of Trust라고 부르며 ICA에서 발급받은 인증서도 신뢰할 수 있게 되는 근간이 된다.
정리하자면
x509란 현재 가장 널리 사용되는 PKI의 표준 규격을 의미한다.
참고 사이트
'프로그래밍 > 네트워크' 카테고리의 다른 글
HTTP란 무엇인가? (0) | 2024.10.08 |
---|---|
시리얼 통신(Serial Communication)이란 무엇인가? (0) | 2024.10.07 |
SSL 인증서 유효기간 확인 방법 (0) | 2024.09.20 |
SSL 인증서 종류에 대해서 알아보자 (1) | 2024.09.10 |
[::] 해당 IP 표기는 뭘까? IPv6 주소 표기법에 대해서 (0) | 2024.09.05 |
댓글