HTTPS (HTTP over SSL)
HTTPS(HyperText Transfer Protocol Secure)는 HTTP 프로토콜에 암호화 프로토콜을 사용하여 통신을 암호화한 HTTP의 보안 버전이다. HTTPS는 데이터 전송의 보안을 강화하기 위해 사용한다. 모든 웹 사이트에 HTTPS가 권장되지만, 특히 로그인 자격 증명이 필요한 웹사이트는 HTTPS를 사용해야 한다.
우리가 접속하는 웹사이트가 https://~ 로 시작한다면, 웹 서버로 데이터가 암호화되어 안전하게 전달됨을 의미한다. HTTP를 사용하여 데이터를 전송한다면, 데이터는 쉽게 스니핑 할 수 있는 데이터 패킷으로 나뉘어 가기 때문에 보안 위험에 노출될 수 있다. HTTPS를 사용하면 패킷을 스니핑하거나 가로챈다고 해도 암호화된 문자가 보일 뿐이다.
암호화 방식
SSL 인증서의 동작 원리를 이해하려면, 암호화 방식을 이해하고 있어야 한다.
대칭키 암호화(Symmetric-key Cryptosystem)
대칭키 암호화는 암호화와 복호화에 같은 키(대칭키)를 사용하는 방식이다. 이 방식의 가장 큰 장점은 연산 속도가 빠르다는 것이다. 하지만 양측의 키가 같기 때문에 키를 안전하게 교환해야 한다는 단점이 있으며, 키 관리에 많은 주의가 따른다.
비대칭키 암호화(Asymmetric-key Cryptosystem)
비대칭키 암호화는 암호화와 복화화에 서로 다른 두 개의 키를 사용하는 방식이다. 이 두 키는 공개키(public key)와 개인키(private key)라고 불리며, 한 쌍으로 존재한다. 공개키는 누구에게나 공개될 수 있으며, 개인키는 한쪽에서만 사용한다. 공개키로 암호화된 데이터는 쌍이 되는 개인키로만 복호화할 수 있다. 같은 방식으로 개인키로 암호화된 데이터는 공개키로만 복호화할 수 있다. 비대칭키 암호화의 가장 큰 장점은 키 교환 문제를 해결한다는 것이다. 그러나 대치킹 암호화에 비해서 연산 속도가 느리다는 단점이 있다.
하이브리드 암호화(Hybrid Cryptosystem)
하이브리드 암호화는 대칭키 암호화와 비대칭키 암호화의 장점을 결합한 방식이다. 데이터는 대칭키를 사용하여 암호화하고, 대칭키를 비대칭키를 사용해서 암호화한다. 대칭키 암호화의 빠른 속도와 비대칭키 암호화의 안전한 키 교환의 장점을 모두 활용한다. 대부분의 현대적인 보안 시스템과 통신 프로토콜(예:HTTPS, SSL/TLS)은 하이브리드 암호화를 사용한다.
- 키 페어 생성(비대칭 암호화)
- 공개키 배포
- 공개키로 대칭키를 암호화
- 암호화된 대칭키를 전송
- 개인키로 암호화된 대칭키를 복호화
- 이제 양쪽에 대칭키가 존재함
- 대칭키로 데이터 암호화
- 암호화된 데이터 전송
- 대칭키로 암호화된 데이터를 복호화
SSL 인증서 발급
서버에서 HTTPS 프로토콜을 사용하기 위해서는 SSL인증서를 발급받아야 한다. 해당 SSL 인증서를 발급받는 과정은 아래와 같다.
CA는 사이트(서버) 정보와 공개키 정보를 받으면, 해당 공개키를 해시(SHA-256 등)하여 인증서에 등록한다. 이 해시값을 지문(Finger Print)라고 한다. 또한 이 지문을 CA의 비밀키로 암호화하여 인증서에 '서명'으로 등록한다. 이 서명을 디지털 서명이라고 한다. 이후 브라우저는 CA의 공개키를 이용해 서명을 복호화하여 이 값이 지문(서버의 공개키를 해시한 값)과 비교하여 인증서가 위조되지 않았음을 검증한다. 인증서의 유효성이 확인되면, 브라우저는 인증서에 있는 서버의 공개키를 추출한다.
이렇게 상위 인증 기관이 하위 인증서가 포함하고 있는 공개키를 상위 기관의 비밀키로 암호화하여 상호 보증하는 것을 인증서 체인(Certificate Chain)이라고 한다.
자체서명 SSL(Self-Signed SSL)
CA 인증 없이도 인증서를 생성할 수 있다. TLS 통신도 가능하다. CA 인증과 관련 없이 발행하는 인증서를 사설 인증서라고 한다. 이 사설 인증서는 Root CA처럼 Self-Signed 되어 있다. 보증기관이 없으며, 보증되지 않은 인증서이다.
사설 인증서를 사용하는 경우, 클라이언트가 해당 인증서를 신뢰할 수 있는 인증기관(CA)을 알지 못하기 때문에 보안 경고를 발생시킬 수 있다.
SSL 인증서를 통한 암호화된 통신 과정
앞서 서버가 인증서를 발급받는 과정을 알아봤다. 발급받은 인증서를 통해 웹 서버와 클라이언트(웹 브라우저)가 통신하는 과정은 다음과 같다.
- 인증 요청
- 서버 정보를 검증하고 인증서 생성
- CA의 개인키로 인증서 서명
- 서버로 서명된 인증서 발급
- 웹 브라우저에 CA 공개키 제공
- 서버(웹사이트) 접속 요청
- 발급받은 인증서 전달
- CA 공개키로 인증서 검증
- 서버 공개키로 대칭키 암호화
- 서버로 암호화된 대칭키 전송
- 서버 비밀키로 대칭키 복호화
- 대칭키를 이용하여 암호화된 정보를 주고 받는다.
5번에서 클라이언트(웹 브라우저)에 CA가 공개키를 제공하는 것처럼 표현하였으나, 클라이언트는 CA 리스트를 이미 갖고 있다. PC에 포함되거나 브라우저가 포함하고 있다. CA 리스트는 공인으로 인증된 CA 기관들의 리스트로, CA의 공개키도 함께 갖고 있다.
함께 읽으면 좋은 글
참고 사이트
'프로그래밍 > 네트워크' 카테고리의 다른 글
SSL 인증서 종류에 대해서 알아보자 (1) | 2024.09.10 |
---|---|
[::] 해당 IP 표기는 뭘까? IPv6 주소 표기법에 대해서 (0) | 2024.09.05 |
현존 최강의 암호화 알고리즘 RSA (0) | 2024.08.27 |
HTTPS 통신을 위한 자체 인증 SSL 인증서 만들기 (0) | 2024.08.26 |
IOCP 입출력 완료 포트 생성 및 연결 그리고 입출력 과정 (0) | 2024.08.07 |
댓글