2009년 11월 4일 수요일

MySQL 보안 - SSL통신7

SSL통신을 필수로 하기

어떤 유저의 통신에는 반드시 SSL을 사용하는 경우는 GRANT문에 REQUIRE를 지정한다.

mysql>GRANT .... TO 'mycom'@'192.168.0.1' REQUIRE SSL;

또한 어떤 유저는 반드시 올바른 인증을 받지 않으면 안되는 경우에는 GRANT문에 REQUIRE X509를 지정한다.

mysql>GRANT .... TO 'mycom'@'192.168.0.1' REQUIRE X509;


Subject고정

어떤 사용자의 Subject를 고정하고픈 경우는 GRANT문에 SUBJECT를 추가한다.
클라이언트 키의 Subject가 다른 경우, 서버는 접속을 거부한다.

mysql>GRANT .... TO 'mycom'@'192.168.0.1' REQUIRE SUBJECT '/C=KR/L=Basel/O=MYCOM/OU=DB Comms/CN=whatever'

키의 Subject를 표시하고 싶은 경우에는 다음과 같이 한다.

shell$ openssl x509 -text -in client-cert.pem


Issuer의 고정

어떤 유저의 Issuer를 고정하고픈 경우는 GRANT문에 ISSUER를 추가한다.
클라이언트 키의 Issuer가 다른 경우는 서버는 접속을 거부한다.

mysql>GRANT .... TO 'mycom'@'192.168.0.1' REQUIRE ISSUER '/C=KR/O=MYCOM/OU=Certificate Authority/CN=whatever';

Cipher의 고정

어떤 유저의 암호화방식을 고정하고픈 경우는 GRANT문에 CIPHER를 추가한다.

mysql> GRANT .... TO 'mycom'@'192.168.0.1' REQUIRE CIPHER 'DHE-RSA-AES256-SHA:AES128-SHA';

Cipher 리스트는 복수의 암호화를 「:」로 구분짓는다. 특별한 지정으로 「ALL」 하고 「-」이 있다.
예를 들어 , 다음처럼 한 경우 모든 암호화 방식에서 DHE-RSA-AES256-SHA:를 제거한 암호화 방식을 채용한다.
CIPHER 'ALL:DHE-RSA-AES256-SHA'

지원되는 Cipher확인하려면 다음과 같은 조작을 한다.

shell$ openssl ciphers