목차
- HTTP란?
- HTTPS란?
- HTTP와 HTTPS 비교
- SSL 인증서
- SSL 암호화 방식 : 대칭키 + 공개키
- SSL 동작 방식 : SSL Handshake
- HTTPS 동작 방식
1. HTTP란?
HTTP는 HyperText Transfer Protocol의 약자로, OSI 7계층에서 애플리케이션 계층에서 동작하는 프로토콜이다. 웹 상에서 데이터를 송수신하기 위해 사용되며, 80번 포트를 사용하고 있다. 클라이언트가 서버에게 데이터를 요청할 때 HTTP 요청을 보내고, 서버는 클라이언트가 요청한 데이터를 담아 HTTP 응답을 보냄으로써 통신한다.
하지만 HTTP를 이용해 데이터를 주고받을 때, 클라이언트가 서버에게 요구한 정보나 로그인/회원가입 시에 필요한 인증 정보 등이 그대로 노출된 상태로 전달된다. 따라서 네트워크 상에서 데이터를 암호화해 송수신할 필요가 있는데, 이 방법이 HTTPS 프로토콜을 이용하는 것이다.
2. HTTPS란?
HTTPS는 HyperText Transfer Protocol Secure의 약자로, OSI 7계층에서 애플리케이션 계층에서 동작하는 프로토콜이다. 웹 상에서 암호화된 데이터를 송수신하기 위해 사용되며, 443번 포트를 사용하고 있다. 서버가 CA에서 발급한 SSL/TLS 인증서를 포함하고 있는 상태라면 HTTPS 통신을 지원할 수 있다.
구글은 HTTPS를 사용하는 것을 권장하고 있으며, 구글 검색 엔진에서 검색 순위 결정 요소로서 포함하고 있다고 한다. 웹 브라우저를 이용할 때 https:// 로 시작하는 URL을 가진 사이트일 경우, HTTPS를 이용 중인 서버인 것이다.
3. HTTP와 HTTPS 비교
HTTTP | HTTPS | |
약자 | HyperText Transfer Protocol | HyperText Transfer Protocol Secure |
URL 주소 | http:// | https:// |
포트 번호 | 80번 | 443번 |
암호화 | 암호화 X | 공개키를 포함한 SSL 인증서를 통해 암호화 |
비용 | 비용 발생 X | SSL 인증서 발급 및 유지를 위한 비용 발생 |
4. SSL 인증서
SSL 인증서는 SSL 프로토콜을 사용해 클라이언트와 서버 간의 암호화된 통신을 제공할 수 있는 제 3자의 CA가 인증한 인증서이다. SSL 인증서를 통해 사이트의 신뢰성을 검증하고 인증서에 포함된 공개키로 데이터를 암호화하며, 클라이언트는 개인키에서 통해 데이터를 복호화할 수 있다.
(구성 요소)
- 도메인 이름
- CA
- CA 디지털 서명
- 발급 날짜
- 만료 날짜
- 공개키
- SSL/TLS 버전
5. SSL 암호화 방식 : 대칭키 + 공개키
SSL에서 제공하는 암호화 방식은 대칭키 암호화와 공개키 암호화를 모두 채택해 사용 중이다.
대칭키 암호화
- 서버와 클라이언트가 동일한 하나의 키를 이용함
- 연산 속도가 매우 빠름
- 키가 노출되면 위험함
공개키 암호화
- 공개키와 개인키, 두 개의 키를 이용함
- 공개키로 암호화하면 개인키로 복호화할 수 있고, 반대로 개인키로 암호화하면 공개키로 복호화할 수 있음
- 키가 노출되어도 비교적 안전함
- 연산 속도가 느림
대칭키 암호화는 서버와 클라이언트가 동일한 하나의 키를 이용하며, 연산 속도가 빠르다는 강점으로 데이터를 암호화할 때 사용하는 방식이다. 하지만 대칭키가 탈취되면 암호화된 데이터를 누구나 해독할 수 있기 때문에, 공개키 암호화를 통해 노출되면 안 되는 대칭키를 감싸 암호화된 채로 데이터(대칭키)를 주고받는다.
즉, 공개키 암호화로 대칭키를 암호화해 키를 교환하고, 대칭키 암호화로 데이터를 암호화한 후 데이터를 송수신하는 것이다.
6. SSL 동작 방식 : SSL handshake
파란색의 TCP 3-way handshake 과정이 끝나면 노란색의 SSL handshake가 동작한다.
1) 클라이언트 - Client Hello
: 클라이언트가 서버에 SSL 연결을 시도한다. 클라이언트가 사용 가능한 암호화 방식(Cipher Suite)을 전달한다. Cipher Suit 구성에는 프로토콜 종류(SSL 혹은 TLS), 키 교환 방식, 인증서 검증, 암호화 방식, 블록 암호 운용 방식, 무결성 검증 방식과 관련된 내용이 들어 있다.
2 - 1) 서버 - ServerHello
: 서버는 클라이언트가 보내온 Cipher Suite 중 하나를 선택하고, 선택한 Cipher Suite를 클라이언트에게 보낸다.
2 - 2) 서버 - Certificate / ServerHelloDone
: 서버는 공개키를 포함한 자신의 SSL 인증서를 클라이언트에게 보낸 후, 서버의 작업을 마친다.
3- 1) 클라이언트 - ClientKeyExchange
: 클라이언트는 SSL 인증서를 받아 CA의 공개키로 복호화함으로써 SSL 인증서를 검증한다. 복호화에 성공하면, 클라이언트는 대칭키를 생성해 SSL 인증서에 있던 서버의 공개키로 암호화하여 대칭키를 전달한다.
3 - 2) 클라이언트 - ChangeCipherSpec / Finished
: 클라이언트가 SSL 통신을 할 준비가 완료되었음을 알린다.
4) 서버 - ChangeCipherSpec / Finished
: 서버가 SSL 통신을 할 준비가 완료되었음을 알린다.
7. HTTPS 동작 방식
1) 클라이언트가 서버 접속
2) 3-way handshake 과정으로 TCP 연결이 수립됨
3) 서버는 공개키를 포함해 SSL 인증서를 클라이언트에게 전송함
4) 클라이언트는 SSL 인증서를 CA에 검증하고 공개키를 획득함
5) 클라이언트는 대칭키를 생성하고 공개키로 암호화해 서버에 전달함
6) 서버는 개인키로 복호화해 대칭키를 획득함
7) 클라이언트와 서버는 대칭키를 이용해 데이터를 암호화/복호화하며 통신
8) 통신이 끝나면 4-way handshake 과정으로 TCP 연결이 해제됨
댓글