-
Network - HTTPS & SSLComputer Science/Network 2022. 1. 1. 17:51
HTTP
HTTP란?
ㆍ 인터넷 상에서 정보를 주고받기 위한 프로토콜이다.
ㆍ 클라이언트와 서버 사이에서 이루어지는 요청과 응답에 대한 프로토콜이다.
ㆍ 암호화되지 않은 방법으로 데이터를 전송한다는 특징이 있다. 따라서, 악의적인 감청과 데이터가 변조될 가능성이 존재한다.
HTTPS
HTTPS란?
ㆍ 보안이 강화된 HTTP이다.
ㆍ 모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다.
ㆍ HTTPS는 HTTP의 하부에 SSL과 같은 보안 계층을 제공함으로써 동작한다.
HTTPS의 사용 이유
1. 내가 특정 웹 사이트에 보내는 정보를 다른 누군가가 훔쳐보지 못하게 하기 위해서이다.
2. 내가 접속한 웹 사이트가 신뢰할 수 있는 사이트인지 판별하기 위해서이다. (기관으로부터 검증된 사이트만 https를 허용)
SSL
SSL이란?
ㆍ SSL 인증서를 통해 서버의 신원을 확인하고, 데이터를 암호화하여 통신하는 보안 방식이다.
ㆍ 넷스케이프에서 SSL을 만들었고, 나중에 표준화기구(IETF)로 이관하면서 TLS로 이름이 변경되었다.
ㆍ SSL은 CA(Certificate Authority)라고 불리는 서드 파티로부터 서버와 클라이언트의 인증을 수행하는 데 사용된다.
SSL 디지털 인증서
SSL 디지털 인증서란?
ㆍ SSL 방식에 사용되는 전자화된 문서로, 공인된 인증기관(CA)에서 발급한다.
ㆍ 클라이언트가 서버에 접속한 직후에 서버는 클라이언트에게 이 인증서 정보를 전달한다.
ㆍ 클라이언트는 이 인증서 정보가 신뢰할 수 있는 것인지 검증한 후에 다음 절차를 수행하게 된다.
SSL 인증서의 장점
ㆍ 통신 내용이 노출, 변경되는 것을 방지한다.
ㆍ 클라이언트가 접속하려는 서버가 신뢰할 수 있는 서버인지 확인 가능하다.
SSL 인증서의 내용
1. 서비스의 정보 (인증서를 발급한 CA, 서비스의 도메인 등)
2. 서버 측 공개 키 (공개키의 내용, 공개키의 암호화 방법)
SSL에서 사용하는 암호화의 종류
ㆍ SSL의 핵심은 암호화이다. SSL은 보안과 성능상의 이유로 두 가지 암호화 기법을 혼용해서 사용하고 있다.
1. 대칭키 암호화 방식
ㆍ 동일한 키로 암호화와 복호화를 같이 할 수 있는 방식의 암호화 기법을 말한다.
ㆍ 발송자와 수신자가 서로 대화하기 위해서는 둘 다 공유키를 가져야 한다. 따라서, 대칭키를 전달하는 과정에서 키가 유출되면 암호의 내용을 복호화할 수 있기 때문에 위험하다.
ㆍ 이를 보완하기 위해서 나온 방식이 공개키 암호화 방식이다.
2. 공개키 암호화 방식
ㆍ 암호화와 복호화를 하는데 다른 키를 사용하는 암호화 기법을 말한다.
ㆍ A의 키로 암호화를 하면 B의 키로 복호화를 할 수 있고, B의 키로 암호화를 하면 A의 키로 복호화를 할 수 있는 방식이다.
ㆍ 2개의 키는 개인키(Private Key)와 공개키(Public Key)로 지정한다. 보통 공개키는 디지털 인증서 안에 포함되어 있다.
ㆍ 개인키는 자신만이 가지고 있고, 공개키는 타인에게 제공한다.
ㆍ 공개키 제공받은 타인은 공개키를 이용해서 정보를 암호화한다. 암호화한 정보를 개인키를 가지고 있는 사람에게 전송한다.
ㆍ 개인키의 소유자는 개인키를 이용해서 암호화된 정보를 복호화한다. 이 과정에서 공개키가 유출된다고 해도 개인키를 모르면 정보를 복호화할 수 없기 때문에 안전하다.
HTTPS / SSL의 기본 원리
ㆍ 대칭키 방식과 공개키 방식을 혼용하여 서버의 신원을 보증하고, 데이터 통신을 암호화한다.
1. 서버에서 개인키 / 공개키를 생성한다.
2. 공인기관(CA)에서 서버의 SSL 인증서를 발급받는다.
ㆍ SSL 인증서는 CA의 개인키로 암호화되어있다.
ㆍ 인증서 내부에는 서버의 공개키가 저장되어 있다.
3. 서버에 인증서를 저장한다.
4. 브라우저가 서버에 접속하면 인증서를 전송한다.
5. 브라우저는 받은 인증서를 CA의 공개키로 복호화한다.
ㆍ 인증서는 CA의 개인키로 암호화되어있다.
ㆍ 브라우저(크롬, 사파리 등)는 공인된 CA들의 공개키를 내부에 보관하고 있다.
6. 인증서 복호화에 성공한다면, 해당 인증서가 CA에 의해 발급된 것임이 증명된다.
ㆍ 인증서를 보낸 서버도 CA가 인증한 서버임이 증명된다.
7. 복호화한 인증서에서 서버의 공개키를 취득하여 데이터 통신에 활용한다.
ㆍ 서버와 주고받는 데이터 자체는 대칭키 방식으로 암호화한다.
ㆍ 대칭키 방식에 사용된 키를 서버의 공개키로 암호화한다.
HTTPS / SSL 상세 과정
SSL 인증서 생성
1. 서버에서 비밀키 / 공개키 생성
2. 서버의 공개키를 CA에게 전달하면서 SSL 인증서 발급 요청
3. CA는 CA의 개인키로 암호화된 인증서를 서버에게 발급
Handshake(악수)
ㆍ 클라이언트와 서버가 통신을 하기 위해 서로를 파악하는 과정이다.
1. 클라이언트가 서버에 접속 (Client Hello라고 함)
ㆍ 클라이언트에서 생성한 랜던 데이터를 서버 측으로 전송
ㆍ 클라이언트가 지원하는 암호화 방식들을 서버 측으로 전송
ㆍ Session ID를 서버 측으로 전송
2. 서버가 클라이언트에게 응답 (Server Hello라고 함)
ㆍ 서버에서 생성한 랜던 데이터를 클라이언트 측으로 전송
ㆍ 서버가 선택한 암호화 방식을 클라이언트 측으로 전송
ㆍ SSL 인증서를 클라이언트 측으로 전송
3. 클라이언트의 확인 작업
ㆍ 서버로부터 받은 SSL 인증서를 확인(브라우저에 내장된 CA 리스트에 있는 CA의 인증서인지 확인)
ㆍ 인증서 복호화 (브라우저에 내장된 해당 CA의 공개키를 통해 복호화)
ㆍ 복호화 성공 시 인증서가 CA에 의해 발급된 것이 증명됨
ㆍ 인증서를 전송한 서버도 CA가 보증하는 서버임이 증명됨
ㆍ 복호화된 인증서로부터 서버 공개키 획득
4. 클라이언트의 pre-master secret key 생성
ㆍ 클라이언트가 생성한 랜던 데이터 + 서버에게 받은 랜덤 데이터의 조합으로 특정값 생성
ㆍ 인증서에 있는 서버의 공개키를 통해 pre-master secret key를 암호화
ㆍ 암호화된 pre-master secret key를 서버 측으로 전송
5. 서버의 session key(대칭키의 key) 생성
ㆍ 암호화된 pre-master secret key를 받아서 서버의 개인키로 복호화
ㆍ 복호화된 pre-master secret key를 이용해 master secret을 생성
ㆍ 이렇게 만든 aster secret으로 session key를 생성
6. Handshake 종료
ㆍ 서버의 신원이 확인
ㆍ 데이터 통신에 사용할 대칭키 암호화의 키(session key)가 클라이언트, 서버 양쪽이 공유
세션(전송)
ㆍ 실제로 서버와 클라이언트가 데이터를 주고받는 단계
1. 클라이언트의 데이터를 암호화하고 서버로 전송
ㆍ session key를 통해 대칭키 방식으로 데이터를 암호화하여 서버에게 전송
2. 서버의 데이터 복호화
ㆍ session key를 통해 대칭키 방식으로 전달받은 데이터를 복호화
ㆍ session key를 통해 대칭키 방식으로 응답 데이터를 암호화하여 클라이언트에게 전송
3. 클라이언트의 데이터 복호화
ㆍ session key를 통해 대칭키 방식으로 데이터를 복호화하여 처리
세션 종료
1. 데이터 전송 종료
2. SSL 통신 종료
3. session key 폐기
ㆍ 매번 연결 시마다 새로운 session key를 생성하여 아주 짧은 시간만 사용
ㆍ 혹시 탈취되더라고 비교적 안전
출처
ㆍ https://opentutorials.org/course/228/4894
ㆍ https://curryyou.tistory.com/207
ㆍ https://wayhome25.github.io/cs/2018/03/11/ssl-https/
728x90'Computer Science > Network' 카테고리의 다른 글
Network - HTTP (0) 2021.12.13 Network - OSI 7 계층 (0) 2021.10.19