HTTP 와 HTTPS 의 차이는 무엇일까?
웹 브라우저의 주소창을 자세히 보면
어떤 곳은 http:// 로 어떤 곳은 https://로 시작한다.
주소 창에 http://나 https://를 굳이 쓰지 않아도 브라우저가 알아서 자동으로 넣어준다.
흔히 접하지만 몰랐던 이 둘에 대한 설명과 차이에 대해 포스팅 하겠다.
HTTP (HyperText Transfer Protocol)
HTTP란, HTML같은 문서( 확장자가 php, aspx, jsp도 html이다. 확장자가 아닌 헤더 타입보고 html인줄 판단한다.)를 웹 브라우저가 웹 서버에 요청하는 프로토콜이다.
프로토콜이라는 것은 일종의 대화 규칙이다.
우리가 특정 사이트에 들어가 지정된 코드(ID, PW 등)를 누르면 정해진 응답이 온다.
이처럼 웹서버와 웹 브라우저간에 서로 페이지를 요청하고, 받기 위해 텍스트 메시지를 교환하는 게 HTTP이다. 텍스트이기 때문에 만약 내가 있는 네트워크 안에서 누가 그 신호를 가로채 본다면 내용이 그대로 보이게 된다. 만약 내가 메일을 읽고 있는데 누가 그 신호를 가로챈다면 메일 내용을 읽을 수 있는 것이다. -> 보안에 취약하다.
HTTPS (HTTP + Secure Socket Layer)
HTTPS는 HTTP와 거의 같지만, 모든 통신 내용을 암호화하는 것이 다르다.
HTTPS의 S가 Secure Socket Layer(SSL), 안전한 통신망을 뜻한다.
즉, 보안이 강화된 HTTP라는 것을 알 수 있다. HTTP는 암호화되지 않은 방법이라 서버와 클라이언트가 주고 받는 메시지 감청이 쉽다는 반면, HTTPS는 HTTP에 SSL을 더함으로써 이러한 단점을 보완했다.
HTTPS와 SSL? TLS?
웹이 인터넷 위에서 돌아가는 서비스 중의 하나인 것처럼
HTTPS도 SSL 프로토콜 위에서 돌아가는 프로토콜이다. 각각 독립된 프로토콜로 이해하면 된다.
HTTPS가 HTTP 통신을 하는 소켓 부분을 SSL(Secure Socket Layer)이나 TLS(Transport Layer SEcurity)이라는 프로토콜로 대체하는 것인데,
SSL과 TLS는 같은 개념이다. 현재는 SSL이라는 이름이 훨씬 많이 사용된다.
HTTPS의 동작원리
HTTPS은 공개키 암호기법과 대칭키 암호기법의 양쪽 성질을 가진 하이브리드 암호 시스템이다.
클라이언트와 서버가 주고 받는 실제 정보는 대칭키 방식으로 암호화하고,
대칭키 방식으로 암호화된 실제 정보를 복화화할 때 사용할 대칭키는 공개키 방식으로 암호화해서
클라이언트와 서버가 주고 받는다.
-실제 데이터 : 대칭키 방식(암호, 복호화 키가 모두 같음)
-대칭키의 복호화 키 : 공개키 방식(암호, 복호화키가 각각 다름)
대칭키란,
동일한 키로 암호화와 복호화를 같이 할 수 있는 방식의 암호화 기법을 의미한다.
하지만 위와같은 대칭키의 방식은 단점이 있다. 암호를 주고 받는 사람들 사이에 대칭키를 전달하는 것이 어렵다는 점이다. 대칭키가 유출되면 키를 획득한 공격자는 암호의 내용을 복호화할 수 있기 때문에 암호가 무용지물이 된다.
이러한 대칭키의 단점을 보완하기 위해 나온 것이 공개키 암호화 방식이다.
공개키란,
두 개의 키를 갖게 되는데 A키로 암호화를 하면 B키로 복호화 할 수 있고, B키로 암호화 하면 A키로 복호화 할 수 있는 방식이다. 두 개의 키 중 하나를 비공개키로 하고, 나머지 키를 공개키로 한다.
비공개키는 자신만 가지고 있고, 공개키는 타인에게 제공한다.
공개키를 제공 받은 타인은 공개키를 이용해서 정보를 암호화한다.
암호화한 정보를 비공개키를 가지고 있는 사람에게 전송한다. 비공개키의 소유자는 이 키를 이용해서 암호화된 정보를 복호화 한다. 이 과정에서 공개키가 유출된다고해도 비공개키를 모르면 정보를 복호화할 수 없기 때문에 안전하다. 공개키-> 암호화(O), 복호화(X)
위 방식을 응용할 수 있다.
비공개키의 소유자는 비공개키를 이용해서 정보를 암호화 한 후에 공개 키와 함께 암호화된 정보를 전송한다. 정보와 공개키를 획득한 사람은 공개키를 이용해서 암호화된 정보를 복호화한다.
이 과정에서 공개키가 유출된다면 의도하지 않은 공격자에 의해서 데이터가 복호화 될 위험이 있다.
이러한 위험에도 불구하고 비공개키를 이용해서 암호화를 하는 이유가 무엇일까?
-> 데이터를 보호하는 것이 목적이 아니기 때문이다.
암호화된 데이터를 공개키를 가지고 복호화 할 수 있다는 것은 그 데이터가 공개키와 쌍을 이루는 비공개 키에 의해서 암호화 되었다는 것을 의미한다.
즉 공개키가 데이터를 제공한 사람의 신원을 보장해주게 되는 것이다.
신원을 보장한다는게 무슨 뜻일까?
아래 예를 들어 설명하도록 하겠다.
=> 옥션 사이트에서는 A, B라는 키를 가지고 있다. 그리고 이 B라는 키(공개 키)만 사용자들에게 알려준다. 그리고 옥션 사이트에 웹브라우저가 연결을 시도할 때, 파일 암호화 키를 이 A, B키로 암호화해서 보내준다. 그러면 사용자들은 B라는 키로 데이터를 풀어 볼 수 있다. A는 옥션 관리자 말고는 아무도 모르기 때문에 B만 알아서는 옥션과 똑같이 암호화할 수 없다. 즉, 사용자는 B로 풀어봐서 풀어지면 이 데이터는 A키를 아는 옥션 관리자가 암호화한 것이라는 걸 알 수 있는 것이다.
http 프로토콜의 경우 중간에서 네트워크 데이터를 가로채서 마치 자기가 옥션 사이트인 것 처럼 해서 가짜 페이지를 보낼 수도 있다. 하지만 https의 경우에는 A키를 모르기 때문에 중간에서 누가 그렇게 할 수가 없다. 이렇게 해서 반대편이 옥션이라는 것을 우리는 믿을 수 있다.
(사실 중간에 시간이 주어져서 암호화를 풀 수도 있겠지만, 만일 1024비트 암호화를 사용한다면
2의1024승인데,,,2의 10승이 1024... 1024를 약 백번 정도 곱한다고 생각하면 된다... 천문학적인 숫자여서 슈퍼컴으로 풀어도 몇 천 년은 해야 할 것이다,,,그래서 안전!)
=> 이처럼 신원을 보장해주는 것이 SSL 인증서이다!
SSL 인증서란?
*SSL 인증서의 기능 2가지*
1. 클라이언트가 접속한 서버가 신뢰 할 수 있는 서버임을 보장한다.
2. SSL 통신에 사용할 공개키를 클라이언트에게 제공한다.
*SSL 인증서의 내용*
SSL 인증서에는 다음과 같은 정보가 포함되어 있다.
1. 서비스의 정보 (인증서를 발급한 CA, 서비스의 도메인 등등)
: 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는가?
2. 서버 측 공개키 (공개키의 내용, 공개키의 암호화 방법)
: 서버와 통신을 할 때 사용할 공개키 + 그 공개키의 암호화 방법
*CA*
인증서의 역할은 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지를 보장하는 역할을 한다. 이 역할을 하는 민간기업들이 있는데 이런 기업을들 CA(Certificate authority) 혹은 Root Certificate 라고 부른다. CA는 아무 기업이나 할 수 있는 것이 아니고 신뢰성이 엄격하게 공인된 기업들 만이 참여 가능하다.
-> SSL을 통해서 암호화된 통신을 제공하려는 서비스는 CA를 통해서 인증서를 구입해야 한다.
공인되지 않은 사설 CA의 인증서를 이용하는 경우 브라우저는 다음과 같은 경고를 출력한다.
안전이 보장된 HTTPS,
그럼에도 불구하고 왜 아직까지 HTTP를 사용하는 걸까?
HTTPS 암호화를 하려면 웹 서버에 부하가 생기고, 위에서 말한 B가 그 서버의 인증서가 되는데,
인증서를 발급해주는 CA에 비싼 돈을 주고 사야하므로, 특히 우리 나라 웹 사이트들은 잘 쓰지 않는다.
하지만 보안이 철저해야하는 금융 사이트나, 외국 사이트(구글 등)에서는 HTTPS는 필수이다.
또 HTTP는 비연결형으로 웹 페이지를 보는 중 인터넷 연결이 끊겼다가 다시 연결되어도 페이지를 계속 볼 수 있지만, HTTPS의 경우에는 소켓(데이터를 주고 받는 경로)자체에서 인증을 하기 때문에
인터넷 연결이 끊기면 소켓 연결도 끊어져서 다시 HTTPS 인증을 해야 한다.
그래서 시간이 또 걸린다.
(본인의 경우, 전철에서 와이파이로 모바일 계좌이체를 하는 도중에 끊긴적이 있었는데... 다시 공인인증서로 로그인하고 보안카드를 다시 꺼내 입력하는 번거로움을 감수해야 했다...^_ㅠ지켜줘서 고마워...)
그래서, 아무나 봐도 상관 없는 페이지는 HTTP로, 남에게 보여서는 안되는 금융 정보나 메일 등 중요한 페이지는 HTTPS로 하는 것이다.
결론: 보안이 중요한 페이지라면 https://로 시작하는지 확인해보자!!
'▒그냥 적은거야' 카테고리의 다른 글
HD TUNE (0) | 2017.06.12 |
---|---|
네트워크 목록이 안보일때 (0) | 2017.05.26 |
wuapp.exe 을(를) 찾을 수 없습니다. 란 메세지 발생시 조치방법 (0) | 2017.04.21 |
GTX 1050 1060 1070 드라이버 설치 오류 원인 (0) | 2017.04.04 |
GPT파티션으로 윈도우 설치가 안될때 (0) | 2017.02.17 |