1. http vs https
HTTP는 Hypertext Transfer Protocol의 약자로 HTML을 전송하기 위한 통신 프로토콜(약속, 형식 정도로 이해)을 의미한다. HTTPS의 마지막 s는 Over Secure Socket Layer의 약자로 기존 http방식에 보안을 강화한 방식이다. 기존 http는 데이터를 전송할 때 암호화를 하지 않기 때문에 보안상 결점이 많아 이를 보완하기 위해 등장한 것이다. 이 https는 ssl 프로토콜 위에서 돌아가는 프로토콜이다. (기존 http프로토콜 + ssl프로토콜).
2. SSL = TSL
같은 말이다. 보통 SSL이라고 많이 표현한다. SSL도 http처럼 프로토콜의 일종이다.
3. https를 통한 서버와 클라이언트의 통신 절차
3-1. handshaking
정말 간략하게 설명하면 서버와 클라이언트가 가장 처음 만나서 서로의 상태를 확인하는 단계라고 할 수 있다.
구체적으로 클라이언트가 서버에 먼저 접속하여(client hello) 클라이언트에서 만든 랜덤 데이터, 클라이언트가 지원하는 암호화 방식들, 세션ID를 서버에게 알려준다. 여기서 말하는 세션 ID는 이미 handshaking과정을 한번 경험해봤다면 다시 이 과정을 반복할 필요 없이 기존의 세션을 재활용하기 위한 식별자이다.
그 다음 서버가 응답으로 server hello를 한다. 이 과정에서 서버가 만든 랜덤 데이터, 서버가 선택한 클라이언트의 암호화방식, 인증서를 제공한다. 여기서 말하는 인증서는 클라이언트가 접속한 서버가 인증된 서버가 맞는지 확인시켜주는 인증서이다. 인증서에는 인증서를 발급한 CA, 서비스 도메인, 서버가 만든 공개키가 들어있고 암호화되어 제공된다. 이 공개키는 나중에 쓰임새가 있으므로 일단 넘어가자.
브라우저는 자체적으로 CA리스트가 있어 이 리스트를 통해서 인증서가 CA에서 진짜로 발급된 인증서인지 확인할 수 있게끔 되어있다. 또한 브라우저는 이미 CA공개키를 알고 있기 때문에 쉽게 암호화된 인증서를 복호화하여 정보를 확인할 수 있다. 복호화가 된다면 자동으로 이 인증서가 CA로부터 발급된 인증서임을 확인할 수 있게 되는 것이다.(비대칭키 방식이니깐)
클라이언트는 인증서에 들어있는 서버가 만든 랜덤 데이터와 클라이언트가 만든 랜덤 데이터를 조합해서 pre master secret라는 키를 생성한다. 그리고 이 pre master secret 키를 서버가 보내준 인증서에 들어있던 공개키를 이용해서 암호화하여 서버로 전송한다.
서버는 이 암호화된 pre master secret키를 서버가 가지고 있는 private key로 복호화하여 pre master secret키를 가지게 된다. 이제 서버와 클라이언트 모두 pre master secret키를 가지게 된다. 이 pre master secret키는 세션 키로 서버와 클라이언트 둘다 일련의 과정을 거쳐 바꾼다. 그러면 서버와 클라이언트 둘다 같은 세션키가 존재한다. 그리고 핸드셰이크 종료를 클라이언트와 서버 둘 다 서로에게 알린다.
3-2. 이제 둘 다 세션키를 가지고 있으므로 앞으로 데이터를 주고받을 때는 이 세션키를 활용하여 대칭키 암호화 방식이 적용되는 것이다. 이를 통해 비대칭키 방식에서 벗어날 수 있어 많은 접속이 몰리더라도 서버의 부담이 크게 줄어들게 된다.
3-3. 데이터 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알리고 세션키(대칭키)를 파괴한다.
4. https의 암호화 방식 정리
4-1. 데이터를 주고받기 위해서 서버에게 과도한 부담이 가면 안되고 이를 위해선 대칭키 방식의 암호화가 필수불가결. 문제는 대칭키를 서로 공유하고 있으려면 클라이언트가 서버에게 대칭키를 줘야한다. 근데 그냥 줬다가는 중간에 대칭키가 도난당하는 등 보안상 위험이 존재한다. 따라서 이 대칭키를 server hello과정에서 받은 인증서 안에 들어있는 대칭키로 암호화한다. 암호화된 대칭키는 서버에게 넘어가고 서버는 해당 private key로 복호화하여 대칭키를 가질 수 있게 된다.
4-2. 한줄 정리
데이터 주고받을 때: 대칭키 방식
클라이언트가 대칭키 넘겨줄 때: 비대칭키 방식.
https는 대칭키 방식과 비대칭키 방식을 혼용한 보안을 확보한 프로토콜(통신 규약, 형식).
참고한 사이트: https://opentutorials.org/course/228/4894
HTTPS와 SSL 인증서 - 생활코딩
HTTPS VS HTTP HTTP는 Hypertext Transfer Protocol의 약자다. 즉 Hypertext 인 HTML을 전송하기 위한 통신규약을 의미한다. HTTPS에서 마지막의 S는 Over Secure Socket Layer의 약자로 Secure라는 말을 통해서 알 수 있듯이
opentutorials.org
'웹' 카테고리의 다른 글
무중단 배포란? (0) | 2022.06.04 |
---|---|
WebRTC란? Socket.IO를 활용하여 Signaling Server를 구현하기 (0) | 2022.05.24 |
CORS란 무엇인가? SOP란 무엇인가? (0) | 2022.02.13 |
API 이해하기 (0) | 2022.01.16 |
JWT(JSON Web Token) 이해하기 (0) | 2022.01.16 |