PostgreSQL 14: TLS 연결
요약
PostgreSQL을 외부 데이터베이스 서버로 사용하려면 TLS/SSL 연결을 사용하는 것이 좋습니다. 이 게시물은 인증서 생성, 서버 구성 및 확인 방법을 보여줍니다.
3 단계 만 있습니다.
psql
사용환경
OpenBSD 7.1
참조
지도 시간
1. 서버 인증서 준비
자체 서명된 인증서 생성
PostgreSQL 데이터 디렉터리에 _postgresql 사용자로 서버 인증서를 만듭니다.
$ doas su - _postgresql
$ whoami
_postgresql
$ cd /var/postgresql/data
openssl 명령줄 도구를 사용하여 자체 서명된 인증서를 만듭니다.
물론 아래
-days 36500
는 수정할 수 있습니다. 즉, 36500일 = 거의 100년 이내에 유효합니다.$ # ksh
$ DB_HOST_DOMAIN="(...)"
$ openssl req -new -x509 -days 36500 -nodes -text -out server.crt -keyout server.key -subj "/CN=$DB_HOST_DOMAIN"
결과는 다음과 같습니다.
Generating a 2048 bit RSA private key
..............................................................................+++++
................+++++
writing new private key to 'server.key'
-----
당신은 볼 수 있습니다:
$ ls -l server\.*
-rw-r--r-- 1 _postgresql _postgresql 3660 Apr 24 13:17 server.crt
-rw-r--r-- 1 _postgresql _postgresql 1704 Apr 24 13:17 server.key
키 권한 수정:
$ chmod 400 server.key
/var/postgresql/data에서 _postgresql로 유지합니다.
(선택 사항) 클라이언트가 확인할 CA 서명 인증서 생성
망설이지 않고/etc/ssl/openssl.cnf를 편집하여 v3_ca 확장을 사용하면 클라이언트에서 ID를 확인할 수 있는 서버 인증서를 만들 수 있습니다. 루트 및 중간 인증서를 생성합니다. 편집에 대한 자세한 내용은 the official docs에 있습니다.
$ # create a certificate signing request (CSR) and a public/private key file
$ openssl req -new -nodes -text -out root.csr -keyout root.key -subj "/CN=$ROOT_CA_DOMAIN"
$ chmod 400 root.key
$ # create a root certificate authority
$ openssl x509 -req -in root.csr -text -days 36500 -extfile /etc/ssl/openssl.cnf -extensions v3_ca -signkey root.key -out root.crt
$ # ... might be end with "Error Loading extension section v3_ca"
$ # create a server certificate signed by the new root certificate authority
$ openssl req -new -nodes -text -out server.csr -keyout server.key -subj "/CN=$DB_HOST_DOMAIN"
$ chmod 400 server.key
$ openssl x509 -req -in server.csr -text -days 36500 -CA root.crt -CAkey root.key -CAcreateserial -out server.crt
여기에서 "Error Loading extension section v3_ca"를 만날 수 있습니다. 이 경우 this post 다음에
/etc/ssl/openssl.cnf
를 수정해 보십시오.$ ls {root,server}*
root.crt root.csr root.key root.srl server.crt server.csr server.key
2. 서버 구성 파일 편집
귀하는
/var/postgresql/data
(으)로 _postgres
에 있습니다. 오른쪽?$ whoami
_postgresql
$ pwd
/var/postgresql/data
postgresql.conf 편집:
$ nvim postgresql.conf
원격 클라이언트의 요청과 SSL 연결을 활성화하려면 다음을 수행하십시오.
#listen_addresses = 'localhost' ...
+ listen_addresses = '*'
...
#port = 5432
+ port = {$DB_PORT} # (optional) for security
...
#ssl = off
+ ssl = on
#ssl_cert_file = 'server.crt'
#ssl_ca_file = ''
#ssl_crl_file = ''
#ssl_key_file = 'server.key'
또한 자체 서명되지 않은 인증서를 사용하고 root.crt가 있는 경우
ssl_ca_file
를 채워야 합니다.다음으로 pg_hba.conf를 편집합니다.
$ nvim pg_hba.conf
클라이언트에서 SSL 연결을 허용하기 위해 맨 아래에 줄
hostssl
을 추가하려면 다음을 수행하십시오.+ hostssl all all 0.0.0.0/0 md5
14부터는 자체 서명된 인증서를 사용할 때
clientcert
를 0으로 설정할 필요가 없습니다. "auth-options" 중 하나이며 유효한 클라이언트 인증서가 있는 경우 verify-ca
또는 verify-full
로 설정할 수 있습니다. , 1(defalut, then)/0/no-verify로 설정할 수 있습니다.게다가 도중에 무언가 실패할 때/var/postgresql/logfile은 세부 정보를 얻는 데 확실히 유용합니다.
사용자에게 돌아가 보겠습니다.
$ # end of behavior as _postgresql
$ exit
데이터베이스 서버를 다시 시작합니다.
$ doas rcctl restart postgresql
완료.
3. 클라이언트 시스템에서 확인
클라이언트 시스템에서 "sslmode=require"와 함께
psql
을 사용합니다.$ psql "sslmode=require host=$DB_HOST port=$DB_PORT user=$DB_USER dbname=$DB_NAME"
Password for user ...:
db 사용자의 암호를 입력하십시오.
psql (14.2)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=#
여기서 "프로토콜: TLSv1.3"등을 기반으로 TLS 연결을 획득합니다 :)
Reference
이 문제에 관하여(PostgreSQL 14: TLS 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nabbisen/postgresql-14-tls-connection-184l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)