2015.08.31 12:29

스마일서브의 무료 보안서버 SSL 사용후기, 설치 안내

사이트 하나를(사실은 여러 개) 오픈했다. 하는 일이 바쁘다보니 적극적으로 관리하지 못했는데 메일 하나를 받았다. 인터넷진흥원이란 곳이다. 내 사이트 하나가 보안 인증서(SSL) 사용 권장을 위한 안내 메일이다. 물론 친절하게 단속 대상이라고 부연 설명도 해 준다. 벌금을 물 수 있다는 뜻이다. 뭐 대단한 사이트도 아닌데 회원가입을 받는다는 이유로 보안 인증서를 설치하라고 한다.

 

요즘 보안인증서 가격이 많이 내려갔다. 연간 1만원 내외에서 사용 할 수 있는 것도 있고 외국에서는 무료로 제공해 주는 곳도 있다. 무료로 제공해 주는 곳을 이용해 봤는데 차라리 돈 몇 푼 주는 게 나을 거 같다는 결론이다. 내가 보안 전문가도 아니고 학부생 때 공개키 방식의 암호화 기법을 수강했던 것 말고는 아는 게 없다. 나폴레옹이 썼다는 이 공개키 방식의 암호문은 2차 세계 대전에도 유용하게 써먹었고 여전히 IT 분야에서도 잘 쓰이고 있다. 공인인증서가 대표적인 공개키 방식 보안 인증인데 이건 정말 시간 낭비, 자원 낭비, 트래픽 낭비, 돈 낭비라고 생각한다.

 

정책을 논하자만 얘기가 길어질 거 같고, 일단 국내에서 제작 배포되고 있는 무료 보안 인증서가 있어서 소개 하려고 한다. 이 무료 보안 인증서(사실은 오픈 소스)는 누구나 자유롭게 사용이 가능하고 무엇보다 웹호스팅 사용자도 웹호스팅 업체에 아쉬운 소리 하지 않고 인증서를 설치해서 사용 할 수 있다는 것이다.

 

예전에 G-PIN을 설치 한 적이 있는데 인증서를 관리하는 톰캣에서 어찌나 에러가 나는지 고생한 적이 있다. 자바는 역시, 학부생 때 한 학기 배운게 고작인데 내가 톰캣을 어떻게 다뤄야 하는지 알리 없다. 보안키 관리하는 것도 처음 해 보는 거라 고생이 이만저만이 아니였다. 그래도 어찌어찌해서 해결은 했지만 다음에 또 그런 작업이 들어온다면 돈을 좀 더 받아야 할 거 같다.

 

 

스마일 서브(http://www.boanserver.com/)에서 마침 무료 소스가 나왔다. 사용하는 페이지에 스마일 로고만 넣는다면 상업용으로 사용 할 수 있다. 제약이 없다고 보는 게 맞다.

 

이 무료 SSL을 지음빌더에 적용해 배포하기로 마음 먹었다. 설치는 생각보다 어렵지 않다. 그런데 배포되는 지음빌더에 SSL이 적용 된 스킨은 포함하고 있지만 기본 스킨으로 적용하지는 못했다. 일단 설치 방법을 설명 한 후에 그 이유를 다시 설명해 보기로 한다.

 

 

지음빌더 4.2.0 버전 이상을 내려받기 하면 zm.ssl이란 폴더가 있다. 이 폴더에는 스마일 서브에서 배포한 무료 SSL 소스가 들어있다. 폴더 이름은 아무렇게나 바꿔도 상관 없지만 일단 지음빌더에서는 수정하지 않는 것이 좋다.

 

일단 outlogin에 적용해 보자. zm.basic.ssl이 SSL이 적용 된 로그인 스킨이다.

 

outlogin.skin.1.php 파일을 열면 상단에 코드 두 줄이 추가 됐다. 인증서 소스 코드를 불러온다.

include_once($g4[path]."/zm.ssl/class/ssRsa.php");
include_once($g4[path]."/zm.ssl/class/ssRsaForm.php");

파일 상단에 위의 코드 두 줄을 포함한다.

<form name="fhead" method="post" onsubmit="return fhead_submit(this);" autocomplete="off" rsa>

그리고 중간 부분에 <from>태그가 있다. 달라진 게 있다면 태그 끝에 rsa라는 속성명이 추가됐다. 이건 SSL을 적용할 form을 구분하기 위한 것으로 꼭 포함되어야 한다.

 

<div id="private"><?=$_SESSION['ssRsa']['private']?></div><? //-- 스마일서브의 RSA 키 -- ?>
<div id="public"><?=$_SESSION['ssRsa']['public']?></div>

<form>태그 밑에 태그 두 줄이 추가 됐다. onsubmit 이벤트가 발생하면 두 개의 <div>에 RSA가 추가 되고 /zm.ssl에 포함 된 프로그램이 이것을 감지해 자동으로 서버로 전송해 준다.

여기까지 했다면 클라이언트 파일에서 할 일은 끝났다. 매우 같단하다. 코드 몇 줄만 추가 해 주면 된다.

 

 

클라이언트에서 아이디와 비밀번호를 암호화 해서 서버로 전송했다면 이제 서버에서 암호화 된 문장을 받아서 다시 복호화(디코딩) 해야 한다.

그 과정도 매우 간단하다. outlogin에서 전송 된 form 정보는 /bbs/login_check.phP에 받아서 처리한다.

/bbs/login_check.php 파일을 열어보자.

include_once($g4[path]."/zm.ssl/class/ssRsa.php");   //-- 스마일 서브의 RSA 키
include_once($g4[path]."/zm.ssl/class/ssRsaForm.php");

클라이언트 파일(outlogin.skin.1.php)에서 처럼 상단에 위의 코드 두 줄을 추가한다. 똑같이 하면 된다. 이것만 해 주면 $_POST 내용을 분석해 자동으로 암호된 문장을 다시 복호화 해 준다.

여기까지가 끝이다. 너무 간단해서 길게 설명할 뭔가가 없다.

 

 

 

 

 

 

 암호화는 잘 되는 걸까? sniff 검사를 해 봤다.

 

SSL을 적용하지 않았을 때 서버로 전송되는 form 내용이다. 암호화 되지 않고 text가 그대로 노출 된다.

 

 

SSL을 적용하고 다시 로그인을 시도했다. form 필드가 모두 정상적으로 암호화 되었다. 이정도만 해도 훌륭하다고 생각한다.

 

 

 

 

 

그렇다면 나는 왜 이 좋은 무료 SSL을 지음빌더 기본 스킨에 적용하지 않은 것일까?

첫째, 이 오픈소스가 암호화 된 문장을 서버로 전송 할 때 해당 입력폼(input 태그)에 인코딩한 문장을 적용해서 서버로 전송하는 트리거를 사용한다.

예를 들어 input 창에 "abcd"라는 문장을 입력 했을 때 암호화 프로그램은 이것을 감지해 "sf3l4uzde6lsw"이런 문장으로 변환 시켜서 input에 value 값으로 넣고 이것을 서버로 전송한다. 그래서 다음에 또 로그인 할 때는 id 입력창에 sf3l4uzde6lsw라는 complete(완성) 문자가 보인다. 물론 autocomplete=off로 해결 할 수 있다. 그래서 로그인 할 때는 전혀 문제가 되지 않는다.

 

둘째, 회원가입 할 때 해당 필드를 검증 할 때 클라이언트에서 자바스크립트로 한 번 하고 서버로 전송 된 데이터를 한 번 더 검수하게 된다. 그런데 회원가입 할 때 정보를 input 창에 입력하고 submit 했을 때 회원 정보가 잘 못 된 형식이거 비밀번호에 문제가 있을 때는 이것을 알리는 경고창이 뜨고 다시 입력페이지로 포커스가 넘어간다.

이때 onsubmit 이벤트가 발생 했기 때문에 이미 입력한 회원정보가 "sf3l4uzde6lsw" 이런 형태로 암호화 된 문장들이 들어가 있게 된다. 그래서 회원가입을 하려는 사람에게 혼란을 줄 수 있다. 나는 이 문제를 해결하기 위해 배포 된 프로그램을 조금 수정해서 사용했는데 수정한 보안 프로그램을 지음빌더에 적용하려면 여러 곳의 그누보드 엔진을 수정해야 되서 망설이고 있다. 기존의 그누보드4의 스킨들과 호환성을 맞춰야 하기 때문에 임의로 변형한 보안 프로그램을 적용하기는 아직 망설여지게 된다.

이 문제는 전혀 해결 방법이 없는 게 아니기 때문에 나중에 보안 프로그램을 수정하게 되면 그때 다시 지음빌더에 기본 스킨으로 포함 할 것인지 고민해 보기로 했다.

        

Trackback 0 Comment 3
  1. humansoft 2015.10.04 12:15 신고 address edit & del reply

    좋은 자료 감사합니다.
    위의 내용대로 적용해봤는데, 아래 내용의 키값이 웹페이지에 노출되는 현상이 발생하는데, 영문을 알 수가 없네요.
    나중에 한번 더 시도헤보겠습니다.
    -----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJnJx2vDCeokOmI+ 02JvQCUKG1PZ7I0DkoRzTD9vGoVoXgFuehwCLngOVeteZKeAwxDTuZVW2lV7c5lQ Pnd4pXci/6+gqGUACmmdzMHbaDPXutrDj/ViAwU4g7YPBp7YtygHAOT2Xh9w/PjJ vNx0D3r2XuK2KKzDsz7z8l5uXblPAgMBAAECgYANKhKiDN4KZvOAeXRK1s8c3JKe SOdQ4t9l6yC5xV710ItLgBN/1kf4CvIb5caj+Ae6pwUZ3YdvDdRFaXMPcwpm2GQO arr1wb4Oqhv2hdah5soT0kjdbCco5QuEwncYOw6JpYTjjl4OxrfDZDUqVKvj76EB XZZnZ0ZQo0z+zJF7QQJBAMp1OIMDQImlYDwvDiIcJTwIKkFflgX2IauUNnQD7RKn GmL1CBFBfEOYueCH7YKh12vssUsoDymtg1co9UMWdb8CQQDCdYdTPxXT800XwObX dAsTQcQdN8dDv0Pq65U8d0zTt60UR1GoWLqwPejB7+l5fsTf60HRmG+1sE/vw5C0 /EBxAkAFMJwSP7MX1DVzVYF3PmF1+H+czWZ7IKQcUeBTeQZKxB3ZC475YkRdNz0M lG9yOdPb4GVrF8vLtbb4NQSUg67hAkAmL/phSLQ6qT7seT9b9Dfwkiu3KSsCjN8D lTv7Ydo+gYWFw/OvQa13ytCYtUp+R3zWFFcal/roDTXFefxC7n6hAkEAuEnC8N3j wzP1RHVNFLoPaEpRIjyXzV2WAieS5KQc25akrEPbgiA7ouGty/my0iRVXG1hblBT WwOsr+H5uPxG7g== -----END PRIVATE KEY-----

    -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZycdrwwnqJDpiPtNib0AlChtT 2eyNA5KEc0w/bxqFaF4BbnocAi54DlXrXmSngMMQ07mVVtpVe3OZUD53eKV3Iv+v oKhlAAppnczB22gz17raw4/1YgMFOIO2Dwae2LcoBwDk9l4fcPz4ybzcdA969l7i tiisw7M+8/Jebl25TwIDAQAB -----END PUBLIC KEY-----

    • ZIBSIN 2015.10.12 17:23 신고 address edit & del

      저도 이 보안키를 숨기려고 노력을 했었는데 잘 안 됐습니다.
      일반 보안서버일 때는 서버에 이 보안키를 파일 형태로 갖고 있다가 전송하기 때문에 노출이 안 되는데 웹 방식이라 <form 안에 같이 노출이 되네요.
      전혀 방법이 없는 건 아닌데 ssRsaForm.php 이 안에서 폼을 전송하기 직전 키를 생성하면 어떨가 생각만 하고 있습니다.

  2. hello2017 2016.04.04 17:00 신고 address edit & del reply

    발급시 https://www.securesign.kr/ 여기도 참고해 보시면 어떨까 합니다~