hypertext transfer protocol over secure socket layer
웹 통신 protocol인 http에서 보안이 강화된 버전
기본 TCP/IP 포트는 443
url은http://
가 아닌https://
를 사용
https는 TLS (transport layer security, SSL(secure socket layer)의 현 명칭) 라는 이름의 보안 protocol을 사용해, 세션 데이터를 암호화한다.
(220524 update) http의 문제는 서버가 브라우저로 보내는 정보가 암호화되지 않는다는 점이다.
이 문제를 TLS/SSL로 해결하는 것.
데이터를 주고 받을 때, 크게 대칭키 암호화와 비대칭키 암호화로 나뉜다.
🔒 대칭키 암호화
수신자가 정보와 함께 비밀키를 수신자에게 전달하면, 수신자는 동일한 비밀키를 갖고 정보를 열람할 수 있다. 하지만 이 때 중간에 누군가 비밀키를 가로챌 수 있어 보안성이 떨어진다.
🔒 비대칭키 암호화
그래서 수신자가 정보를 암호화 할 때 사용하는 키와, 송신자가 암호를 풀기 위해 사용하는 키가 다르면 보안이 강화된다. 공개키를 알아도 비밀키를 모르면 정보를 열람할 수 없다.
비대칭키 암호화는 다시 2가지 방법으로 나뉜다.
(220524 update)
🔒 공개키를 통한 암호화
즉, 이 방식은 정보 자체에 대한 암호화가 필요할 때 사용한다.
🔒 개인키(비밀키)를 통한 암호화
그래서 이 방식은 '누가 데이터를 보냈느냐'를 확인하는데 초점이 맞춰져있다.
즉 정보를 보내준 사람의 신원 확인이 필요할 때 (e.g. 전자서명) 사용되는 방식이다.
만약 모든 정보를 공개키 암호화 방식으로 운영한다면?
실제로는 그렇지 않다. 모든 데이터를 하나하나 비대칭키로 관리하면 컴퓨터에게 큰 부담이기에, 보통은 공개키 암호화/개인키 암호화를 섞는 방식을 채택하고 있다.
1) 프로토콜과 사용할 암호화 알고리즘에 대한 동의가 이뤄진다.
2) 클라이언트는 임시 생성값을 서버에 보내 접속을 시도한다.
3) 서버 또한 이에 대응하는 임시 생성값을 만들어 인증서/공개키와 함께 보낸다.
4) 클라이언트는 클라이언트에 내장된 CA의 공개키를 이용해 인증서를 복호화한다.
5) 검증 후, 클라이언트는 pre master secret key(위의 과정에서 생성된 임시 생성값을 조합해 만든 key) 를 서버가 준 공개키로 암호화해서 서버에 보낸다
6) 서버는 자신의 개인키로 이를 복호화한다.
7) 이렇게 클라이언트와 서버는 모두 pre master secret key를 공유하게 된다 (대칭키 완성)
8) 클라이언트와 서버는 pre master secret key를 master secret key로 바꾸고, 이는 다시 session key를 생성한다
9) 이 session key로 클라이언트와 서버는 대칭키 방식으로 통신한다
Comodo 등 SSL인증서를 발급하는 Certificate Authority가 존재한다.
각 브라우저는 CA 리스트를 내장하고 있으며 이 리스트를 통해 서버의 SSL 인증 여부를 확인해 준다. 인증서가 없으면 경고창 아이콘이 뜬다.
참고 자료:
https://ko.wikipedia.org/wiki/%EC%9D%B8%EC%A6%9D_%EA%B8%B0%EA%B4%80
https://ko.wikipedia.org/wiki/%EA%B3%B5%EA%B0%9C_%ED%82%A4_%EC%95%94%ED%98%B8_%EB%B0%A9%EC%8B%9D
https://universitytomorrow.com/22
https://velog.io/@somday/클라이언트와-서버의-통신은-어떻게-안전하게-통신을-할-수-있을까