cs지식/Network

[Network] HTTP / HTTPS 비교

jungeun960 2021. 5. 21. 17:24

HTTP(HyperText Transfer Protocol)

  • 인터넷 상에서 클라이언트와 서버가 자원을 주고받을 때 쓰는 통신 규약(80 포트 사용)
  • 서버에서부터 브라우저로 전송되는 정보가 암호화 되지 않아 보안 이슈가 존재합니다.

 

HTTPS(HyperText Transfer Protocol Secure)

  • HTTP에 데이터 암호화 SSL이 추가된 통신규약(443 포트 사용)
  • 인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고받을 때 쓰는 통신 규약으로 텍스트를 암호화합니다. (공개키 암호화 방식으로)

 

+ 공개키(Public Key) 암호화

  • 자신이 가지고 있는 비밀키로만 복호화할 수 있는 공개키를 대중에게 공개함
  • 공개키와 개인키는 서로를 위한 1쌍의 키이다
  • 공개키 : 모두에게 공개 가능한 키
  • 개인키 : 나만 가지고 알고 있어야 하는 키
  • 전달할 메시지를 공개키로 암호화하여 이를 전송하면 개인키로 이를 복호화하여 메시지를 확인할 수 있다.

 

+ HTTPS 통신 흐름

  1. 애플리케이션 서버(A)를 만드는 기업은 HTTPS를 적용하기 위해 공개키와 개인키를 만든다.
  2. 신뢰할 수 있는 CA 기업을 선택하고, 그 기업에게 내 공개키 관리를 부탁하며 계약을 한다.
    • CA란? : Certificate Authority로, 공개키를 저장해주는 신뢰성이 검증된 민간기업
  3.  계약 완료된 CA 기업은 해당 기업의 이름, A서버 공개키, 공개키 암호화 방법을 담은 인증서를 만들고, 해당 인증서를 CA 기업의 개인키로 암호화해서 A서버에게 제공한다.
  4. A서버는 암호화된 인증서를 갖게 되었다. 이제 A서버는 A서버의 공개키로 암호화된 HTTPS 요청이 아닌 요청이 오면, 이 암호화된 인증서를 클라이언트에게 건네준다.
  5. 클라이언트는 main.html 파일을 달라고 A서버에 요청했다고 가정하자. HTTPS 요청이 아니기 때문에 CA기업이 A서버의 정보를 CA 기업의 개인키로 암호화한 인증서를 받게 된다.
    • CA 기업의 공개키는 브라우저가 이미 알고 있다. (세계적으로 신뢰할 수 있는 기업으로 등록되어 있기 때문에, 브라우저가 인증서를 탐색하여 해독이 가능한 것)
  6. 브라우저는 해독한 뒤 A서버의 공개키를 얻게 되었다. 이제 A서버와 통신할 대는 얻은 A서버의 공개키로 암호화해서 요청을 날리게 된다.

 

-> HTTPS 적용해보기

  1. AWS EC2에서 public dns 발급
  2. freenom이라는 무료 도메인 발급 사이트에서 도메인 발급
  3. AWS Route 53에서 EC2에서 발급받은 public dns와 발급받은 도메인 연결 (SSL 인증서를 발급받기 위해서는 도메인 이름을 소유하고 있어야 되기 때문에)
  4. Let's Encrypt라는 무료 SSL 인증서 발급 기관에서 인증서를 발급받아 서버에 적용
반응형