Seongho's Dev Story

Seongho's Dev Story

이성호의 개발 이야기

HTTP와 HTTPS(SSL)의 차이

오늘날의 우리는 HTTP와 HTTPS라는 통신 규약을 사용하며 살아가고 있습니다.
우리가 사용하고 있는 그것들을 이해해봅시다.

HTTP VS HTTPS

HTTP

HTTP는 Hypertext Transfer Protocol의 약자입니다. 풀어서 해석하자면 이렇습니다.

다시 합쳐 생각하자면 Client와 Server가 HTML을 주고받을 수 있는 양식과 규칙의 체계입니다. HTTP를 통해 Server는 Client가 원하는 것이 무엇인지 알고 HTML이 포함된 Text를 줄 수 있습니다. 누군가 이 신호를 가로챈다면 Text의 내용을 본다거나 변조할 수 있습니다.

HTTP 요약

HTTPS

HTTPS는 HTTP에서 S가 추가됐습니다. S는 Over Secure Socket Layer의 약자입니다. 이 약자에서 중요한 것은 Secure(보안)입니다. 쉽게 말하자면 보안이 강화된 HTTP입니다.

이것이 왜 존재하게 되었냐면 앞서 말했듯이 HTTP는 누군가 이 신호를 가로챌 수 있고 변조할 수 있습니다. 악의적인 의도로 회원 정보, 결제 정보 등등 민감한 정보를 감청하고 변조하지 못하게 하기 위해서입니다. HTTP에 SSL과 같은 보안 계층을 추가함으로써 보안을 강화했습니다.

HTTPS 요약

SSL

넷스케이프에서 개발한 인터넷 보안 Protocol이고, 위에서 말했듯이 SSL은 Secure Socket Layer의 약자입니다.

SSL은 공인된 제 3자 인증 기관이 보증해주는 전자화된 문서(Certificate Authority or CA)로 부터 서버와 클라이언트의 인증을 하는 데 사용됩니다. 또한 브라우저가 CA 목록을 알고 있으므로 여기 포함되어야 공인된 CA가 될 수 있습니다.

SSL의 암호화 종류

SSL의 암호화 종류를 알기에 앞서 키라는 개념을 이해해야 합니다. 암호화를 할 때 사용하는 일종의 비밀번호를 키라고 합니다. 키에 따라 암호화된 결과가 다르기 때문에 키를 알아야만 암호화와 복호화가 가능합니다.

SSL의 동작 방법

대칭키는 보안 문제가 있고, 공개키는 계산 방식이 다소 느리기 때문에 SSL에서는 대칭키와 공개키를 혼합해서 사용합니다.

컴퓨터와 컴퓨터가 네트워크를 이용해서 통신을 할때는 악수(Handshake) -> 전송 -> 세션 종료 3가지 단계가 있습니다. 각 단계에서 주고 받는 정보는 아래와 같습니다.

  1. Client Hello: Client가 접속합니다.
    • Client에서 무작위 데이터를 Server에 전송합니다.
    • Client가 지원하는 암호화 목록을 Server에 전송합니다.
    • 이미 SSL Handshake 단계를 했을 수도 있으니 재사용할 수 있도록 세션 정보를 Server에 전송합니다.
  2. Server Hello: Client Hello에 대해 응답해줍니다.
    • Server에서 무작위 데이터를 Client에 전송합니다.
    • 서버가 최종적으로 사용할 암호화 방식을 결정하고 Client에 전송합니다.
    • 인증서를 Client에 전송합니다.
  3. 클라이언트는 CA 목록에서 해당 인증서가 공인된 CA인지 확인합니다. CA 목록에 없다면 브라우저는 에러를 띄웁니다.
  4. 인증서를 CA 목록에 있는 공개키로 복호화합니다. 성공했다면 CA의 개인키로 암호화된 문서로 보증됩니다.
  5. 다음 세션을 위해 서로 공유한 무작위 데이터로 pre master secret 키를 생성합니다.
    • 이 키는 대칭키라서 노출되어선 안됩니다.
  6. 여기서 공개키 기법을 사용하게 되는데 pre master secret 키를 Server의 공개키로 암호화하고 전송을 합니다.
  7. Server는 자신의 비공개 키로 pre master secret 키를 안전하게 복호화할 수 있는 상태가 됩니다.
  8. Server와 Client는 모두 pre master secret 값을 한번 더 대칭키 기법으로 암호화를 합니다. 그 결과 값을 master secret라고 하며 세션키로 이용됩니다.
    • 그냥 공개키를 사용하면 될텐데 왜 세션키를 대칭키로 사용하냐면 공개키는 알고리즘 계산 방식이 느리기 때문에 안전하게 공개키로 암호화를 하고나서 다시 대칭키로 바꿉니다.
  9. Client와 Server는 Handshake 단계의 끝을 알립니다.
  10. 다음부터는 세션키를 사용해서 검증합니다.
  11. 세션이 끝나면 대칭키인 세션키를 폐지합니다.

Comments