HTTP와 HTTPS의 차이
- HTTP는 Hypertext Transper Protocol의 약자이다. HTTPS는 Over Secure Socket Layer 계층이 추가된 프로토콜이다. HTTP는 암호화되지 않은 데이터를 클라이언트와 서버가 주고받고 HTTS는 Secure단계를 거쳐 데이터를 암호화 및 복호화를 하여 보안을 강화한 프로토콜 이다.
HTTPS와 SSL
- HTTPS는 SSL 프로토콜 위에서 돌아가는 프로토콜이다.
암호화 방식을 이해하기 위해서는 우선 대칭키와 비대칭키에 대해 알아야 한다.
- 대칭키 암호화방식은 클라이언트와 서버가 각각의 키를 공유하여 그 키로 암호화 또는 복호화를 진행한다. 이 방식의 단점은 키를 획득하면 암호화 및
복호화가 가능하다는 것이다.
- 비대칭키 암호화방시에는 공개키 암호화 방식이 있다. 클라이언트와 서버가 각각의 암호화 또는 복호화 키를 두개 가지고 관리하는 방식이다.
이 방식은 비공개키를 서버에두고 공개키를 각 클라이언트에 배포하는 방식이다. 따라서 한 층 더 보안을 강화 하였다. 하지만 이 방식은 컴퓨터의 매우 많은 자원을 사용하므로 성능이 저하될 수 있다.
https 동작 방식
서버와 클라이언트는 내부적으로 3단계를 거쳐서 통신을 한다.
1. 악수 (HandShake)
2. 전송
3. 세션 종료
1. 악수
- 서버와 클라이언트는 통신하기 전 클라이언트와 서버가 실제 존재하는지 상대방과 데이터를 주고 받으려면 어떤 방법을 써야 하는지 파악한다.
1. 클라이언트는 서버에 접속 한다. 이 단계를 ClientHello단계라고 한다. 이 단계에서 주고받는 정보
- 클라이언트 측에서 생성한 랜덤 데이터
- 클라이언트가 지원하는 암호화 방식들 (클라이언트와 서버의 암호화 방식이 다를수 있음)
- 세션아이디(기존 세션id가 있다면 재활용)
2. 서버에서는 ClientHello를 받아서 ServerHello를 하게 된다.
- 서버측에서 생성한 랜덤 데이터
- 서버가 선택한 클라이언트 암호화방식
- 인증서 (공개키, 서비스정보)
3. - 클라이언트는 서버에서 받은 랜덤 데이터와 클라이언트가 생성한 랜덤 데이터를 조합하여 Pre Master Secret 키값을 생성한다.
- 이때 사용하는 방식이 공개키 방식이다.
- 이 키는 세션 단계에서 데이터를 주고 받을 때 암호화 하기 위해 사용
- 서버로 부터 받은 인증서 공개키로 pre master secret 키를 암호화 하여 서버에 전송
4. - 서버는 클라이언트가 전송한 pre master scret값을 자신의 비공개키로 복호화
- 클라이언트와 서버 모두 pre master scret값을 공유
- 서버와 클라이언트는 일련의 과정을 거쳐 pre master scret값을 master secret값으로 만듬
- master secret는 session key를 생성
- session key 값을 이용해 서버와 클라이언트는 데이터를 대칭키 방식으로 암호화 한 후 주고 받음
5. 클라이언트와 서버는 핸드쉐이크 단계의 종료를 서로 알린다.
2. 세션
- 실제로 서버와 클라이언트가 데이터를 주고 받는 단계
- 정보를 상대방에게 전송하기전에 session key 값을 이용해 대칭키 방식으로 암호화
- 상대는 session key를 알고 있기 때문에 복호화 가능
3. 세션종료
- 데이터 전송이 끝나면 ssl 통신이 끝났음을 알려줌
- 통신에서 사용한 대칭키 세션키를 폐기
참고
생활코딩 : https://opentutorials.org/course/228/4894
'용어정리' 카테고리의 다른 글
웹서버와 웹 컨테이너 (0) | 2017.11.16 |
---|---|
Restful이란 (0) | 2017.10.17 |