인증서란 우리가 안전하게 서버를, priv key를 사용할 수 있도록 도와주는 중요한 보안 개념이다.
1. 기본 개념
인증서의 개념은 Android 키증명의 개넘에서도 보았듯 쉽게말하면 다음과 같다.
어떤 서버가 private key, public key를 가지고 있다고 하자. 개인 사용자는 해당 서버에 접속해서 서버의 private key로 sign등의 작업을 진행할 수 있을 것이다.
그런데 여기서 개인은 처음 연결하는 해당 서버의 private key가 안전한 인증된 키인지를 어떻게 믿을 수 있을까?
바로 이 때 사용하는 개념이 인증서이다. 서버는 priv key를 인증할 수 있는 인증서를 개인 사용자에게 제공하고 개인 사용자는 받은 인증서를 인증기관(CA)에 검증요청을하여 검증과정을 진행하고 priv key가 안전한 키임을 확인한다.
위 그림과 같이 서버에서 사용하느 Priv Key의 Public key쌍이 인증서 안에 들어있고 개인 사용자는 인증서를 CA를 통해서 검증한다.
2. 생성과 검증
그럼 위와 같은 인증서는 어떻게 만들어지고 어떻게 검증되는가
먼저 우리가 흔히 사용하는 인증서는 체인형태로 이루어져 있다.
인증서를 만들기 위해서는 위와 같이 또 다른 priv key를 활용한다.
그럼 여기서 또 하나의 의문이 생긴다. 인증서를 만들 때 사용한 PrivKey B는 어떻게 믿을 수 있는가?
그건 바로 또 PrivKey B를 검증할 수 있는 인증서 B가 존재하기 때문이다.
결과적으로 위와 같은 구조를 가지게 된다. 여기서 Root CA의 경우 항상 신뢰할 수 있는 기관으로 보통 정부기관이 해당 역할을 진행한다.
3. SSL/TLS
SSL/TLS에서도 인증서 내용이 사용된다. SSL/TLS 통신을 위해 Handshake과정을 진행하는데 이 때 인증서를 통한 일방향(필요에 따라서 양방향) 인증을 진행한다.
Handshake과정에서 처음 SSL/TLS통신 키를만들기위한 Spec 결정을위해 정보를 주고 받으며 Client가 Server가 인증된 서버인지 확인하는 과정이있다.
Server는 자신이 인증된 서버임을 입증하기위해 Server Certificate를 통해서 Certificate를 Client로 전달한다.
Client는 CA기관에 해당 Certificate를 보내어 verify하고 인증된 서버인지 확인한다.
CA에서 정상적으로 verify가 되면 Server가 인증할 수 있음을 Client는 확인하고 이후 과정(server public key로 SSL 통신을위한 대칭키를 암호화해서 전달함으로써 SSL통신을 위한 대칭키 교환)을 진행한다.
이 때 옵션에따라 Server에서 Certificate Request를하고 Client에서도 Certificate를 서버로보내서 양방향인증도 가능하다.
마지막으로 Server의 인증서가 Root CA까지 쭉쭉 타고올라갔는데 신뢰되지않은 인증기관이라면 어떻게 될것인가?
위와 같이 인증서가 올바르지 않다고 경고창이 발생할 것이다.
여기서 한가지 더 생각해보면 SSL/TLS를 하게되면 와이어샤크로 스니핑할 때 암호화되기 때문에 SSL/TLS를 하지못하도록 인증서를 조작해버리면 위와 같은 경고 창이 뜨게 될 것이다.
그리고 위 경고창을 무시하고 접속하면 평문으로 노출되어 ID/PW가 모두 노출되지 않을까 싶다.
- ref
https://kwonkyo.tistory.com/554
'Security > Security' 카테고리의 다른 글
[SSL] SSL 가시성 (0) | 2022.08.24 |
---|---|
[Cipher] Challenge & Response 인증 (0) | 2022.04.05 |