본문 바로가기
Networking/일반

TLS & HTTPS (2) CA

by 비어원 2022. 7. 16.
728x90

이전 글에서는 TLS의 기반이 되는 Asymmentric encryption을 사용하는 통신이 어떻게 이루어지는지, Asymmentric encryption을 사용하는 통신이 어떤 면에서 안전한지와 문제점에 대하여 다뤄보았다.

 

2022.07.15 - [Networking/일반] - TLS & HTTPS (1)

 

TLS & HTTPS (1)

TLS TLS(Transport Layer Security)는 컴퓨터 네트워크에 통신 보안을 제공하기 위해 설계된 암호 프로토콜이다. 이 프로토콜은 TCP/IP 네트워크를 사용하는 통신에 적용되며 통신 과정에서 Transport Layer 종

beer1.tistory.com

 

이전 글에서 Asymmentric encryption 통신의 문제점으로는 서버가 실제로 신뢰할 수 있는 서버인지 판단이 불가능하다는 점이다. 그래서 TLS에서는 Asymmentric encryption 통신을 하되 서버가 실제로 신뢰할 수 있는 서버인지 검증하는 단계도 거친다. 그러면 어떻게 TLS가 서버를 신뢰할 수 있는 서버로 간주하는지에 대하여 알아보자.

 

인증서 (Certificate)

실제로는 서버에서 클라이언트에게 public key를 건넬 때 key를 포함하여 Certificate(인증서) 를 같이 보낸다. 이 인증서는 디지털 포멧이며 인증서에는 해당 서버의 public key에 인증서가 발급된 곳, 해당 서버의 위치 등에 대한 정보가 들어있다. 인증서의 내용은 다음과 같다.

특히 인증서에는 인증서를 발급한 주체도 있다. 이 정보는 Subject에 있으며, 이 정보를 통하여 인증서를 건넨 서버가 신뢰할 수 있는 서버인지 검증한다.

 

클라이언트는 전달받은 인증서의 CN 정보에 있는 도메인 주소와 Subject Alternative Name(SAN)에 있는 DNS 주소와 현재 통신하려는 서버의 URL이 일치하는지 확인한다. 하지만 인증서를 openssl 을 통해 아무나 만들 수 있기 때문에 CN과 Subject Alternative Name이 실제 웹서버의 url과 일치하더라도 신뢰할 수 있을지 모른다. (CN, SAN을 일치시켜 만들면 됨) 그래서 해당 인증서를 발행한 기관의 정보도 인증서에 포함시킨다.

 

CA: 인증서 발급 기관

서버가 자체적으로 인증서를 만들 수 있기 때문에 인증서 만으로는 서버가 신뢰할 수 있는 서버인지는 모른다. 그래서 인증서에 해당 인증서를 발행한 기관의 정보도 인증서에 포함시킨다. 이를 서명이라고 한다. 그리고 인증서를 신뢰할 수 있는 인증서로 서명해주는 기관이 있다. 이를 CA(Certificate Authorities) 라고 한다. 이 기관은 서버와 별개로 제 3자이며 잘 알려진 CA는 대표적으로 Symantec, Global sign, digicert 등이 있다.

 

물론 개인이 인증서를 발행함과 동시에 개인이 인증서를 서명할 수 있다. 이렇게 서면된 인증서는 Self signed certificate 라고 한다. 이 인증서를 받은 클라이언트는 기본적으로 웹 브라우저에서 안전하지 않은 인증서로 간주한다. 웹 브라우저는 잘 알려진 CA에서 서명하지 않은 인증서를 받으면 안전하지 않은 인증서로 간주한다.

 

CSR: 인증서 서명 요청

그래서 서비스를 오픈하면 당연히 잘 알려진 CA에 서명을 받아야 한다. 서명되지 않은 인증서를 서명해달라고 요청하는 것을 CSR(Certificate Signing Request)이라고 한다. 서버는 인증서를 서명받기 위해 CSR을 작성하여 CA기관에 제출한 다음 CA는 인증서를 서명하여 요청한 서버에게 전달한다. 과정으로는 아래와 같다.

 

1. 서버는 Public key와 웹사이트의 도메인 이름을 사용하여 인증서 서명 요청(Certificate Signing Request; CSR)을 생성한다. openssl 명령어로 CSR을 생성할 수 있다.

$ openssl req -new -key server.key -out server.csr \ 
    -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=mydomain.com"

 

2. CA는 CSR의 세부정보를 확인하고 확인이 완료되었다면 인증서에 서명하여 다시 서버에게 전달한다.

3. 서버는 브라우저가 신뢰한 인증서를 받아서 사용한다.

 

브라우저는 어떤 CA를 신뢰할까?

Symantec을 포함한 여러 CA 기관들은 자신의 key pair를 가지고 있다. 그리고 대표적인 CA 기관의 Public key는 웹 브라우저에 내장되어 있다. 그리고 웹 브라우저는 CA의 public key를 사용하여 인증서가 실제로 해당 기관에 서명한 것인지 확인한다.

 

하지만, 이렇게는 회사나 조직 내에서 비공개로 호스팅된 사이트를 확인할 수는 없다. (보안상의 이슈로 외부로 노출시키지 않아서 개인적으로 서명해야 하는 서버의 경우?) 이 때는 자신의 private CA를 호스팅 할 수 있다. 회사 내에서 내부적으로 배포할 수 있는 서비스 및 CA 서버의 비공개 제품이 있다. 그리고 internal CA 서버의 public key를 설치하여 웹 브라우저에 내장시키고 조직 내에서 해당 CA를 신뢰하게 할 수 있다.

 

 

728x90

'Networking > 일반' 카테고리의 다른 글

TLS & HTTPS (1)  (0) 2022.07.15

댓글