2009년 10월 18일 일요일

MySQL 보안 - SSL통신5

●Certificate Request 파일에 서명하기

각 Certificate Request 파일을 local CA로 서명한다.

root@shell# openssl ca -policy policy_anything -out signed-cert.pem -in dareka-csr.pem

local CA의 키를 사용해 인증하고픈 누군가의 Certificate Request파일에 서명을 한다.
-out로 지정된 파일이 서명이 끝난 파일이 된다.

policy_anything은 openssl.cnf섹션에 설정되어 있다. 그곳에서는 어느 항목이 필수인가 지정되어 있다. policy_anything은 commonName만이 필수항목으로 되어있다.


policy 섹션에서 키워드에 주어지는 값의 의미


match: 필수항목 그리고 내용은 인증국과 일치
supplied: 필수항목, 내용은 상관없음
optional:있거나 없거나 상관없음.

●MySQL옵션에 파일을 지정하기

서명된 signed-cert.pem파일을 MySQL옵션 --ssl-cert=에 지정하고 --ssl-ca나 --ssl-capath=에 CA의 CERTIFICATE 파일을 지정한다.

예를 들어 다음 예의 경우, 2가지 지정방법이 있다.

  • local CA의 CETIFICATE파일: local-ca-cert.pem
  • local CA에 사인된 파일 : signed-cert.pem
  • private key: private-key.pem
①--ssl-key=private-key.pem --ssl-cert=signed-cert.pem --ssl-ca=local-ca-cert.pem
②--ssl-key=private-key.pem --ssl-cert=signed-cert.pem --ssl-capath= {local-ca-cert.pem을 보존하는 디렉토리 }

local-ca-cert.pem을 보존하는 디렉토리에는 local-ca-cert.pem파일을 보존하는 것만으로는 부족하고 파일의 해쉬를 이름으로 한 파일을 작성할 필요가 있다.

local-ca-cert.pem해쉬
shell$ openssl x509 -hash -noout -in local-ca-cert.pem
a808a98b

local-ca-cert.pem의 해쉬를 붙인 파일을 작성하고 local-ca-cert.pem과 같은 디렉토리에 놓는다.
다음 처럼 조작한다.

local-ca-cert.pem 복사와 해쉬를 파일명으로 한 파일의 작성
shell# cp local-ca-cert.pem capath/
shell# cd capath/
shell# ln -s local-ca-cert.pem a808a98b.0

ln 대신 cp여도 상관없다.
파일명이 "해쉬.숫자"로 되어있다. 숫자는 0이상 정수를 자유로 붙이면 된다.
이것은 만에 하나 해쉬가 다른 파일의 해쉬하고 일치했을 경우에 구별을 두기위한 것이다.