웹을 이용한 전자 상거래, 인터넷 뱅킹 등이 더욱더 증대되면서 이제 인터넷은 정보의 바다가 아니라 하나의 커다란 시장이라 부를 수도 있는 상황이다. 온라인 입금이나 최근에는 소액의 경우 휴대폰 결재를 선택하기도 하지만 뭐니뭐니 해도 국내 인터넷 쇼핑 이용자들이 가장 선호하는 수단은 신용 카드다. 그런데 바로 이점이 보안적인 허점을 가져오는 원인이 있다.

실제로 신용카드로 결제하는 경우 인터넷이라는 공용망을 타고 서버에 전송되는 고객의 신용카드 정보는 신용카드 번호, 유효기간 등을 포함하고 있기 때문에 실제 전자 상거래 필요한 대부분의 데이터가 언제 어떻게 도용될지도 모르는 위험에 노출되어 있는 것이다. 그렇다면 개인의 금융정보를 공용망인 인터넷상에서 보호할 것인가?

질문에 대한 답으로 현재 가장 많이 사용되는 방법이 SSL(Secure Socket Layer)이다.

1. SSL(Secure Socket Layer) 개념

SSL Netsape에서 개발된 프로토콜로서 1995 히크만(Hickman) 의해서 개발되었으며 현재 인터넷 사용자들에게 안전한 개인 정보를 교환하기 위한 사실상의 표준 프로토콜로 인정되어 많은 온라인 상거래에 사용되고 있다. SSL 실제로 다양한 장점을 지닌 암호화 기법들을 사용해 세계 각국에서 사용되는 대부분의 암호화 기법들을 지원할 있다.

SSL 버전 3.0 이후 IETF(Internet Engineering Task Force)에서 표준화되어 TLS(Transport Layer Security) 명명되었지만 실제 내용은 SSL 3. TLSv1.0 같으며 MS Explorer Netscape 대부분의 브라우저에서 지원하고 있다. SSL 프로토콜에서 사용되어질 있는 다양한 애플리케이션 프로토콜이 있지만 주로 사용되는 부분은 WEB(HTTP)이라고 있다.

SSL 크게 3가지 기능들을 제공함으로 공개되어 있는 인터넷상에서 일어나는 트랜잭션의 기밀성(Privacy) 보장한다.

○ Site Authentication

User 선택한 상대편 Web Site 인증한다는 의미다. 우리가 인터넷 뱅킹이나 인터넷 쇼핑몰을 사용할 상대편이 실제 신뢰할 있는 은행이나 쇼핑몰의 웹서버 인지를 인증한다는 것으로, 상대 사이트에 대한 신뢰성 있는 인증이 없다면 우리는 불확실한 누군가에게 우리의 금융정보를 넘기는 위험에 처하게 된다.

○ Data Privacy(기밀성)

전달되는 데이터가 도중에 누군가에 의해 판돈되지 않는 다는 것을 보장한다. SSL 다양한 암호화 알고리즘을 사용하여 인터넷을 통해 전송되는 개인의 사적인 정보를 외부로부터 불법적인 판독을 막는다.

○ Data Integrity(무결성)

사용자의 브라우저로부터 상대방 웹서버까지 전달되는 동안 데이터가 도중에 누군가에 의해 변경되지 않도록 보장한다.

SSL 위와 같은 요소들을 보장하여 보다 안전한 커뮤니케이션을 있도록 도와주며 또한 MS 익스플로러나 넷스케이프 등과 같이 널리 보급된 대부분의 웹브라우저와 웹서버들에서 지원된다. 웹브라우저가 SSL 통신을 하는지 여부는 브라우저 오른쪽 하단의 잠금쇠 표시를 가지고 판별할 있는데 경우에 따라서는 브라우저 대신에 다른 보안 애플리케이션이 대신하기도 한다.

HTTPS SSL상에서 HTTP 구현한 형태로 실제 HTTP 기본 포트 80 사용하는 대신 HTTPS 433 포트를 사용한다.

SSL 다양한 어플리케이션들을 지원하기 위해 각각의 응용된 어플리케이션 프로토콜을 가지고 있는데, 이는 SSL 구조를 보면 이해하기 쉽다. SSL OSI 7 계층에서 5 계층인 Session Layer 속하며, 지원 가능한 프로토콜은 어플리케이션 레이어 상에 위한 하부 프로토콜로 한정될 밖에 없는데 HTTP, IMAP, FTP, NNTP 등이다.

 

2. SSL 동작 원리

SSL 수행되는 단계는 3가지로 분류된다.

 ○ SSL Server Authentication

사용자의 웹브라우저가 상대방의 웹서버를 인증하는 단계이다.

SSL 지원하는 웹브라우저는 표준 공용키 암호화 기법을 사용하여 서버의 인증서와 공용 ID 실제로 브라우져가 신뢰하는 인증기관(Trusted CA)으로부터 발급받았는지 여부를 인증하는 기능을 내장하고 있다.

 ○ SSL Client Authentication

웹서버가 자신에게 요청한 클라이언트를 인증하는 단계이다.

서버 인증 시에 사용했던 동일한 기법으로 인증하는데 서버에 내장된 SSL 지원 소프트웨어나 서버 앞에 배치된 SSL 하드웨어는 클라이언트의 인증서와 공용 ID 실제로 서버가 신뢰하는 인증기관(Trusted CA)으로부터 발급 받았는지 여부를 인증하는 기능을 내장하고 있다.

○ Encrypt Connection

서로에 대한 인증단계 이후 정상적으로 종결되면 클라이언트와 서버사이에 교환되는 모든 데이터는 사적인 내용을 보호하기 위한 암호화를 요구받는다. 또한 SSL커넥션을 통해 암호화된 데이터 역시 전송 변경을 방지(Message Integrity)하기 위해 Hash 알고리즘이라고 불리는 기술에 의해 보호된다.

위의 3가지 단계를 기반으로 실제로 구현되는 순서는 다음과 같으며, 다음 순서를 진행하기에 앞서 SSL 또한 TCP 프로토콜에 기반을 두고 있으므로 반드시 TCP 3 Handshake 이루어져 있어만 한다.

A. 클라이언트는 서버에게 Client Hello Message 전송

일반적으로 브라우저를 통해 서버에게 SSL 연결 요청을 하기 위한 초기 단계이다.

B. 서버는 클라이언트로 Server Hello Message 서버 인증서를 전송하며, 만약 클라이언트 인증서가 필요한 경우에 인증서 요청도 함께 전송

서버는 클라이언트가 자신이 적합한 서버인지를 인증할 있도록 공신력 있는 기관으로부터 발급받은 자신의 공인 인증서를 발송한다. 이때 일반적으로 서버 인증서와 함께 서버의 공용키가 클라이언트측에 전달된다. 만약 클라이언트에 대한 인증을 필요로 하는 트랜잭션이라면 이에 대한 요청도 함께 발송한다.

C. 클라이언트는 암호화에 사용되는 세션 키와 함께 클라이언트에서 지원하는 Cipher Suite 서버로 전송하며, 서버가 인증서를 요청한 경우에는 클라이언트의 인증서도 함께 전송

서버의 인증서에 대해 클라이언트는 브라우저내에 저장되어 있는 신뢰기관으로부터의 발급여부를 확인하고 암호화에 사용될 Session Key 생성해 서버 공용키로 Session Key 암호화 하여 서버에게 전달한다. 또한 암호화된 Session Key 함께 브라우저가 지원할 있는 Chiper Suite, 암호화 기법 리스트와 함께 서버측에서 클라이언트의 인증서를 요청한 경우 스스로의 인증서를 발송한다.

D. 서버는 Chiper Suite 받아들이고(또는 거부하고) Finished message 클라이언트로 전송한 데이터 전송단계로 이동

서버는 클라이언트로부터 클라이언트 브라우저가 지원하는 암호화 기법 리스트를 받고 클라이언트에게 종결 메시지를 보내고 데이터 전송단계로 돌입한다. 여기까지 정상적으로 완료가 되면 클라이언트가 생성한 Session Key 클라이언트와 서버가 모두 공유하게 된다.

E. 클라이언트는 최종메시지를 서버로 전송하고 데이터 전송단계로 이동

단계까지 정상적으로 완료되면 클라이언트는 종결 메시지를 서버에 보내고 실제 데이터를 전송하기 위한 단계로 돌입한다.

F. 상호 합의한 사이퍼 수트에 의해서 암호화된 메시지를 교환

단계에서 서로 나누어 가진 Session Key 암호화 데이터를 교환하게 된다.

 

3. SSL 암호화

SSL 수행되는 단계에 보면 Session Key라는 것이 등장한다. Session Key 한마디로 클라이언트 측에서 생성하여 서버로 전달된 하나의 키로, 하나의 동일한 키를 클라이언트와 서버가 각각 보관함으로 이후 전달되는 암호화된 데이터를 복호화 있도록 한다. Session Key 생성 전달 과정에 대한 보다 깊은 이해는 사실상 암호화 기법에 대한 이해를 바탕으로 한다.

이번에는 주로 SSL 대한 개략적인 부분만 다루고 있기 때문에 암호화에 대한 부분은 간단하게만 살펴보도록 하겠다.

SSL 수행단계에서 교환되는 Session Key 비밀키 암호화(Secret key cryptography). , 대칭적 암호화에서 사용되는 키로서 하나의 키를 양쪽 상대방이 각기 나누어 가짐으로써 하나의 키로 암호화한 데이터를 송신측에서 전송하면 수신측에서 암호화 사용한 동일한 키로 복호화하는 단순한 구조를 가진다.

비밀키 암호화 기법은 사용이 간단하고 속도가 빠른 반면 크게 가지 문제를 가지고 있다.

첫번째는 어떻게 동일한 키를 서버와 클라이언트가 서로 공유하여 가질 것인가이며,

두번째는 서버측에서 하나의 클라이언트당 각기 다른 세션키가 필요하기 때문에 어떻게 키를 관리할 것인가다.

위와 같은 문제 때문에 등장한 것이 공개키 암호화 비대칭키 암호화 기법이다. 암호화 기법은 비밀키와 공개키라고 불리는 각기 다른 키로 구성된 쌍의 키를 클라이언트와 서버가 나누어 가지고 비밀키로 암호화된 데이터는 그와 같은 쌍이 공개키로만 복호화되는 알고리즘을 제공하고 있다 암호화 기법은 비밀키 암호화 발생하는 교환의 문제를 해결해 주었다. 그러나 각기 나누어 갖은 쌍의 키를 가진 상대방에 대한 인증에 대한 문제와 암호화/복호화 과정에 많은 부하가 걸리는 단점을 가지고 있다. 따라서 실제로 SSL 수행의 경우 가지 암호화 기법과 PKI 기반의 디지털 인증서를 사용한 인증을 혼합하여 사용할 있다.

먼저 디지털 인증서(Digital Certificate) 교환을 통해 상대방을 인증, 공개키 암호화의 약점을 줄였으며 서버에서 클라이언트로 전달된 서버의 공개키로 클라이언트에서 생성된 세션키를 암호화하여 서버로 전달하는 공개키 암호화 기법을 사용하여 비밀키 암호화의 교환 문제를 없앴고 세션키가 전달된 세션키를 통해 실제 데이터를 암호화/복호화함으로 공개키 암호화 발생하는 부하로 인한 서비스 지연현상을 방지할 있다.

참고로 SSL에서 세션키를 통해 암호화하는 암호화 기법으로는 DES, 3DES, RC2, RC4등이 있고 40비트부터 168비트까지 사용된다. 메시지 무결성(Message Integrity) 보장을 위해 사용되는 Hash 알고리즘으로는 MD5 SHA1.등이 주로 사용 된다.

 출처: http://yagi815.tistory.com/168 그리고 약간의 편집



3. SSL/TLS, HTTP 통신과정

1. 항상 키쌍으로 작성된다.(Public, Private)


2. Public로 암호화된 정보는 Private키로 해독가능하며, Private키로 암호화된 정보는 Public키로 해독가능한 기본적인 특징이있다.

3. 보통 Public키는 모두가 가지고 있을수있는 공개된 키이며, Private키는 보안을 지키려고하는 주체(서버)에만 있는 공개되어서는 안되는 키다.

4. 서버는(Server A)는 Public, Private쌍을 만든다.

5. 신뢰할 수 있는 CA 기업을 선택하고 그 기업에 내 공개키를 관리해달라고 계약하고 돈을 지불한다.

6. 계약을 완료한 CA 기업은 CA 기업만의 공개키와 개인키가 있다.
   CA기업은 기업의 이름과 Server A의 공개키, 공개키의 암호화 방법 등의 정보를 담은 인증서를 만들고,
   해당 인증서를 CA기업의 개인키로 암호화해서 Server A에 제공한다.(이 요청을 위해서 사용하는것이 CSR이다.)
   - CA기업에서 암호환것은 Public키로로 암호화 했기때문에 모두가(브라우저가)알고있는 Public키로 해독가능하기 때문에 암호화의 의미는 없지만, 대신  CA 기업에서 생성했다는 증명이되기때문에
     서명의 효과로서 사용하게되는것이다.


7. Server A는 암호화된 인증서를 가지게 되고, Server A에 Request가 오면 클라이언트에게 인증서를 줍니다.
   (이 인증서에는 CA에서 만들때 기업 Server A의 Public키가 포함되어있다는것을 상기하자 )

8. 클라이언트 입장에서는 Server A의 정보를 CA 기업의 개인키로 암호화한 인증서를 받게 됩니다.

9. CA 기업의 공개키는 브라우저는 알고 있다.

10. 브라우저는 CA 기업 리스트를 쭉 탐색해서 공개키로 인증서를 해독하여 Server A의 공개키를 얻습니다.

11. Server A의 공개키로 암호화해서 Request를 날리게 된다.(이때 다음부터의 통신을 간소화하기위해 대칭키를 사용하는데 이를 위해서 pre master secret키를 생성해서 같이 보낸다.)

12. 이때부터 양 종단에는 pre master secret를 이용해서 암/복호 화가 이루러진다.




 

'Java > Java for the Web' 카테고리의 다른 글

A Simple Filter  (0) 2013.02.12
Cookie정보 보기  (0) 2013.02.12
Session정보 보기  (0) 2013.02.12
Hello Servlet  (0) 2013.02.12
Servlet Filter 개요  (2) 2013.02.03
Posted by Steven J.S Min
,