SSL(Secure Socket Layer)은 하이브리드 방식을 사용한다.
SSL는 하이브리드 방식(대칭키, 공개키)을 사용한다. 대칭키의 경우 키를 공유하는 과정에서 스니핑으로 인하여 키를 탈취당할 수 있다는 위험성이 존재하고, 공개키의 경우 암호화/복호화가 오래 걸린다는 문제가 있다.
하이브리드 방식은 송/수신 과정에서 암호화/복호화에 사용할 대칭키를 수신자의 공개키로 암호화하고, 수신자는 개인키를 사용하여 암호문을 복호화한다. 복호화하여 얻은 대칭키는 앞으로 있을 통신에서 데이터를 암호화 및 복호화 할 때 사용된다.
HTTPS 프로토콜을 사용하기 위해서는 SSL 인증서를 발급받아야 한다.
서버가 CA로부터 SSL 인증서를 발급받았다는 것의 의미는 CA로부터 신뢰할 수 있는 사이트임을 인증하게 되는 것이다.
CA로부터 SSL 인증서를 발급받는 과정은 다음과 같다.
- 서버는 CA로 CSR(Certificate Signing Request)를 전송한다.
- CSR에는 서버의 도메인, 서버의 공개키 등이 포함된다.
- CA는 CSR에 담긴 도메인 주소가 서버의 소유인지 검증한다.
- 이메일 검증을 사용하면 도메인 소유자 이메일로 확인이 가능하다.
- CA는 CSR에 담긴 데이터를 기반으로 SSL 인증서를 발급한다.
- 이 인증서에는 발급 대상(issued), 발급 대상의 공개키, 발급 대상의 지문, 발급자(issuer), 발급자의 서명이 포함되어 있다
- 지문 : 서버의 공개키를 해시 알고리즘(ex.SHA256)으로 해싱하여 얻은 해시 값
- 서명 : 생성된 해시 값에 CA의 개인키로 암호화한 것
- 이 인증서에는 발급 대상(issued), 발급 대상의 공개키, 발급 대상의 지문, 발급자(issuer), 발급자의 서명이 포함되어 있다
- 발급된 SSL 인증서는 서버로 전송된다.
브라우저가 서버에 발급된 SSL 인증서를 검증하는 과정은 다음과 같다.
- 서버에서 브라우저로 SSL 인증서를 전달한다.
- 브라우저는 CA의 공개키를 사용하여 SSL 인증서에 담긴 CA의 서명을 복호화하여 해시 값을 얻어낸다.
- 브라우저는 SSL 인증서에 담긴 서버의 공개키를 해시 알고리즘(ex.SHA256)을 사용하여 해시 값을 생성한다.
- 2번과 3번에서 생성된 해시 값이 일치하는지 검증하여 SSL 인증서가 위조되었는지 확인한다.
- 두 해시 값이 일치한다면 SSL 인증서가 위조되지 않았음을 의미한다.
Mac OS를 사용하는 경우 키체인(Key Chain)에 접근하면 미리 등록되어 있는 여러 개의 CA 기관들이 존재한다. 이 CA의 상세 정보를 확인하면 해당 CA의 공개키가 포함되어 있는 것을 확인할 수 있다. 이 공개키는 2번에서 설명한 CA 공개키로 사용되어 SSL 인증서에 담긴 서명을 복호화하는 데 사용된다.
아래는 tistory.com 도메인에 SSL 인증서를 발급한 Root CA 인증서 정보이다.
HTTPS 프로토콜에서 브라우저와 서버가 통신하는 과정
- 브라우저는 SSL 인증서 검증이 완료되었다면, 이 인증서에 담긴 서버의 공개키를 추출한다.
- 브라우저는 서버와 통신하는 데 사용할 대칭키를 생성하고, 이 대칭키를 서버의 공개키로 암호화한다.
- 암호화된 데이터를 서버로 전송한다.
- 서버는 서버의 개인키를 사용하여 암호화된 데이터를 복호화하여 브라우저의 대칭키를 얻는다.
- 앞으로 브라우저와 서버가 통신할 때 해당 대칭키를 사용하여 암호화 및 복호화를 수행한다.
인증서 체인 방식(Certificate Chain)
브라우저에서 서버로부터 전달받은 SSL 인증서를 확인하면 체인 방식으로 이루어져 있다. 체인 방식이란 SSL 인증서를 발급한 CA가 한 개가 아닌 여러 개로 존재하는 것을 의미한다.
- Root CA (최상위 CA) : Root CA의 인증서에는 자체 서명(Self-Signed)이 되어있다.
- Intermediate CA (하위 CA) : Intermediate CA의 인증서에는 Root CA의 서명이 포함되어 있다. 이는 Root CA로부터 인증받은 CA 기관임을 의미한다.
- Server Certificate (서버 인증서) : SSL 인증서에는 Intermediate CA의 서명이 포함되어 있다. 이는 Intermediate CA로부터 신뢰받는 사이트임을 의미한다.
즉, 상위 기관의 개인키로 하위 기관의 SSL 인증서를 서명하고, 서버에 존재하는 SSL 인증서는 하위 기관의 개인키로 서명되어 있는 형태이다. 이러한 방식을 인증서 체인(Certificate Chain)이라고 한다. 서버가 발급받은 SSL 인증서가 Root CA로부터 발급받은 것이 아니라면 인증서 체인 방식에 따라 하위 CA로부터 발급받은 인증서임을 의미한다.
tistory.com에 발급된 SSL 인증서에 대해서 알아보자.
이 도메인의 경우 3단계 체인으로 이루어져 있는데, tistory.com 도메인에 SSL 인증서를 발급한 CA 기관은 Thawte TLS RSA CA G1이다.
Thawte TLS RSA CA G1 기관에 SSL 인증서를 발급한 CA는 DigiCert Global Root G2이다. DigiCert Global Root G2의 상위 기관은 존재하지 않으므로, DigiCert Global Root G2가 Root CA임을 알 수 있다.
DigiCert Global Root G2 CA는 Thawte TLS RSA CA G1 CA가 신뢰할 수 있는 CA 기관임을 인증하였고, Thawte TLS RSA CA G1 CA는 tistory.com 도메인 주소가 신뢰할 수 있는 사이트임을 인증하였다. 인증했다는 의미는 개인키를 통해 SSL 인증서에 서명했다는 것을 의미한다.
앞서 설명했지만, Mac OS에서는 키체인에 미리 등록된 여러 개의 CA들이 존재한다. tistory.com 도메인에 SSL 인증서를 발급한 DigiCert Global Root G2 CA도 존재한다.
참고
https://babbab2.tistory.com/5
https://kdeon.tistory.com/132
https://cornswrold.tistory.com/409