database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Tutorials 5502 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 5502
SSL 보안 PostgreSQL 서버 운영하기
작성자
김상기(ioseph)
작성일
2004-08-25 15:40
조회수
10,668

웹 서버만 보안 서버를 만드는 것이 아니라, PostgreSQL 에서도 서버와 클라이언트간의 통신 패킷이 암호화 되어서 움직이는 보안 DB 서버를 만들 수 있습니다.

 

이것이 필요하려면, 다음 조건이 만족 되어야합니다.

서버가 일단 --with-openssl 옵션으로 만들어져야하고,

클라이언트가 ssl 연결 기능이 있어야합니다.

예를 들어서 php 컴파일 할때, 사용하는 libpq 놈이 --with-openssl 옵션으로 만들어져야합니다.

jdbc 쪽에서 ssl 연결 기능을 지원해야합니다.

 

1. 서버 만들기

openssl 패키지가 시스템에 설치 되어있고, PostgreSQL 소스코드에서 configure 명령 실행시 --with-openssl 옵션을 더 추가해줍니다. openssl 패키지가 일반적인 디렉토리가 아닌 곳에 설치되어있다면 그 경로까지도 지정해 주시고.

다음 make all; make install 하면, 일단 프로그램은 갖추어진 샘입니다.

 

2. 보안 서버 개요

보안 서버를 이용하는 방법에는 서버에서 제공하는 ssl 기능을 이용하는 방법과, openssh 의 ssh 터널링 기법을 이용하는 방법이 있는데,

전자는 위에서처럼 서버 자체에서 ssl 기능이 포함 된 것이고, 후자는 이런 기능이 없는 서버와 통신은 ssh 프로그램을 이용해서 보안 연결 하는 것입니다.

여기서는 ssh 터널링 이야기는 생략하겠습니다. 그래서, 일단 ssl 기능이 포함되어있는 db 서버를 제대로 가능 하려면, 다음 작업이 필요합니다.

  • postgresql.conf 파일에서 ssl 값을 true 로 바꾸고,
  • pg_hba.conf 파일에서 hostssl 줄을 추가해서 ssl 연결을 이용할 연결 범위를 지정하고,
  • 서버를 실행시키기 위해서 필요한 서버 인증서를 만들어준다.

3. postgresql.conf , pg_hba.conf 파일 수정

postgresql.conf 파일 수정과, pg_hba.conf 파일 수정은 해당 파일을 열어보면 예제로 주석처리 되어있으니 그것을 참조하셔서 적당히 수정하시면됩니다.

 

postgresql.conf

.....

ssl = true

.....

이렇게 바꾸어 주시면 되구요. 디폴트는 주석처리 되어있는 false 입니다.

 

pg_hba.conf 파일은

 

hostnossl    all         all         127.0.0.1         255.255.255.255   trust
hostssl      all         all         127.0.0.1         255.255.255.255   reject
hostssl      all         all         0.0.0.0           0.0.0.0           md5


이런 형태입니다.

설명하면, 일단, localhost 관련은 ssl 기능을 사용하지 않고, 나머지는 모두 ssl 연결만 허용하겠다는 지정입니다.

 

4. 서버 인증서 만들기.

일단 postgresql 서버를 가동하는 시스템 계정으로 로그인하고, (디폴트가 postgres 지요, su - postgres) 다음 명령을 차례로 실행합니다.

다음 postgresql.conf 파일이 있는 디렉토리로 이동합니다. 다음 모든 작업 이 postgresql.conf 파일이 있는 디렉토리에서 이루워집니다. 쉽게 말해서 PGDATA 디렉토리가 되는 샘이지요.

 

 

$ openssl req -new -text -out server.req
$ openssl rsa -in privkey.pem -out server.key
$ openssl req -x509 -in server.req -text -key server.key -out server.crt
$ chmod og-rwx server.key


이때 두번째 server.key 만들때, common name을 물어볼 때, 서버가 가동되는 호스트 이름을 입력해주고,

challenge password 란에는 비워두시면 됩니다.

다음 같은 방식으로 root.crt 파일도 같이 만드시고, (server 라는 단어를 root 로 바꾸기만 하면 됨) 이때, common name은 그냥 ROOT CA 이런 형태로 지정해주시면 됩니다.

root.crt와, server.crt 를 공인된 것으로 쓰고 있다면, 그것의 이름을 각각 root, server 로 바꾸어서 그냥 사용하셔도 무방합니다. (안해봐서 모름. 아마 될 것 같음)

 

5. 실행 및 테스트

모든 작업이 끝났으면, 서버를 재 가동하고, 테스트를 해보면 됩니다. 만일 정상적으로 재가동하지 않았다면, 로그 파일을 보시고 적당히 조치를 취해 주시면 됩니다. 대부분 root.crt, server.crt 파일 없다거나 그 해당 파일의 퍼미션이 이상하다거나 하는 오류들일 것입니다.

 

다음 테스트 하는 방법은 간단합니다.

 

 

[ioseph@bengi ioseph]$ psql mydb
Welcome to psql 7.4.5, the PostgreSQL interactive terminal.

사용법:  \copyright 저작권 정보
         \h SQL 명령어 도움말
         \? 내장 명령어 도움말
         \g 또는 명령 끝에 ; 쿼리 실행
         \q 마침

화면단위 보기 기능 끔(전체 자료 모두 보여줌)
작업수행시간 보임
mydb=# \q



[ioseph@bengi ioseph]$ psql -h bengi mydb
비밀번호:
Welcome to psql 7.4.5, the PostgreSQL interactive terminal.

사용법:  \copyright 저작권 정보
         \h SQL 명령어 도움말
         \? 내장 명령어 도움말
         \g 또는 명령 끝에 ; 쿼리 실행
         \q 마침

SSL 연결 (cipher: EDH-RSA-DES-CBC3-SHA, bits: 168)

화면단위 보기 기능 끔(전체 자료 모두 보여줌)
작업수행시간 보임


 

윗 명령은 SSL 기능이 없는 일반 연결

아랫 명령은 SSL 기능을 이용한 보안 연결 입니다.

차이는 보안 연결이 이루워지면, psql 실행화면에, SSL .... 이 줄이 보이게 됩니다.

 

6. 마무리.

7.4.5 이전 버전에서도 ssl 보안 서버로 말썽이 많았었는데, 실무에 사용해 보질 않아서 얼마나 더 많은 버그가 숨어 있을지는 모르겠지만,

아무튼 이번에 살펴본 것으로 안전하게 움직이네요. 보안 서버가 필요한 분들에게 도움이 되셨길.

웹 서버도 idc에 있고 db 서버도 idc에 있고, 두 서버의 패킷은 오직 서로간만 통신한다고 안전한 것이 아닙니다.

정말로 웹서버와 db 서버의 패킷이 암호화 되어야할 상황의 시스템을 구축해야할 상황이라면, 한번 시도해 보셔도 될 듯싶네요.

 

 

 

이 글에 대한 댓글이 총 1건 있습니다.

rootcrt 는 왜 만드는 건가요?

 

zoar님이 2005-08-23 16:51에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
5564View와 Rule을 이용한 View 갱신
신기배
2004-10-01
4752
5563Listen과 Notify를 이용한 데이터 동기화
신기배
2004-10-01
4548
5520Slony-I의 Slonik명령에 대해 정리해보았습니다. [2]
천주현
2004-09-03
5201
5502SSL 보안 PostgreSQL 서버 운영하기 [1]
김상기
2004-08-25
10668
5421Slony-1을 이용한 멀티 슬레이브 리플리케이션 [1]
신기배
2004-07-22
5796
5411connectby 함수 사용하기
김상기
2004-07-16
5694
5383DB 인코딩 컨버전 (서버 <-> 클라이언트) [5]
신기배
2004-06-25
8990
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2020 DSN, All rights reserved.
작업시간: 0.010초, 이곳 서비스는
	PostgreSQL v13.1으로 자료를 관리합니다