SSL 암호와 통신에 대해 토론(조언)을 제안합니다. 정보
SSL 암호와 통신에 대해 토론(조언)을 제안합니다.본문
안녕하세요.
제가 얼마전 Q&A 게시판에 "OpenSSL for HTTP"와 관련된 답변을 해준 일이 있는데,
답변을 하고나서 곰곰이 생각해 보니 무언가 잘 못 알려준 것 같은 기분이 들었습니다.
http://sir.co.kr/qa/87410?page=2
그래서 좀 더 개념을 명확히 할 필요가 있을 것 같아서 이렇게 글을 써봅니다.
일반적으로 SSL 보안인증서를 통한 암호화는 양방향 모두 다 암호화되는 것으로 알고있습니다.
방향1 : 클라이언트 --> 서버
방향2 : 서버 --> 클라이언트
그런데 letsgolee님이 공개해 주신 "OpenSSL for HTTP" 통해 암호할 때
"클라이언트 --> 서버" 의 방향에서만 암호화 하면 된다고 답변을 했는데
이게 좀 석연치가 않습니다.
예를 들어 게시판에 글을 작성할 때는 POST 방식으로 데이타를 서버로 전송해야 하므로
정보보호를 위해 암호화(sniffing 방지) 해야 하겠지만,
작성이 완료되고 서버의 DB에 저장된 데이타를 view 페이지나 글수정 페이지에 보여줄 때도
"서버 --> 클라이언트" 로 전송(다운로드)되는 데이타를 반드시 암호화해야 하는지가 궁금합니다.
대체로 SSL 인증서 사용의 상황을 고려하면
"서버 --> 클라이언트" 로 전송되는 정보도 네트워크 상에서 패킷이 탈취될 가능성이 있으므로
암호화하는 것이 마땅해 보이지만,
데이타 전송방식이 POST 나 GET 방식의 전송이 아닌 다운로드(크라이언트 입장에서)되는 형태라고 생각하니 암호화의 필요성에 대한 개념이 명확해지지 않습니다.
만약 "서버 --> 클라이언트" 로 전송(다운로드)되는 정보도 암호화 해야 한다면,
"OpenSSL for HTTP" 프로그림을 사용할 때 회원정보 수정페이지는 물론 프로필, 기타 개인정보와 관련된 페이지는 모두 암호화 환경을 마련해야 하므로 많이 복잡해질 것 같다는 생각이 듭니다.
여러분들의 의견은 어떠하십니까?
댓글 전체

제가 이부분은 크게 잘알지 못하지만, 생각은 한번 적어볼게요.
클라이언트 -> 서버로 전송할때 전송되는 데이타가 있어야 암호화 됩니다.
페이지 전체를 암호화 해서 넘기는 것이 아니라
사용자로부터 입력받은 데이타를 포스트로 전송 할때 그 데이타만 암호화 한다는 뜻입니다.
사용자로부터 입력받은 데이타가 없다면 암호화할 대상이 없으므로 무의미 합니다.
그러나 서버에서 클라이언트로는
그런 데이타가 없지 않나 싶네요.
서버에서 클라이언트 정확히는 브라우져로 그런 데이타를 보낼 일은 없어 보입니다.
브라우져 자체가 포스트나 겟 파라미터를 받는 것이 아니라
서버로 부터 응답받은 결과값만 받아서 출력만 해주는 것입니다.
따라서 암호화 할 대상이 없기 때문에
그 문제는 클라이언트 -> 서버로만 따지는 것이 맞다고 보여집니다.
예를 들자면
로그인 페이지 http
로그인 처리 페이지 https
로그인후 페이지 http
형태로 사용되어지는 것을 들수 있을 것 같습니다.
회원가입이나 정보수정 같은 경우도 마찬가지 입니다.
저도 이전까지는 "유창화"님께서 설명해 주신 개념으로 암호화 통신의 의미를 알고 있었습니다.
그런데, 제가 의구심을 갖게 된 부분은 아래의 링크 내용 중에
https://wiki.kldp.org/HOWTO/html/SSL-Certificates-HOWTO/x70.html
6. [웹서버] 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서 브라우저로 전송한다.
위와 같이 [웹서버]의 역할을 "암호화해서 브라우저로 전송한다"고 정의해 놓았고,
letsgolee님이 공개해 주신 "OpenSSL for HTTP" 프로그램에서도
(http://sir.co.kr/bbs/board.php?bo_table=g5_plugin&wr_id=14)
로그인 페이지와 같이 "클라이언트 --> 서버" 로 전송되는 부분의 암호화 형식과는 다르게
skin/member/basic/register_form.skin.php 에서 회원정보를 수정할 때
암호화된 데이타를 브라우저로 전송(표현)하는 방식으로 프로그램을 구성해 놓고 있어서 궁금증이 생겼던 것입니다.
클라이언트에서 포스트나 겟 파라미터를 넘길 때에만 암호화가 필요한 것이었다면
letsgolee님은 왜 register_form.skin.php 페이지에서 회원정보를 수정할 때
서버에 저장된 테이타를 암호화하여 브라우저로 구현하는 프로그램을 만드셨을 까요?
제가 너무 확대해서 궁금해 하는 것일까요?
아무튼 관심갖어 주심에 감사드립니다.^^

예를 들어, 쇼핑몰에서 배송정보를 조회할 때 사용자의 주소와 전화번호 등이 그대로 노출될 수 있죠.
특별한 경우가 아니라면 HTTP 위에 OpenSSL을 쓰는 것보다는 HTTPS 프로토콜을 사용하는 게 좋다고 생각합니다.
대체로 많은 사람들이 비싼 비용을 지불하면서까지 SSL 인증서를 사용해야 하는 이유가 있다고 봐야 하겠군요.

제출되는 내용이 없는 서버->클라이언트로 전송되는 내용이라도
예를 드신바처럼 특정내용에 따라 암호화 필요성이 있는 페이지가 있습니다. 사이트의 대부분이 주요정보라면 전체를 https를 통해 전송하고 아닌경우 특별한 페이지에만 적용하면 되겠죠.
그리고 startssl.com 같은데서 무료 인증서를 받을 수 도 있습니다.
이곳의 의견들을 통해 다른 분들도 개념을 이해하는데 도움이 되길 바랍니다.