HTTPS는 HTTP와 통신하는 소켓을 SSL로 대체한 것이다. SSL프로토콜은 보안 프로토콜로 대칭키/비대칭키 기반으로 데이터를 암호화한다.
실제 전송되는 데이터의 암호화에는 대칭키 암호화 방식을 사용하고, 키 교환 시에는 비대칭키 암호화 방식을 사용한다.
그럼 먼저 이 두개의 개념을 알아보자.
대칭키
- 암복호화에 사용되는 키가 동일한 암호화 방식
- 비대칭키보다 빠른속도로 암복호화하는 하는 장점을 가짐
- 다른 사람들에게 내가 정한 비밀키가 무엇인지 알려줘야하는 키교환 문제 존재
- 비밀키를 알려주다보면 키가 노출되어 보안문제 가능성 존재
비대칭키
- 암복호화에 사용되는 키가 다른 암호화 방식
- 공개키로 암호화하고 공개키와 매칭되는 개인키로만 복호화 가능
- 공개키는 누구든지 알아도 상관없고 개인키는 복호화해야 하는 대상만 알 수 있도록 잘 보관
- 키가 공개되어 있어 키교환 문제는 해결하지만 속도가 느림
- 계산하는데 복잡하고 시간복잡도가 높음
HTTPS통신에는 제 3자 인증을 사용한다. Let's Encrypt와 같은 인증기관으로 부터 공인인증서를 발급받아 서버에 설치해야 HTTPS통신을 할 수 있다.
SSL 동작 방식
i) 사용자가 웹브라우저로 사이트에 접속하면 웹서버는 인증서를 웹 브라우저에게 보낸다. 이 인증서에는 인증기관의 개인키로 암호화된 사이트의 정보와 공개키가 들어 있다.
ii) 웹 브라우저는 이미 가지고 있는 인증기관의 공개키로 웹 서버에서 받은 인증서를 복호화 해서 확인한다.
iii) 웹 브라우저는 실제 데이터의 암호화에 사용될 대칭키를 생성하고, 인증서에서 꺼낸 웹 서버 측의 공개키로 암호화 해서 웹 서버로 보낸다.
iv) 웹서버는 자신이 가지고 있는 개인키로 웹 브라우저가 보내온 대칭키를 복호화 해서 얻는다. 이제 이 대칭키로 데이터를 암호화해서 주고 받게 된다.
References
https://offbyone.tistory.com/274
'Develop' 카테고리의 다른 글
[웹서버] Apache vs Nginx (Event-driven 구조란?) (0) | 2021.11.06 |
---|
댓글