[네트워크] https에 대하여

EMMA·2022년 3월 18일
0
post-thumbnail
post-custom-banner

📍https에 대하여 쫌 더 파보기


https의 정의

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로 해결하는 것.

  • TLS 프로토콜 사용
    • 데이터 무결성 제공
    • 즉 전송 중 데이터가 수정/손상되는 것을 방지하고, 사용자가 의도한 사이트와 통신하고 있음을 보장받을 수 있음
  • SSL인증서를 통한 정보 암호화
    • 주고받는 데이터가 암호화 처리됨
    • 해커는 중간 에 가로채도 데이터 원본이 아닌, 암호화된 데이터를 보게 됨
  • 그 외 장점
    • 검색엔진최적화에 도움
      (구글에서 가산점을 주기도 하고, 더 쉽게 노출되어 사람들이 더 많이 방문할 수 있음)

대칭키/비대칭키 암호화란?

데이터를 주고 받을 때, 크게 대칭키 암호화와 비대칭키 암호화로 나뉜다.

🔒 대칭키 암호화
수신자가 정보와 함께 비밀키를 수신자에게 전달하면, 수신자는 동일한 비밀키를 갖고 정보를 열람할 수 있다. 하지만 이 때 중간에 누군가 비밀키를 가로챌 수 있어 보안성이 떨어진다.

🔒 비대칭키 암호화
그래서 수신자가 정보를 암호화 할 때 사용하는 키와, 송신자가 암호를 풀기 위해 사용하는 키가 다르면 보안이 강화된다. 공개키를 알아도 비밀키를 모르면 정보를 열람할 수 없다.
비대칭키 암호화는 다시 2가지 방법으로 나뉜다.

  • 공개키 암호화
  • 개인키 암호화


비대칭키 암호화의 2가지 방식

(220524 update)
🔒 공개키를 통한 암호화

  • 공개키로 데이터를 암호화하는 방식
  • 복호화 할 때는 해당 공개키의 짝인 개인키로 진행한다 (공캐기로 복호화하는 것은 불가능)

즉, 이 방식은 정보 자체에 대한 암호화가 필요할 때 사용한다.

🔒 개인키(비밀키)를 통한 암호화

  • 개인키로 데이터를 암호화하는 방식
  • 복호화 할 때는 공개키로 진행한다

그래서 이 방식은 '누가 데이터를 보냈느냐'를 확인하는데 초점이 맞춰져있다.
즉 정보를 보내준 사람의 신원 확인이 필요할 때 (e.g. 전자서명) 사용되는 방식이다.

만약 모든 정보를 공개키 암호화 방식으로 운영한다면?
실제로는 그렇지 않다. 모든 데이터를 하나하나 비대칭키로 관리하면 컴퓨터에게 큰 부담이기에, 보통은 공개키 암호화/개인키 암호화를 섞는 방식을 채택하고 있다.


공개키-개인키 교환 과정 (TLS/SSL handshake)

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 홈페이지, https://ssl.comodo.com/

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

http://wiki.hash.kr/index.php/%EA%B3%B5%EA%B0%9C%ED%82%A4_%EC%95%94%ED%98%B8_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

https://universitytomorrow.com/22
https://velog.io/@somday/클라이언트와-서버의-통신은-어떻게-안전하게-통신을-할-수-있을까

profile
예비 개발자의 기술 블로그 | explore, explore and explore
post-custom-banner

0개의 댓글