회사 자체에서 사용되는 웹 사이트에 SSL을 도입할 일이 생겼는데, SSL 도입 자체가 처음이라 도입 과정의 내용을 정리해 보았습니다. Self Signed Certificate이라고 하는 용어도 이번에 첨 알게 되었네요. 

 

필요한 사전 내용부터 도입 과정, 예외상항에 대해서 순서대로 정리 보았으니 참고 되시길 바랍니다. 

(* 처음 해보는 거라 잘못된 정보, 오류가 있을 수 있습니다. ^^;;)

알고 가야 할 것들!

SSL(Secure Socket Layer)이 무엇인지는 너무 많은 글들이 있으니 여기서는 SSL 도입에 필요한 요점만 정리하겠습니다. 사실 TLS(Transport Layer Security)지만 SSL이라고 부르기 때문에 그대로 사용하겠습니다. 

 

HTTP와 HTTPS의 차이

HTTP는 평문(텍스트 그 자체!)으로 데이터를 전송합니다. 즉, 전송되는 데이터를 손쉽게 들여다 볼 수 있습니다. HTTPS는 Secure이 붙은 만큼 전송되는 데이터를 볼 수 있다 한들 암호화가 되어 있어서 무슨 내용인지 바로 알 수 없습니다.

 

그럼 서로 주고 받는 데이터를 암호화 한다면 복호화는 어떻게 할 수 있을까요? 보내는 곳에서 암호화한 방법을 알아야 받는 곳에서 복호화를 할 수 있을텐데?

 

세상에는 수많은 사이트가 존재합니다. 서로 데이터를 주고 받기 전에 암호화를 어떻게 할지 미리 알려줘야 하는데(대칭키 방식) 접속할 때마다 자기가 어떤 방법으로 암호화를 하는지 알려줘야 한다면, 이 방법을 알려주는 순간에 해커들이 이 정보를 훔쳐간다면 무용지물이 되겠죠. 그렇다고 사전에 암호화 하는 방법을 서로 미리 정해놓고 공유한다면 이 또한 안전하지도 않을 뿐더라, 암호화 방식이 바뀔 경우 대책이 없게 됩니다.

 

이를 보완하기 위해 개인키/공개키라는 개념이 나옵니다. 

 

Private Key(개인키)/Public Key(공개키)란?

말 그대로 개인키는 나만 가지고 있고, 공개키는 누구에게든 전달할 수 있는 키입니다. 공개키로 암호화된 데이터는 개인키로만 복호화 할 수 있습니다. 이 역도 성립합니다. 개인키로 암호화한 데이터는 공개키로 복호화 할 수 있습니다.

 

(*Private/Public Key 설명을 돕기 위한 그림으로 실제 위와 같이 데이터를 교환하지는 않습니다.)

그래서 공개키로 암호화된 데이터를 아무리 들여다 봐도 개인키를 모르는 이상 복호화 할 수 없습니다. ( 여기서 굳이 양자컴퓨터를 언급하지는 않겠습니다. ;; )

 

그런데 이 그림처럼 통신하기 위해서는 많은 연산이 필요합니다. 이를 해결하기 위해 핸드쉐이킹 단계 (클라이언트가 서버에 처음 연결하여 통신을 준비하는 단계) 에서 실제 데이터 전송을 위한 대칭키를 결정하는 단계에서만 사용됩니다. 이후부터 세션이 종료될 때까지 결정한 대칭키를 이용해 데이터를 교환하고, 세션이 종료될 때 사용한 대칭키는 파기하게 됩니다. 

 

(* 공개키 기법의 Handshaking 과정)

 

분명히 간단히 정리하려고 했는데, 정리 하다보니 정도 모르는 것들이 또 나와서 정리하고 그림도 그리다보니... 

 

조금 길어졌네요.

 

다음 글에서는 우리가 알고 있는 공인인증서는 무슨 역할을 하고, 왜 인증된 기관에서 받아야 하는지 알아보겠습니다.

 

그 후 마지막에는 Self-signed Certificate 작성과 적용 방법에 대해서 정리하고 마무리 하겠습니다. 

 

+ Recent posts