HTTPS(Hypertext Transfer Protocol Secure)
HTTPS란?
서로 다른 시스템들 사이에서 통신을 주고받게 해주는 가장 기초적인 프로토콜인 HTTP + Secure(보안기능)
서버에서부터 브라우저로 전송되는 정보가 암호화되지 않는 보안문제를 SSL(보안 소켓 계층)을 사용함으로써 해결
SSL(Secure Sockets Layer)
SSL이란?
보안 소켓 계층으로 웹사이트와 브라우저(혹은, 두 서버) 사이에 전송된 데이터를 암호화하여 인터넷 연결을 보안을 유지하는 표준 기술
TLS(Transport Layer Security)
전송 계층 보안으로 더 강력한 버전의 SSL이지만, SSL이 더 일반적으로 사용되는 용어이기에, 여전히 보안 인증서는 SSL이라 불리고있음.
SSL이 필요한 이유
- 웹사이트에서 전송이 이루어지는 모든 유형의 정보 보안을 유지해줌으로 전달되는 내용이 다른 사람에게 노출되는것을 막을 수 있음
- 결제페이지
- 로그인
- 블로그 및 정보사이트
- 클라이언트가 접속하려는 서버가 신뢰 할 수있는 서버인지 알 수 있음
- 전달되는 내용이 악의적으로 변경되는것을 막을 수 있음
SSL 암호화 종류
⭐️ SSL은 공개키와 대칭키의 장점을 혼합한 방법을 사용
암호화를 할 때 사용하는 비밀번호 = 키(key)
- 대칭키 방식 : 동일한 키로 암호화와 복호화를 할 수 있는 기법
즉, 123를 사용하여 암호화하였다면 복호화도 123를 입력해야 가능
- 암호를 주고 받는 사람들 사이에 대칭키를 전달하는 것이 어렵다는 단점
- 대칭키가 유출되면 키를 획득한 공격자가 암회의 내용 복호화 가능
- 공개키 방식 : 대칭키의 단점을 보완하기 위해 나온 방식으로 A키를 암호화를 하면 B키로 복호화할 수 있고, B키로 암호화하면 A키로 복호화할 수 있는 방식
- 두개의 키 중 하나를 비공개키, 하나를 공개키로 지정
- 비공개키 : 자신만이 가지고있는 키
- 공개키 : 타인에게 제공하는 키
공개키 동작 원리
- 공캐키를 제공받은 타인은 공개키를 이용해서 정보를 암호화
- 암호화한 정보를 비공개키를 가지고있는 사람에게 전송
- 비공개키의 소유자는 비공개 키를 사용해서 암호화된 정보를 복호화
❗️ 공개키가 유출된다고해도 비공개키를 모르면 정보를 복호화 할 수 없음!
SSL 통신 과정
통신을 위해선 핸드쉐이크 -> 세션 -> 세션 종료의 과정을 거침
- SSL 핸드쉐이크 수행 : 데이터를 주고 받기 위해 어떤 방법을 사용해야 하는지 서로의 상태를 파악
- 세션 : 서로간의 협상이 완료되면 SSL 세션이 생성되고 클라이언트와 서버는 원하는 데터를 주고받게됨
- 세션 종료 : 데이터 전송의 끝을 서로에게 알리며 세션을 종료
Handshake 단계 원리
- Client Hello 단계 : 클라이언트가 서버에 접속(브라우저 검색창에서 도메인을 입력하는것).
- 클라이언트가 랜덤한 데이터와 자신의 브라우저에서 지원할 수 있는 암호화 방식을 서버에게 먼저 제시
- Sever Hello 단계 : 서버가 클라이언트에게 응답.
- 서버가 생성한 랜덤 데이터와 클라이언트가 제시한 암호화 방식 중에서 선정한 암호화 방식 + 서버 자신의 인증서(공개키와 함께)를 전달
- 인증서 확인
- 클라이언트는 서버에게 받은 인증서가 CA에 의해 발급된 것인지를 확인하기 위해 클라이언트에 내장된 CA 공개키를 이용해서 인증서를 복호화(개인키로 암호화 -> 공개키로 복호화)
만약, 복호화에 성공하였다면 CA의 개인키로 암호화된 문서임이 보증되는것 = 서버를 신뢰 할 수 있게됨
- CA(Certificate Authority) : 서버의 SSL 인증서가 진짜인지 가짜인지 검증하는 인증기관
- 또한, 서버에게 받은 랜덤 데이터 + 클라이언트가 생성한 랜덤 데이터를 통해 pre master secret 키 생성(데이터를 주고 받을 때 암호화하기 위해 사용될 것)
- 사용할 암호화 기법 : 대칭키 => pre master secret 키가 다른 사람들에게 노출되어선 안되는것!
∴ 서버에게 전달할때는 공개키 방식으로 전달. 서버의 공개키로 pre master secret 를 암호화해서 서버로 전송하면 서버는 자신의 비공개키로 복호화 하는것(서버의 공개키는 서버로부터 받은 인증서 안에 존재)
- pre master secret키 서버로 전송
- 서버에게 받은 SSL 인증서 안에 들어있는 공개키를 이용하여 pre master secret 키를 암호화하여 서버로 전송
- 클라이언트와 서버가 pre master secret 키를 공유하게 되는것
- pre mster secret 복호화
- mater secret 및 session key 생성
- 서버와 클라이언트는 일련의 과정을 거쳐 pre master secret 값을 master secret 값으로 만듦
(master secret 키를 이용하여 Session Key 가 만들어지는데 session key 값을 이용해 서버와 클라이언트는 데이터를 대칭키 방식으로 암호환 한 후에 주고 받음 = session key 를 모두 공유하는것)
Session 단계 원리
: 실제로 서버와 클라이언트가 데이터를 주고 받는 단계
- 정보를 상대방에게 전송하기 전에 session key 값을 이용해서 대칭키 방식으로 암호화 진행
( 암호화 된 정보가 상대방에게 전송. 상대방도 session key값을 알고 있기 때만에 복호화 가능)
- 왜 대칭키와 공개키를 같이 사용하는가?
: 공개키만 사용한다면 큰 비용문제와 보안 위험으로 인해서
∴ 데이터를 안정하게 주고 받을 수 있는 공개키 방식으로 대칭키를 암호화 하고
실제 데이터를 주고 받을 때는 대칭키를 이용해서 데이터를 주고 받는 것
End Session 단계 원리
: 데이터의 전송이 끝나면 SSL 통신이 끝남을 서로에게 알려줌
- 통신에서 사용한 대칭키인 session key 는 폐기
SSL 인증서
: 라이언트와 서버간의 통신을 제3자가 보증해주는 문서
클라이언트가 서버에 접속하면
서버는 클라이언트에게 인증서 정보를 전달
클라이언트는 인증서 정보가 신뢰할 수 있는것인지 검증
검증이 완료된 후 데이터를 보내는 등 이후 절차를 진행하게됨
SSL 인증서의 역할
- 클라이언트가 접속한 서버가 신뢰할 수 있는 서버임을 보장
- SSL 통신에 사용할 공개키를 클라이언트에게 제공
References
https://www.digicert.com/kr/what-is-ssl-tls-https/
https://goodgid.github.io/TLS-SSL/
https://12bme.tistory.com/80
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=skinfosec2000&logNo=222135874222
https://www.crocus.co.kr/1387