SSH vs. SSL : 바보 같은 설명

미국에서 살다보면 이런 저런 사소한 것에서 한국 사람들과 미국 사람들이 어떻게 다른지 느끼게 된다. 이것은 참으로 사소해서 누군가가 대놓고 “뭐가 다른데?”하고 물어보면 선뜻 입 밖으로 말이 잘 안나오게 된다. 흡사 “Mac이 Windows랑 다른게 뭐야?”라는 질문과도 비슷한 질문이다. 근데 이 사소한 것들이 참 큰 영향을 미친다. 흔히들 말하지 않는가? 사람들은 대개 사소한 것으로 싸운다. 큰 일은 싸움 자체가 잘 되지 않는다. 그런거다.

앞의 글을 포스트하고서 SSL을 이야기 하다가 갑자기 SSH가 튀어나와서 혹시나 딴지 걸 거 같아서, 웹을 찾아 보았다.
도대체 SSL과 SSH가 뭐가 다른가? 아마 인터뷰하다가 갑자기 이런 말이 튀어 나오면 대답 못할 거 같다. 몰라서 대답 못하는것이 아니라, 생각을 정리할 시간, 그리고 뭐가 달랐더라를 생각해야 하기 때문이다.
아무튼 찾은 것을 보자.

WsFTP : Users’ Guide

  • SSL : SSL (Secure Socket Layer) is a protocol for encrypting and decrypting data sent across direct internet connections. When a client makes an SSL connection with a server, all data sent to and from that server is encoded with a complex mathematical algorithm that makes it extremely difficult to decode anything that is intercepted.
  • SSH : SSH (Secure Shell) is a security protocol that allows you to make a secure connection to a server that has the SSH and SFTP (Secure File Transfer Protocol) protocols installed. Where FTP servers usually `listen’ on port 21 for connection, SSH servers use port 22.

참 미국적인 설명이다. 뭔가 거창하게는 써져 있는데, 별로 이해하는데 도움이 되지 않는다. 특히나 SSH에 대한 설명이 압권이다. security protocol이라고? 그러면 SSL은 security protocol아닌가? 그리고 SSH와 SFTP가 설치된 서버에 접속할때 쓰이는 거라는데.. 이건 뭐 설명도 아니다. 왜 그런지 다른 것과 비교해서 볼까? 누군가가 Web site가 뭐에요?라고 물어 본다고 하자. 그럼 대답이 Web server로 서비스하는 사이트야. 음… 이게 대답인가? 전혀 대답이 안되어 있지 않은가? Web이 뭔지 Web site가 뭔지, Web server로 서비스를 하는게 뭔지.. 전혀 설명이 안되어 있지 않은가? 더 쉽게 비유해 볼까? “야구가 뭐야?”란 질문에 “야구 선수들이 하는 게임이야”라고 답해주는 것과 아무런 차이가 없지 않은가?

미국 사람들이 이런 식의 말을 참 잘한다. 그럼 더 물어 보려고 해도 상당히 미묘하게 물어봐야 하기 때문에, 영어가 짧은 외국인 입장에선 참 뭐라고 물어보기가 힘들다. 지네는 뭐가 잘못된 것인지 모른다. 이런 바보들…

자 쉽게 설명해 보자. ( 쉽게 설명하면 개념 자체를 잡기는 쉬우나, 세세하게는 틀릴 수있다. 자세하게 설명하면 내용은 정확하나 이해하기 어려울 수있다. 그래서 항상 먼저 쉽게 설명하는 식으로 개념을 잡고, 더 알고 싶으면 자세하게 살펴보는게 좋다.)

SSL은 Secure Socket Layer의 약자다. 즉 통신을 하는데, OSI 7레이어 모델이 있지 않은가? 그런식으로 소켓 레이어가 있다. link 레이어 위에 쯤 속하겠지? 그게 network layer인가 그렇지? 음.. 어떻게 보면 link layer에 들어가겠는데?
아무튼.. TCP/IP로 통신을 하려면 socket을 만들어야 한다. 그리고 통신의 주체 사이에 이 소켓을 통해서 데이터를 주고 받게 된다. 바로 이 레이어에 암호화 기술을 넣어서, 보내고 받는 데이터가 다 암호화가 되어 있고, 그것을 편하게 구현하고 사용할 수있게 만들어 놓은게 SSL이라는 것이다. 그러므로 OpenSSL에는 각종 지원하는 암호화 기법이 다 함수로 들어가 있고, 여기에 덧대어서 바로 SSL secure socket을 만들고 관리하고 없애고 하는 함수들이 들어가 있다.
즉 이것은 end-user용 프로그램이나 그런 개념이 아니라, 프로그래머들이 이용해 주어야 할 개념이다.

SSH는 Secure Shell의 약자다. Unix를 쓰면 Bourne Shell이니 C-Shell이니 TCShell이니 하는 거, 그냥 공기같은 개념 아닌가? 예전엔 원격 컴퓨터를 이용하는 방법엔 두가지가 있었다. 하나는 telnet이고 다른 하나는 rlogin이다. 뭐 요새같은 GUI의 시대야 Apple Remote Access나 MS Remote Desktop혹은 VNC같은 것들이 바로 그런 용도인데, 옛날에는 Command-Line 환경이니까, Unix 명령을 내릴 수있는 프롬프트가 뜨는게 다였다. 암튼 그런식으로 원격지의 컴퓨터를 접속할 수있는데.. 문제는 이때 사용되는 ID와 password가 그냥 clear-text로 보내지는거다. clear-text란 암호화가 되지 않고 그냥 그대로 가는 것을 말한다. 그래서 통신 포트를 가로채서 packet 검사를 해보면 사람들이 로그인할때, 어떤 아이디에 어떤 암호를 쓰는지 다 볼 수가 있었다. 91년이었나 92년이었나.. KETEL엔가 접속할 때였다. 번개가 치는 비오는 날이었는데, 노이즈가 싹 끼는거다. 정말로 우연히 KETEL 시스템의 관리자로 들어가진 적이 있다. 아마도 로그인 정보가 번개와 비에 의한 노이즈로 변경이 가해졌고, 아마 그게 우연히 관리자의 것과 같았나보다. 여담이지만 갑자기 그게 생각나네…
뭐 순간 rm -r / 하면 께임 끝! 인데…… 그래도 착했던 나는 살포시 log-out을 해 주었다.
암튼.. clear text를 그대로 보내면 이런 저런 위험이 많이 도사린다. 노이즈에 의한 거야 뭘로도 어쩔 수없는 거겠지만, 감청/도청은 막아야 하지 않겠는가? 그래서 일종의 접속 단말 프로그램으로 ssh가 나왔다. 이 ssh는 rlogin처럼 원격 컴퓨터에 대한 Unix prompt상태로도 들어갈 수있게 해주고 ssh -x하면, 원격 컴퓨터의 X-Window 환경을 내 로컬 컴퓨터에서 띄울 수있다. ( local X-Window를 이용해서). 즉.. end-user 프로그램에 가까운 개념이 SSH이다. 물론 여기서도 암호화가 사용되기 때문에.. 왜냐하면 정보를 clear-text로 보내면 안되니까… 역시 암호화 관련 함수가 있게 마련이다.

에..이렇게 한번 쉽게 정리해 보았다.
다음에라도 보면, 쉽게 기억 나겠지. :)

하지만.. 이해하기 쉬우면 틀린 내용도 많은 법.. 쉽게 이해하자면 그렇다는 소리다.

One response to this post.

  1. 많이 헷갈렸는데 쉽게 설명해주신 덕분에 잘 이해됐습니다^^
    고맙습니다~!!

    Reply

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: