2009년 11월 15일 일요일

MySQL 보안 - stone with SSL 2

stone작성

우선 OpenSSL대응의 stone을 작성한다. 소스를 풀고 안에 있는 Makefile을 편집한다.
다음 부분을 환경에 맞춰서 편집한다.

Makefile
SSL= /usr/local/ssl
SSL_FLAGS= -DUSE_SSL -I$(SSL)/include
SSL_LIBS= -L$(SSL)/lib -lssl -lcrypto

Linux의 경우, glibc-2.3.2에서는 EPOLLONESHOT이 정의되어 있지않기때문에 컴파일 에러가 난다.

Makefile안의 linux: 타켓에 적혀있는 -DUSE_EPOLL을 생략한다.
준비가 끝났으면 make를 실행한다.

make의 실행
shell$ make linux-ssl

생성된 stone을 원하는 디렉토리에 인스톨하면 된다.


stone실행

stone의 사용방법은 소스와 같이 있는 README.txt에 자세하게 적혀있다.

stone의 기본적인 구문은 다음과 같다.

stone 리모트호스트:리모트포트 로컬포트

stone은 Local포트에서 대기 , 수신한 것을 리모트 포트에 릴레이 전송하게 된다.

>클라이언트에서 실행하는 mysql
mysql -h 127.0.0.1 -P 3308

>클라이언트에서 실행하는 stone
stone remote.server.name:3307 3308

>서버에서 실행하는 stone
stone localhost:3306 3307

이것으로 패킷 리피트의 골격이 완성되었다.

그러나 SSL의 통신은 되지 않는다. 여기에서 SSL용 옵션을 지정한다.

전송포트, 대기포트의 뒤에 /ssl을 붙이게 되어 SSL통신을 하게 된다.

>클라이언트에서 실행하는 stone
stone remote.server.name:3307/ssl 3308
>서버에서 실행하는 stone
stone localhost:3306 3307/ssl

또, 개인 키나 CERTIFICATE 파일을 지정하고 픈 경우는 다음처럼 조작한다.

>클라이언트에서 실행하는 stone
stone -q key=key.pem -q cert=cert.pem remote.server.name:3307/ssl 3308
>서버에서 실행하는 stone
stone -z key=key.pem -z cert=cert.pem localhost:3306 3307/ssl

-z옵션은 SSL서버용 옵션이다.
stone이 서버로 동작할 때 사용한다. -q옵션은 SSL클라이언트로 stone이 동작할 때 사용한다.
MySQL의 SSL대응의 때와 마찬가지로 이 옵션을 사용하면 된다.

key=는 개인키, cert=는 CERTIFICATE파일로 자기가 서명한 것이던지 제3자 인증국이 싸인한 파일을 지정한다. 인증국이 서명한 경우 인증국의 CERTIFICATE파일이 필요로 하게된다.

그 경우는 -{z|q} CApath=, -{z|q}CAfile= 둘중에 하나를 사용하면 된다.
CApath=의 경우는 해쉬를 생성해서 파일명을 만들어야 한다.