https를 통한 인터넷 접속은 브라우저를 실행 중인 우리 컴퓨터(또는 휴대폰 등 )가 해당 사이트의 서버와 암호화 통신을 하고 있다는 것을 의미한다.
https를 이용한 인터넷 접속은 *SSL(TLS)을 이용한 것이라고 보면 된다.
- SSL (Secure Socket Layer)
- TLS (Transport Layer Security)
두 가지 보안 프로토콜을 통해 클라이언트(브라우저)와 서버(웹서버)가 보안이 향상된 통신을 하는 것을 말한다.
개인정보 보호, 인증, 데이터 무결성을 보장하기 위해서 Netscape가 1995년 개발했다.
SSL의 인지도가 월등히 높고 사용량이 많아서 대게 SSL/TLS를 SSL로 부르기도 한다.
SSL은 TLS의 이전 버전인데, SSL의 경우는 1996년 이후 업데이트가 되지 않았다.
그래서 IETF(Internet Engineering Task Force)는 업데이트를 개발하고 이름을 TLS로 바꾸었다(소유권 변경).
SSL 인증은 SSL 인증서( 신분증 같은 개념 )가 있는 웹 사이트만 실행할 수 있다.
그리고 이 SSL 인증서는 가장 중요한 정보에 공개 키라는 걸 포함하는데, 공개 키를 이용해서
클라이언트와 웹 서버가 안전하게 암호화가 가능하다. 클라이언트는 공개 키를 보고 공개키를 이용해서 웹 서버와 안전하게
암호화 키를 수립한다.
또, 웹 서버에는 기밀로 유지되는 개인 키가 있다. 이 개인 키는 공개키로 암호화된 데이터를 해독할 때 사용한다.
- 공개 키를 이용해서 클라이언트는 웹 서버와 안전하게 암호화 키를 수립
- 개인 키를 통해서 암호화된 데이터를 복호화
하나의 인증서가 하나의 웹 사이트에 적용되는지, 또는 여러 개의 웹 사이트에 적용되는지에 따라 유형이 달라진다.
단일 도메인 : 단일 도메인 SSL 인증서는 단 하나의 도메인에 적용된다.
와일드카드 : 와일드카드 SSL 인증서도 단일 도메인 인증서처럼 단 하나의 도메인에 적용된다.
다른 점은, 도메인의 하위 도메인도 포함한다.
ex ) www.cloudflare.com, blog.cloudflare.com, developer.cloudflare.com
멀티 도메인 : 멀티 도메인 SSL 인증서는 관련되지 않은 다수의 도메인에 적용될 수 있다.
HTTPS 뒤에 붙은 S는 Secure를 나타낸다.
이는 취약점 보완으로 보안이 향상된 웹 통신을 하기 위함이 목적이다.
예를 들면 HTTP 통신은 물건을 그냥 주고 받는 방식이라면, HTTPS는 물건을 007 가방에 담아 보내는 방식이고 이 박스는 클라이언트와 서버만 열고 닫을 수 있는 비밀번호가 걸려있는 가방이다.
또, SSL은 특정한 유형의 사이버 공격도 차단한다.
SSL은 웹 서버를 인증하는데 공격자들이 사용자를 속여 데이터를 훔치기 위한 가짜(짝퉁) 웹사이트를 만드는 일이 있기에,
사이트를 인증하는 것이 굉장히 중요하다.
SSL과 TLS는 '보안 계층'이라는 독립적인 프로토콜 계층을 만들어, 응용 계층과 전송 계층 사이에 속하게 된다.
HTTPS는 SSL 또는 TLS 위에 HTTP 프로토콜을 얹어 보안된 HTTP 통신을 하는 프로토콜이다.
즉, SSL과 TLS는 HTTP 뿐만 아니라 FTP, SMTP와 같이 다른 프로토콜에도 적용할 수 있으며, HTTPS는 TLS 또는 SSL + HTTP가 조합된
프로토콜만을 가리키는 것이다.
SSL은 높은 수준의 개인정보 보호를 제공하기 위해, 웹에서 전송되는 데이터를 암호화한다.
따라서, 데이터를 가로채려하면 해독할 수 없는 복잡한 문자만 보게 된다.
SSL 핸드셰이크(인증 프로세스)를 수행
이때 데이터를 주고받기 위해 어떤 방법을 사용해야 하는지 서로의 상태(ID)를 파악한다.
SSL은 HTTP와 달리 443 포트를 기본으로 사용하는 TCP 기반 프로토콜인데,
TCP 기반이기 때문에 SSL 핸드셰이크 전에 TCP 3-Way핸드셰이크 또한 수행한다.
서로 간 협상이 완료되면, SSL 세션이 생성되고 이 후 클라이언트와 서버는 원하는 데이터를 주고 받는다.
그리고 데이터 전송이 끝나면 서로에게 알린 후 세션을 종료한다.
서로 간의 메세지와 데이터 통신은 사람과 사람이 대화하는 것과 유사하다.
- Client hello : 클라이언트가 서버를 호출한다(브라우저 검색창에 도메인을 입력한다).
이때 클라이언트는 자신의 브라우저가 지원할 수 있는 암호화 방식(Cipher Suite)를 먼저 제시한다.
그리고 랜덤 데이터를 생성하여 추가로 전송한다.
- Server hello : 서버가 클라이언트를 호출한다.
서버는 클라이언트가 제시한 암호화 방식 중 하나를 선정하여 알려준다.
또한, 서버 자신의 인증서를 전달한다. 전달된 인증서에는 서버의 공개키가 포함되어 있다.
클라이언트와 마찬가지로 서버 측에서 생성한 랜덤 데이터 또한 전달한다.
- Client key Exchange : 클라이언트는 미리 주고받은 자신과 서버의 랜덤 데이터를 참고하여 서버와 암호화 통신을 할 때
사용할 키를 생성한 후 서버에게 전달한다. 이때 키는 서버로부터 받은 공개키로 암호화되어 보내진다.
참고 :
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=skinfosec2000&logNo=222135874222
https://www.cloudflare.com/ko-kr/learning/ssl/what-is-ssl/