본문 바로가기
WEB

HTTP와 HTTPS, SSL

by BK0625 2023. 1. 19.
반응형

HTTP

hyper transfer protocol의 약자로 www 상에서 정보를 주고 받는 프로토콜로 요청과 응답, 세션, 캐싱, 인증 등을 다룬다.

클라이언트인 웹 브라우저가 서버에 HTTP를 통해서 웹 페이지나 이미지 정보를 요청하면 서버는 이 요청에 응답하여 요구하는 정보를 제공하게 된다. 즉 웹 브라우저와 서버 간의 웹페이지 같은 자원을 주고 받을 때 쓰는 통신 규약이라고 할 수 있다. 하지만 결국엔 텍스트 교환이기 때문에 네트워크에서 신호를 가로채어 본다면 내용이 노출 될 수 있다.

HTTPS

인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 이용하여 웹 브라우저(클라이언트)와 서버가 데이터를 주고 받는 통신 규약이다. HTTPS는 http 메세지를 암호화 하는 것이다.(HTTPS의 s가 Secure socket, 즉 보안 통신망을 의미) 암호화 방식의 원리는 공개키 암호화 방식이다.

HTTP와 HTTPS

공개키 암호화 방식

암호화, 복호화 할 수 있는 서로 다른 키 2개를 만들어서 공개키는 공개키 저장소에 등록해 놓고 서버는 서버만 알 수 있는 개인키를 소유하여 공개키로 암호화된 http 요청, 즉 HTTPS 프로토콜을 사용한 요청이 온다면 서버는 개인키를 이용하여 1번키로 암호화된 문장을 해독하게 된다. 서버는 요청이 무엇인지 알고 요청에 맞는 응답을 다시 개인키로 암호화 해서 요청한 클라이언트에게 보내주게 된다. 응답을 받은 클라이언트는 공개키를 이용해서 개인키로 암호호된 HTTPS 응답을 해독하고 사용한다.

CA

공개키 저장소, 민간기업이지만 아무나 운영할 수 없고 신뢰성이 검증된 기업만 운영 가능

SSL

보안 소켓 기능 인증서. 종종 디지털 인증서로 불리며 브라우저와 서버 사이의 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술이다. 웹 사이트가 SSL/TLS 인증서로 보호되는 경우 HTTPS가 url에 표시가 된다

url에 https가 표시


웹 사이트에서 주고 받는 모든 유형의 정보를 보호한다.(사실 TLS라고 전송 계층보안이지만 SSL로 불린다고 한다.)

SSL원리


1. ClientHello - 클라이언트가 특정 주소에 접근하면 해당하는 서버에 요청을 보낸다. (난수 데이터, 암호화 프로토콜 정보, 클라이언트가 사용 가능한 암호화 기법, 세션 아이디, 기타 확장 정보) 따라서 해당 클라이언트를 식별하고 어떤 암호화를 사용할 수 있는지 등을 서버가 인지하도록 한다.

2. ServerHello - 서버가 클라이언트 요청을 받으면 난수데이터, 서버가 사용할 암호화 기법, 인증서(CA, 도메인 공개키) 등의 정보를 담아 클라이언트에게 답한다. 클라이언트가 사용 가능하다고 통보한 암호화 기법 중 서버에서 활용할 암호화 기법을 전달하여 동일한 암호화 기법으로 송수신할 수 있도록 선언.

3. 인증서 검토 - 서버가 전달한 인증서가 실제 해당 서버의 인증서인지 신뢰할 수 있는 CA에서 발급된 것인지 등 인증서를 검토한다.

4. Premaster Secret 송수신 – ClientHello, ServerHello에서 송수신한 난수 데이터를 조합하여 Premaster Secret을 생성한다. 이를 ServerHello에서 전달받았던 공개키로 암호화 한다. 이 데이터는 서버가 가진 개인키로만 복호화가 가능하다. (즉 탈취당하더라도 그 내용이 보호)

5. 통신 키 생성 – 보유한 Premaster Secret을 토대로 Master Secret, Session Key를 생성한다. 이를 통해 클라이언트와 서버가 동일한 키를 보유하게 됨으로 자신들끼리의 암호화 통신이 가능하다.

6. 데이터 송수신 – 필요한 데이터는 Session Key를 통한 대칭키 암호화 방식으로 암/복호화 하여 통신한다.
세션 종료 – 클라이언트와 연결이 끊겼을 경우 사용했던 Session Key는 폐기한다.



전에 회사에서 공부한 내용인데 정리할겸 포스팅...

틀린 부분이 있다면 지적 감사히 받겠습니다 :)

반응형

'WEB' 카테고리의 다른 글

[WEB] JWT 알아보기 (Json Web Token)  (0) 2023.09.14
[Redis] Redis란?  (0) 2023.09.11
[WEB] 웹서버와 WAS의 차이  (0) 2023.07.19
[WEB] URL과 URI의 차이  (0) 2023.07.13