콘텐츠로 건너뛰기
  • 홈
  • 카테고리
  • 최근
  • 태그
  • 인기
  • 사용자
  • 그룹
축소
브랜드 로고

AskFront 포럼

  1. 홈
  2. Databases
  3. PostgreSQL SSL with Letsencrypt (PostgreSQL Letsencrypt TLS 연결)

PostgreSQL SSL with Letsencrypt (PostgreSQL Letsencrypt TLS 연결)

예약됨 고정됨 잠김 이동됨 Databases
postgresqlpgsqldocker
1 게시물 1 작성자 222 조회수
  • 오래된 순
  • 최신 순
  • 가장 많은 투표
답글
  • 토픽으로 답글
로그인 후 답글 작성
이 토픽은 삭제되었습니다. 토픽 관리 권한이 있는 사용자만 볼 수 있습니다.
  • navystackN 오프라인
    navystackN 오프라인
    navystack
    전역 중재자
    에 작성함 마지막 수정자: navystack
    #1

    이 글에서는 Let's Encrypt에서 제공하는 TLS/SSL 인증서를 사용하여 PostgreSQL 서버를 설정하는 방법을 설명합니다.

    1.postgresql.conf 파일 준비하기

    postgresql.conf의 파일은 git clone으로 진행하시면 하실 필요가 없습니다. (덮어 쓰기가 됩니다.)

    전체 코드는 Github NavyStack/pgsql-docker에서 확인하실 수 있습니다.

    docker run -i --rm postgres cat /usr/share/postgresql/postgresql.conf.sample > postgresql.conf
    

    2.인증서 준비하기

    2.1 클라우드플레어 API 키 준비하기 (해당하는 경우) (CF_Token)

    클라우드플레어 API 키 발급 페이지로 이동하여 API키를 발급합니다.
    brave_GhZ5pebzcC.png

    brave_cIYflMqJrV.png

    brave_57yMMR2Fns.png

    그 후,

    export CF_Token="<token>"
    

    2.2 클라우드플레어 계정 ID 확인하기 (해당하는 경우) (CF_Account_ID)

    클라우드플레어 대시보드에 접속하면 주소창 주소의 끝에 CF_Account_ID가 나옵니다.
    brave_SttMF40E5R.png
    그 후,

    export CF_Account_ID="<id>"
    

    acme.sh 를 통해서 발급 할 것이므로 ACME.SH를 설치합니다.

    curl https://get.acme.sh | sh -s email=admin@askfront.com
    

    Code_lmBJxxZnFO.png

    source /home/$USER/.bashrc
    
    acme.sh
    

    Code_FDYDHBWebB.png

    2.인증서 발급하기

    acme.sh --issue --dns dns_cf -d heno.kr -d *.host.heno.kr --force --server letsencrypt
    

    Code_a3LeenFhzQ.png

    3. postgres 컨테이너 올리기

    3.1. postgresql.conf 파일을 인증서의 경로 및 파일이름에 맞게 수정합니다.

    기본적으로 전부 주석처리 되어있으므로 파일의 원하는 곳에 입력합니다.

    ssl = on
    ssl_cert_file = 'fullchain.cer'
    ssl_key_file = 'heno.kr.key'
    ssl_prefer_server_ciphers = on
    

    3.2. pg_hba.conf 파일을 필요에 따라 수정합니다.

    기본적으로 전부 주석처리 되어있으므로 파일의 원하는 곳에 입력합니다.

    hostssl    all    all    0.0.0.0/0    md5
    
    1. docker-compose.yml 파일을 적절하게 수정합니다.
    services:
      postgres:
        container_name: postgres_container
        image: postgres:16-bookworm
        ports:
          - 5432:5432
        volumes:
          - ./data:/var/lib/postgresql/data
          - ./logs:/var/log/postgresql
          - ./postgresql.conf:/var/lib/postgresql/data/postgresql.conf
          # - ./pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
          - /home/ubuntu/.acme.sh/heno.kr_ecc/heno.kr.key:/var/lib/postgresql/data/heno.kr.key
          - /home/ubuntu/.acme.sh/heno.kr_ecc/fullchain.cer:/var/lib/postgresql/data/fullchain.cer
          - /var/lib/pgsql/data
        environment:
          - POSTGRES_DB=postgres
          - POSTGRES_PASSWORD=postgres
          - POSTGRES_USER=postgres
          - PGDATA=/var/lib/postgresql/data
          - PGSSLMODE=require
    
    
    docker compose up -d
    

    4. Postgres 접속하기

    dbeaver_0yAXG6P6T1.png

    dbeaver_RJmqwM7fwO.png

    dbeaver_xYTQCcXYX0.png

    dbeaver_fpNKXKuw5R.png

    아래의 SQL문을 실행해서 TLS로 연결중인지 확인합니다.

    SELECT * from pg_catalog.pg_stat_ssl
    

    PostgreSQL의 자체적인 접속을 포함해서 나오네요

    조금 더 자세하게 보려면 아래의 SQL 문을 실행합니다.

    SELECT ssl.pid, usename, datname, ssl, client_addr, backend_type, wait_event
    FROM pg_catalog.pg_stat_ssl ssl, pg_catalog.pg_stat_activity a
    WHERE ssl.pid = a.pid
    

    dbeaver_Lv90LvALoZ.png

    1 답글 마지막 답글
    0
    답글
    • 토픽으로 답글
    로그인 후 답글 작성
    • 오래된 순
    • 최신 순
    • 가장 많은 투표


    • 로그인

    • 계정이 없으신가요? 등록

    • 검색하려면 로그인하거나 등록하세요.
    이용약관
    개인정보 처리방침
    • 첫 게시물
      마지막 게시물
    0
    • 홈
    • 카테고리
    • 최근
    • 태그
    • 인기
    • 사용자
    • 그룹