인증&보안

TLS Certificates

iKay 2020. 8. 20. 23:43
반응형

Introduce

 

쿠버네티스 공부를 하다가 PKI라는 것을 접하게 됐다. 쿠버네티스는 서로서로 안전하게 통신하기 위해 PKI 구조를 사용한다.

 

PKI란 Public Key Infrastructure의 약자로 CA, Client, Server로 구성되어 있고 각각이 public key와 certificate둘을 이용해 데이터를 교환하게 위해 인증과정을 거친다.

 

TLS Certificates가 어떻게 구성되는지 살펴보기 전에 다음의 사전 지식이 요구된다.

 

Prior knowledge

Symmetric encryption

"대칭 암호화"라고 번역된다. 대표적으로 AES 방식이 있다. Asymmetric encryption 보다 암호화/복호화 속도가 빠르다. key 하나로 암호화/복호화를 하기 때문에 key가 노출 되어서는 되지 않는다. Asymmetric encryption보다 암호화/복호화 속도가 빠르다.

 

Asymmetric encryption

"비대칭 암호화"라고 불린다. 대표적으로 RSA 방식이 있다. 흔히 사용되는 ssh에 사용된다. ssh-keygen으로 key를 생성하면 id_rsa, id_rsa.pub 두 key 쌍이 생성되는데, id_rsa가 private key, id_rsa.pub가 public key로 사용된다. 하나의 key로 암호화, 한 쌍의 다른 key로 복호화를 한다. 그래서 public key는 노출되어도 무관하다. symmetric encryption보다 암호화/복호화 속도가 느리다.

 

Certificate

"인증서"라고 불린다. Certificates는 client가 server로 데이터를 전송할 때, server를 신뢰할 수 있는지를 보장하는 역할을 한다. Certificates에는 issuer, subject, domain name 등의 정보가 들어 있고, Server 측에서 발행한 asymmetric encryption의 public key를 포함한다. issued by(서명자)를 확인하면 certificate를 신뢰할 수 있다. CA에 의해 정상적으로 서명 됐으면 믿을 수 있지만 self signed 됐으면 의심해야 한다. 서명 하는 법은 .csr 파일을 만들어서 CA에 서명을 요청하면, .crt 파일을 얻을 수 있다.

 

CSR

Certificate Signing Request의 약자로 CA에 서명을 요청하는 것을 말한다. 파일 확장자는 .csr이다. .csr이 CA에 의해 서명 되기 위해서는 domain name이 내가 소유한 것과 일치해야 한다. 서명이 완료되면 .crt(certificate) 파일을 얻게 된다. 이 .crt로 server는 client에게 server리 신뢰할 수 있다는 것을 보장할 수 있다.

 

CA

Certificate Authority의 약자로 "인증기관"이라고 불린다. CA가 가진 private key로 certificate를 서명하고 client의 브라우저에 public key가 미리 설치되도록 해 certificate를 복호화 할 수 있게 해야 한다.

 

 

TLS Certificates 과정

본격적으로 TLS Certificates 과정을 살펴보자. 이 과정을 구성하는 것을 PKI 라고 보면 된다.

 

1. Server administrator는 Server에 대해 asymmetric encryption을 할 수 있는 public key와 private key를 생성한다. (open-ssl)

 

2. Certificate Signing Request(CSR) 과정을 거쳐서 server측 public key를 포함하는 certificate(.crt)를 발급한다. 이 때, CA는 CA의 private key로 certificate를 서명하고 CA의 public key는 미리 브라우저에 설치돼 있어야 한다.

 

3. Client가 Server로 데이터를 전송하기 전 Client는 Server의 Certificate가 CA에 의해 정상적으로 서명됐는지 확인한다. 서명, 내용 등이 위조 됐는지 여부는 CA에서 발급한 public key를 이용해 decrypt 하면 된다. 이 public key는 미리 브라우저에 설치되어 있어야 한다.

 

4. CA의 내용 중 server에서 발행한 public key가 있다. 이 public key를 이용해 client 측에서는 client에서 생성한 symmetric encryption key를 encrypt 해서 server로 전송하면 server에서는 private key로 decrypt할 수 있기 때문에 key를 안전하게 얻을 수 있다.

 

5. client 측에서 symmetric encryption key로 암호화 해서 데이터를 전송하면 server측에서 복호화 가능하기 때문에 이제부터 안전하게 데이터를 전송할 수 있다. 이 과정에서 encryted data가 제 3자에게 노출될 수 있지만 key를 갖고 있지 않기 때문에 내용을 들여야 볼 수 없다.

 

결론

우리가 모두에게 공개된(public) 장소인 웹 이라는 곳에서 온라인 뱅킹, 오픈 마켓 카드 결제를 안전하게 할 수 있는 이유는 PKI 기술 덕분이다. 기본적인 PKI가 무엇인지 특히 TLS Certification 과정을 살펴보았고 혹시, HTTPS의 전체적인 flow를 이해하고 싶다면 이 게시글을 참고하면 좋을 것 같다.

반응형

'인증&보안' 카테고리의 다른 글

OAuth 2.0  (0) 2020.08.11