2017년 10월 13일 금요일

[HTTP 프로토콜 강좌]#28 HTTP 가속 - SSL Termination

오랜만의 포스팅이 된다.

10여일의 길고도 긴 추석명절이 지났다. 명절이 길면 길수록 다시 일상으로 복귀하게 될때의 피로도는 비례적으로 높은것 같다.

오늘은 HTTP의 보안성을 향상시킬 수 있는 SSL 에 대한 이야기를 하려한다.

SSL 그리고 TLS

HTTP는 클라이언트와 웹서버간 통신을 시켜주는 프로토콜이다.
HTTP라는 프로토콜을 이용해서 클라이언트와 웹서버는 서로 메시지 / 데어터를 주고 받지만, 불행하게도 보안성을 제공하지는 않는다.

즉, 클라이언트와 웹서버간 전달하는 메시지 또는 데이터에 개인정보(아이디,비밀번호,주민번호등)가 포함되어 있는 경우에는 중간자가 모두 내용을 들여다 볼수 있다는 뜻이다.

웹(WEB) 이 발전하여 생활의 근간시스템을 제공하면서 보안성에 대한 요구는 점차 증가하였다.
이를 해결하고자 등장한것이 SSL (Secure Socket Layer) 이다.
SSL 은 넷스케이프사가 개발한 것으로 클라이언트와 웹서버간 전달하는 메시지나 데이터를 암호화 하여 중간자가 이를 확인하지 못하게 한다.

SSL 의 필요성이 점차 증가하게 되면서 이에 대한 표준화 요구 역시 생기게 된다. IETF 기구가 넷스케이프사의 SSL 을 기반으로 표준화를 하게 되는데, 바로 SSL을 표준화 한것이 TLS이다.

TLS(Transport Layer Security) 의 초기 버젼은 사실 SSL과 차이가 없었다.
허나, 지금은 여러가지 측면의 기능을 넣고, 발전시킴으로 인해 현재는 1.3까지 공식적으로 소개되고 있다.

TLS라는 용어를 사용하는게 맞지만.. SSL 의 초반 이미지가 너무 강했던 탓일까? TLS로 바뀐뒤에도 여전히 SSL 이라는 용어로 이를 대신하고 있긴 하다.

HTTP 에 SSL 을 이용하여 전송되는 메시지 / 데이터를 암호화 한것을 HTTPS 라고 부르며, 맨뒤의 'S'는 예상했겠지만, Secure 를 의미한다.





일반적인 HTTPS 처리

그럼 HTTPS 를 이용한 통신은 어떻게 이루어지는 지 살펴보자.

HTTP 통신은 TCP 기반위에서 동작하는 프로토콜이므로, TCP 세션이 정상적으로 만들어지고 난 후 메시지 또는 데이터 교환이 이루어진다.

HTTPS 역시 TCP 기반 위에서 동작하는 프로토콜이다.
다만, 클라이언트와 웹서버가 데이터를 전송하기 전 데이터를 암호화할 사전 정보를 교환하는 과정이 추가될 뿐이다.

이 과정을 SSL Handshake 또는 SSL Negotiation 이라고 하는데 다음 그림과 같은 과정을 밟는다.

먼저, 1번과 2번의 Client Hello와 Server Hello 과정에서 서로 암호화에 사용할 알고리즘을 결정한다.
클라이언트가 자신이 지원하는 암호화 알고리즘을 모두 나열하게 되면, 웹서버는 이를 검토하고 자신 역시 지원하는 알고리즘 중 보안성이 가장 높은 것을 선택하게 된다.

암호화 알고리즘이 결정되면 3번에 해당하는 과정에서 데이터를 암호화하는데 사용할 키를 서로 교환하게 된다.  전달되는 키는 보안성 때문에 2번과정에서의 Certificate 에 포함된 웹서버의 공개키로 암호화 하여 안전하게 전달한다.

4,5번 과정의 Finished 메시지는 서로 데이터 암호화에 필요한 정보교환이 모두 정상적으로 되었으며, 이제 본격적으로 데이터를 암호화할 준비가 되었다는 의미로 보면 된다.

암호화 알고리즘과, 암호화 키가 성공적으로 교환되면 이후 HTTP 메시지 / 데이터를 암호화 하여 서로 통신하게 된다.





SSL에서의 성능(Performance)

SSL 은 주 목적이 클라이언트와 웹서간 주고 받는 메시지, 데이터에 대한 암호화이다.
복잡한 수학연산이 있는 암호화 알고리즘을 이용하기 때문에 CPU 리소스를 많이 요구한다.

일반적인 웹서버에서 SSL 을 HTTP 와 동시에 처리하는 상황이라면, 성능에 대한 고민을 하지 않을 수는 없을 것이다.

요즘에는 이런 고민들을 덜어줄 어플라이언스 기반 장비들이 시장에 소개되고 있다.
CPU를 사용하지 않고 하드웨어 기반에서 SSL을 처리하는 기능을 별도로 장착한 장비로 보통 웹서버 앞단에 놓여 전달되는 데이터의 암복호화를 직접 처리한다.

다음과 같은 그림으로 구성되어 동작된다고 보면 이해가 쉬울 것이다.

위 그림과 같이 SSL 처리 장비 기준으로 클라이언트쪽은 HTTPS 통신을 하고, 웹서버쪽은 HTTP 통신을 하는 형태로 나뉘게 되는데, 웹서버가 CPU 연산을 많이 필요로 하는 SSL 처리 부담을 제거하여 처리 성능을 높이는 형태이다.

결국 궁극적으로 클라이언트는 기존 CPU에서의 연산보다 처리속도가 빠른 전용 하드웨어 칩 또는 카드를 이용하기 때문에 응답에 대한 체감속도가 빨라지게 되고, 웹서버도 HTTP 로만 처리하기 때문에 응답속도의 개선 효과를 같이 기대할 수 있는것이다.


댓글 없음:

댓글 쓰기