HTTP 와 HTTPS의 차이점

_sqrlkoo·2022년 8월 23일
0
post-custom-banner

백엔드와 협업 하면서 종종 HTTP와 HTTPS를 들었다.

문득 궁금했다. 그 둘의 차이는 무엇일까?

그래서 같이 공부하는 다른 백엔드를 공부하는 어떤분에게 질문했다.

"HTTP 와 HTTPS의 차이점은 뭐에요?"

생각보다 명확한 대답을 듣지못해 내가 공부해서 알려주기로 했다.

HTTP vs HTTPS의 차이점을 알아보자

익숙하겠지만 HTTP는 Hyper Text Transfer Protocol의 줄임말으로써 서버와 클라이언트간에 데이터를 주고 받는 프로토콜이다. HTTP는 텍스트, 이미지,영상, JSON 등등 거의 모든 형태의 데이터를 전송할수 있다.

프로토콜은 뭘까?

컴퓨터와 컴퓨터 사이, 또는 한 장치와 다른 장치 사이에서 데이터를 원활히 주고받기 위하여 약속한 여러 가지 규약(規約). 이 규약에는 신호 송신의 순서, 데이터의 표현법, 오류 검출법 따위가 있다.

간략하게 설명하자면 전화 통화 시 "여보세요" 라고 시작하는게 사회적 협약인 것과 같다.

HTTP 통신은 클라이언트와 서버간의 통신에 있어서 별다른 보안 조치가 없기때문에 만약 누군가 네트워크 신호를 가로챈다면 HTTP의 내용은 그대로 외부에 노출된다. 중요 정보가 없는 소규모의 프로젝트라면 문제가 되지 않겠지만 고객의 개인정보나 비밀을 취급하는 대규모 서비스라면 큰 보안적 허점이 될 것이다. 이런 문제를 해결하기 위해 등장한 것이 HTTPS이다.

벌써 결론이 나왔지만 결국 HTTP 와 HTTPS의 차이점은 보안의 차이라고 생각할 수 있다.

그래서 HTTPS는 뭔데?

요즘은 거의 모든 사이트의 주소창에서 자물쇠 표시를 볼 수 있습니다. HTTPS가 적용되었다는걸 알려주는게 바로 저 자물쇠 입니다. HTTPS가 옛날부터 보편화되어있지는 않았습니다. 처음에는 전자상거래 등 고객의 중요 정보를 다루는 사이트 위주로 사용되었습니다.

그러다가 2014년 구글에서는 HTTP를 HTTPS로 변환하라고 권고하기 시작합니다. 귀찮은 작업을 시킬때는 보상이 있어야겠죠? 구글은 HTTPS를 적용하는 사이트들에게 SEO(검색 엔진 최적화)에 있어서 가산점을 주겠다고 합니다. 사용자 정보의 안전성도 보장받고, 사용자들의 웹사이트 유입도 늘릴수 있으니 HTTPS로 변환할 이유는 충분했을겁니다.

어떤 원리로 보안이슈를 해결하는가?

SSL(Secure Socket Layer)이라는 프로토콜을 사용해 주고 받는 정보를 암호화한다. 이후 SSL은 TLS (Transport Layer Security)로 발전되어 현재는 SSL/TLS라는 단어를 혼용해서 사용하고 있다.

SSL이 동작하는 방식을 알기 위해서는 기본적인 암호화의 개념을 알아야 한다. 암호화(encryption)는 어떤 정보를 아무나 읽지 못하도록 키를 가지고 특정 알고리즘을 돌려 정보를 숨기는 것을 말한다. 키를 가지고 다시 알고리즘을 역행하면 복호화(decryption)가 된다. 키가 없으면 암호화와 복호화를 하지 못하기 때문에 키는 굉장히 중요한 역할을 한다고 볼 수 있다. 키도 여러가지 종류가 있는데 어떤 키를 사용할 것인가에 따라 암호화하고 복호화하는 방식도 달라진다.

  • 대칭키 암호화 : 서버와 클라이언트가 암호화/복호화에 동일한 비밀키를 사용하는 방식, 키를 공유하는데 어려움이 있으나 속도가 빠르다.

  • 비대칭키 암호화 : 서버와 클라이언트가 암호화/복호화에 각각 다른 비밀키를 사용하는 방식, 공개키를 통해서 암호화를 하고 비밀키를 통해서 복호화를 한다. 공개키는 공개해도 상관없으니 키 관리에 어려움이 없으나, 속도가 느리다.

  • 인증기관(Certificate Authority, CA) : 클라이언트가 접속을 요청한 서버가 의도한 서버가 맞는지 인증해주는 역할을 하는 보증된 기업들이다. 클라이언트는 서버에 요청을 해서 CA가 발급한 인증서를 받은 뒤 CA의 공개키로 복호화하여 신뢰할 만한 인증서인지 검증한다. CA의 공개키로 복호화되는 자료는 오직 CA의 비밀키로 암호화한 경우밖에 없기 때문에 복호화되면 신뢰할 만한 것이다.

SSL은 대칭키 방식과 비대칭키 방식을 적절히 섞어서 사용하면서 신뢰도를 높인다. 그 좋은 비대칭키 방식을 놔두고 대칭키를 혼용하여 사용하는 이유는 비대칭키의 방식이 컴퓨터에 과부화를 주기 때문이다. 그래서 처음에는 비대칭키를 사용해 대칭키를 공유한 후에 대칭키를 이용해 데이터를 주고 받는다. 세션이 종료되면 사용한 대칭키를 폐기하는 방식으로 보안성을 높인다.

그럼 자세하게 어떤식으로 보안을 유지하는지 확인하자!

  1. 클라이언트가 서버에 접속하기 위해 클라이언트가 생성한 랜덤 데이터(1)를 서버에 보낸다.

  2. 서버는 클라이언트에게 서버가 생성한 랜덤데이터(2)와 CA에서 발급받은 인증서를 보낸다. 인증서가 필요한 이유는 서버가 신뢰할 만한 서버인지 확인하기 위함이다.

  3. 클라이언트는 그 인증서를 받아 CA의 공개키로 복호화 한다. 인증서를 복호화 하면 접속하려는 사이트의 정보와 사이트의 공개키가 들어있다.

  4. 랜덤데이터1과 랜덤데이터2를 조합하여 대칭키로 사용할 것인데 이는 탈취당하면 안되기 때문에 인증서에 들어있던 공개키로 암호화하여 서버에 전송한다.

  5. 서버는 가지고 있는 비밀키를 이용해 복호화하여 클라이언트가 보낸 대칭키를 얻는다.

  6. 이후 그 대칭키를 통해 데이터를 주고 받는다.

  7. 세션이 종료되면 대칭키를 폐기한다.

post-custom-banner

4개의 댓글

comment-user-thumbnail
2022년 8월 24일

asdsadadsadasdad

답글 달기
comment-user-thumbnail
2022년 8월 24일

asdadadadsadadasd

답글 달기
comment-user-thumbnail
2022년 8월 24일

meme

답글 달기
comment-user-thumbnail
2022년 8월 24일

asdassdsdadasdsadsasddasd

답글 달기