HTTPS란?

HTTP 프로토콜은 위장이나 도난등의 보안문제가 발생할 수 있습니다.
이런 문제를 방지해주는 HTTPS에 대해 알아봅시다.

HTTP의 약점

HTTP는 주로 다음과 같은 약점을 가지고 있습니다.

평문(암호화 하지 않은) 통신이기 때문에 도청이 가능하다.
통신 상대를 확인하지 않기 때문에 위장이 가능하다
완전성을 증명할 수 없기 때문에 변조가 가능하다

이 약점은 다른 암호화 하지 않는 프로토콜에도 공통되는 문제입니다.

변조를 방지하려면?

HTTP를 사용하여 안전성을 확인하는 방법은 있으나 확실하거나 편리한 방법이 현재 존재하지 않습니다.
그중에도 자주 사용되는 방법으로는 MD5나 SHA-1 등의 해시 값을 이용하는 방법과 파일의 디지털 서명을 확인하는 방법이 있습니다.
허나 MD5 등이 적절하게 수정되어 있으면 유저로써 알 수가 없기 때문에 확실히 방지하기 위하여 HTTPS를 사용할 필요가 있습니다.

HTTP에 암호화와 인증과 안전성 보호를 더한 HTTPS

위에 열거한 약점을 보완하기 위하여 HTTP에 암호화나 인증 등의 구조를 더한 것을 HTTPS(HTTP Secure)라고 부릅니다.
HTTPS는 웹페지이의 로그인이나 쇼핑의 결제화면 등에서 사용되고 있습니다.
HTTPS를 사용할 경우 http://가 아닌 https://를 사용합니다.
브라우저에서도 HTTPS가 유효한 웹 사잍트에 액세스할 경우 자물쇠 마크가 표시되는 등 HTTP와 다르게 표시되는 경우가 있습니다.

HTTP에 SSL의 껍질을 씌우다

HTTPS는 새로운 애플리케이션 계층의 프로토콜이 아닙니다.
HTTP 통신을 하는 소켓 부분을 SSL(Secure Socket Layer)이나 TLS(Transport Layer SEcurity)이라는 프로토콜로 대체하고 있을 뿐 입니다.
무슨소리냐! HTTPS는 직접 TCP와 통신하지 않고 SSL과 통신을 하게 됩니다.
SSL을 사용함으로써 암호화, 증명서, 완전성 보호를 이용할 수 있게 됩니다.

SSL?

SSL은 HTTP와 독립된 프로토콜입니다.
애플리케이션 계층에서 동작하는 SMTP나 Telnet 등에서도 이용될 수 있습니다.
SSL은 HTTP뿐만 아니라 세계 어느 곳에서도 널리 사용할 수 있는 네트워크 보안기술입니다.

HTTPS는 하이브리드 암호 시스템

하이브리드 암호 시스템?
HTTPS는 공통키 암호와 공개키 암호의 양쪽 성질을 가진 하이브리드 암호 시스템입니다.
두가지 방식을 조합해서 장점을 살립니다.
키를 교환하는 곳에서는 공개키 암호를 사용하고 그 후의 통신에서 메시지를 교환하는 곳에서는 공통키 암호를 사용합니다.
그렇다면 공통키 암호와 공개키 암호는 무었일까요? 아래 간단히게 정리해보았습니다.

공통키 암호

상호간에 키를 교환하는 암호화 방식을 공개키 암호화 방식이라고 합니다.
SSL에서는 공개키 암호화 방식을 채용하고 있습니다.
암호화, 복호화에 하나의 키를 같이 사용하는 방식입니다.

하지만 키를 누군가 손에 넣으면 누구라도 암호를 해독할 수 있는 문제가 있습니다.

공개키 암호

공개키 암호는 공통키 암호의 문제를 해결하기 위해 등장한 방식입니다.
공개키 암호에서는 서로 다른 두 개의 키 페어(쌍)를 사용합니다.
비밀키(private key)와 공개키(public key)가 그것입니다.
비밀키는 알려지면 안되는 키이며, 공개키는 누구에게나 알려져도 괜찮은 키입니다.

1. 암호를 보내는 측(클라이언트)이 상대의 공개키를 사용해 암호화를 합니다.
2. 암호화된 정보를 받아들인 상대(서버)는 자신의 비밀키를 사용해 복호화를 실시합니다.

이 방식은 암호를 푸는 비밀키를 통신으로 보낼 필요가 없으며 도청에 의해서 키를 빼앗길 걱정이 없습니다.

하지만 공개키가 진짜인지 아닌지를 서버에서 증명할 수가 없습니다.
이 문제를 해결하는 데는 인증기관(CA : Certificate Authority)과 그 기관이 발행하는 공개키 증명서가 이용되고 있습니다.
인증 기관이란 클라이언트와 서버 모두 신뢰하는 제 3자 기관입니다.
공개키를 인증 기관에 제출하면 인증 기관은 제출된 공개키에 디지털 서명을 하고 서명이 끝난 공개키를 만듭니다.
그리고 공개키 인증서에 서명이 끝난 공개키를 담습니다.

이런 인증 기관의 공개키는 안전하게 클라이언트에 전달되어야 합니다.
하지만 어떤 방법을 사용하더라도 100% 안전이 보장되지 않기 때문에 많은 브라우저가 인증기관의 공개키를 사전에 내장한 상태로 제품을 내놓고 있습니다.

단점

HTTPS를 사용 시 증명서를 구입하여아 합니다. 증명서의 구입 비용이 부담되는 서비스나 개인 웹사이트의 경우 HTTP만 선택하기도 합니다.
그리고 HTTPS를 사용할 경우 처리가 늦어지게 되는 단점이 있습니다. 그 이유는 아래와 같습니다.

1. 클라이언트 요청 시, SSL에 필요한 통신이 추가됩니다
2. 암호화 복호화 계산을 하기 때문에 서버나 클라이언트의 리소스를 추가적으로 소비합니다.

위와 같은 이유로 항상 HTTPS를 사용하지 않습니다.

마치며

HTTPS에 대해서 알아보았습니다.
하지만 암호화나 인증서 등 관련해서는 간단하게 정리하였기 때문에 자세히 알고싶을 경우 다음페이지를 참고하며 좋을 것 같습니다.
SSL Certificates HOWTO

다음 포스트에서는 HTTP를 이용한 인증방식을 알아보겠습니다.