공부 및 일상기록

[네트워크] HTTPS의 동작 방식 본문

개발/네트워크

[네트워크] HTTPS의 동작 방식

낚시하고싶어요 2023. 1. 9. 18:38

HTTPS는 HTTP를 SSL(Secure socket layer) 프로토콜 위에서 돌아가도록 하여 클라이언트와 서버가 주고받는 텍스트를 암호화 한다. 즉 HTTPS는 HTTP + SSL 인것이다. HTTPS를 사용하면 통신 내용이 공격자에게 공격받는 것을 방지할 수 있고 클라이언트는 접속하려는 서버가 신뢰할 수 있는 서버인지 판단할 수도 있다.

 

SSL프로토콜

SSL프로토콜은 SSL인증서를 사용해 작동한다. SSL인증서는 클라이언트와 서버간의 통신을 제 3자가 보증해주는 전자화된 문서이다. 클라이언트가 서버에 접속하면 서버는 클라이언트에게 이 인증서 정보를 전달한다. 클라이언트는 먼저 이 인증서의 정보가 신뢰할 수 있는지 확인 하고나서 작업을 수행한다.

 

SSL인증서

SSL인증서에는 서비스의 정보(인증서를 발급한 CA, 서비스의 도메인 등)와 서버의 공개키가 포함되어 있다. 이 내용은 제 3자인 CA(Certificate autority : 공개키를 저장해주는 신뢰성이 검증된 민간 기업)에 의해 암호화 된다. 이 때 공개키 암호화 기법이 사용되는데 특이하게 CA의 비공개키로 암호화가 진행된다. 이는 브라우저가 보유한 검증된 CA공개키에 의해 복호화가 가능하다.

브라우저가 보유한 CA기업의 공개키로 복호화가 가능하다는 것은 그 데이터가 공개키와 쌍을 이루는 비공개키를 통해 암호화 되었음을 인증하는 것과 같다. 즉 해당 데이터가 CA기업으로부터 왔음이 증명되는 것이다. 

위 과정을 거치면 사이트는 신뢰할 수 있으므로 해당 공개키를 활용해 서버와 소통하며 대칭키인 "세션키"를 생성하고 이를 활용해 통신을 진행한다.

 

SSL vs TLS

SSL은 TLS(transport layer security)라는 또 다른 프로토콜의 이전 버전이다.

그래서 사실 TLS암호화, TLS handshake라고 부르는 것이 바람직하지만 SSL의 인지도가 워낙 높아서 그냥 SSL로 부르거나 TLS/SSL암호화, TLS/SSL handshake와 같은 방식으로 부른다.

 

제품군에 따라 유형이 다르지만 대부분 비슷한 RSA 키교환 알고리즘을 사용하므로 그걸 기준으로 아래 그림을 보자

https://inuplace.tistory.com/1086

  1. client hello : 클라이언트가 서버로 hello 메세지를 전송하면서 핸드세이크를 시작한다. 이 메세지는 클라이언트가 지원하는 TLS(SSL)버전, 지원되는 암호 제품군, 그리고 client random 이라고 하는 무작위 바이트 문자열이 포함된다.
  2. server hello : 클라이언트 hello 메세지에 대한 응답으로 서버가 서버의 SSL인증서, 서버에서 선택한 암호 제품군, 그리고 서버에서 생성한 또 다른 무작위 바이트 문자열인 "server random"을 포함하는 메세지를 전송한다.
  3. Verify server certificate : 클라이언트가 서버의 SSL 인증서를 인증서 발행 기관(CA)을 통해 검증한다. 이를 통해 서버가 인증서에 명시된 서버인지, 클라이언트가 상호작용 중인 서버가 실제 해당 도메인의 소유자인지를 확인한다.
  4. Client key exchange : 확인이 완료되면 클라이언트는 "The premaster secret"라고 하는 무작위 바이트 문자열을 공개키로 암호화 하여 전송한다. (클라이언트는 서버의 SSL 인증서에 공개키를 받는다.)
  5. Send client certificate : 만약 서버가 클라이언트의 인증서를 요구한다면 서버의 인증서와 같은 방식으로 암호화를 진행하여 함께 전송한다.
  6. Verify client certificate : 서버가 클라이언트로부터 받은 The premaster secret을 개인키를 통해 해독한다.
  7. Client "finished" : 클라이언트가 "client random", "server random", "the premaster secret"을 이용해 대칭키로 활용할 "세션키"를 생성한다. 클라이언트가 세션 키로 암호화된 "finished" 메세지를 전송한다.
  8. Server "finished" : 서버가 "client random", "server random", "the premaster secret"을 이용해 대칭키로 활용할 "세션키"를 생성한다. 서버가 세션키로 암호화된 "finished"메세지를 전송한다.
  9. Exchange message : 핸드셰이크가 완료되고 세션키를 이용해 메세지를 주고받는다.

 

https 동작 방식은? 

  1. A라는 서버를 만드는 기업이 HTTPS를 적용하기 위해 공개키와 개인키를 만듭니다.
  2. 신뢰할 수 있는 CA 기업에 공개키 관리를 부탁하며 계약을 맺습니다.
  3. 계약이 완료된 CA 기업은 A 서버의 공개키, 해당 기업의 이름, 공개키 암호화 방법을 담은 인증서를 만들고 해당 인증서를 CA 기업의 개인키로 암호화해서 A 서버에게 제공합니다.
  4. A 서버는 직접적인 공개키가 아닌 암호화된 인증서를 보유하게 되었습니다.
  5. 클라이언트가 통신 요청을 보내면 앞선 SSL/TLS Handshake 과정을 수행하여 연결을 수립합니다.
  6. 클라이언트와 A 서버와 통신을 시작합니다.

 

 

https://inuplace.tistory.com/1086

 

[Network] HTTPS의 동작방식

안녕하세요 이누입니다!🐶 일반적인 브라우저는 HTTPS가 아닌 HTTP만으로 구성된 사이트에 접속하려하면 경고 메세지를 띄웁니다. 해당 사이트가 신뢰할 수 있는 사이트가 아닐 수 있기 때문입니

inuplace.tistory.com