Postgres 연결에 SSL을 활성화하는 방법

2968 단어 yugabytelinuxpostgres
암호화된 네트워크 연결을 사용하는 것은 현대 환경에서 선택 사항이 아닙니다. 그러나 추가 암호화 단계를 사용하고 암호화 핸드셰이크를 사용하면 네트워크 연결에 대기 시간과 오버헤드가 추가됩니다.

SSL 활성화에 대해 안내하는 다른 블로그 게시물이 있기 때문에 이 글은 저를 위한 스크래치 패드에 가깝습니다. 그러나 이것들은 내가 원하는 것과 정확히 일치하지 않았습니다.

이 블로그 게시물은 개념 증명과 같은 Postgres용 SSL 설정을 빠르고 간단하게 설명합니다. 이 블로그 게시물은 공식적으로 서명된 인증서와 신중하게 강화된 SSL 암호를 사용하는 SSL 설정을 설명하지 않습니다.

첫 번째 단계: 인증서



SSL의 경우 암호화 키(인증서)와 암호 해독 키(키)가 있어야 합니다. SSL 인증서가 작동하는 방식은 인증서를 만들 때 서명 기관('인증 기관'이라고 함)이라는 특별한 기능을 가진 또 다른 암호화 및 암호 해독 조합이 포함되어야 한다는 것입니다. 이렇게 하면 신뢰하기로 선택한 서명 기관에서 서명한 경우 인증서가 합법적인 것으로 판단될 수 있으므로 대부분의 운영 체제 SSL 설치에는 미리 설정된 신뢰할 수 있는 인증 기관 인증서 번들과 함께 제공됩니다.

빠르고 간단한 설정을 위해 여전히 기관에서 인증서 서명을 수행해야 합니다. 우리만이 기관 인증서를 직접 생성합니다. 자신의 인증서에 서명하는 이 설정은 매우 논리적으로 '자체 서명된 인증서'로 명명됩니다. 이는 개인 기관 별칭에 대해 알지 못하는 클라이언트가 해당 인증서를 기관으로 설정하면 오류가 발생한다는 단점이 있습니다.

그러나 테스트 환경을 제어할 수 있는 경우 클라이언트를 자체 인증 기관(인증서를 통해)으로 가리킬 수 있기 때문에 문제가 되지 않습니다.

다음은 인증 기관(CA) 키와 인증서를 생성한 다음 서버 키와 csr(인증서 서명 요청)을 생성한 다음 요청에 서명하여 인증서를 생성하는 명령(Linux용)입니다.

--CA
openssl genrsa 2048 > ca.key
openssl req -new -x509 -nodes -days 365000 -key ca.key -out ca.cert
--server
openssl req -newkey rsa:2048 -nodes -days 365000 -keyout server.key -out server.csr
openssl x509 -req -days 365000 -set_serial 01 -in server.csr -out server.cert -CA ca.cert -CAkey ca.key


몇 가지 세부 정보를 입력해야 합니다. CN 별칭 일반 이름은 호스트 이름으로 설정해야 합니다.

그 결과 다음 파일이 생성됩니다.
  • ca.key -> 인증 기관 키. 일반적인 사용에는 필요하지 않습니다.
  • ca.cert -> 인증 기관 인증서. 필요합니다.
  • server.key -> 키 파일. 필요합니다.
  • server.csr -> 서명 요청. 일반적인 사용에는 필요하지 않습니다.
  • server.cert -> 인증서 파일. 필요합니다.

  • 두 번째 단계: postgreSQL 구성



    SSL 관련 파일을 암호화에 사용하려면 포스트마스터가 사용할 수 있어야 합니다.

    ssl = on
    ssl_ca_file = '/var/lib/pgsql/11/data/ssl/ca.cert'
    ssl_cert_file = '/var/lib/pgsql/11/data/ssl/server.cert'
    ssl_key_file = '/var/lib/pgsql/11/data/ssl/server.key'
    


    이것이 필요한 전부는 아닙니다. pg_hba.conf SSL을 허용해야 합니다. SSL을 허용해야 하는 연결 유형인 첫 번째 인수로 구성됩니다. 공통 유형 '호스트'는 SSL과 비SSL을 모두 허용합니다. 'hostssl' 유형은 SSL을 적용하고 'hostnossl' 유형은 명시적으로 SSL을 허용하지 않습니다.

    '호스트' 유형을 사용하면 SSL과 비SSL이 모두 동일한 포트에서 제공될 수 있습니다.

    선택적 세 번째 단계: pgbouncer



    pgbouncer를 사용하는 경우 pgbouncer에 대해 SSL도 활성화할 수 있습니다. Pgbouncer는 클라이언트에 서비스를 제공하기 위해 동일한 파일(인증 기관 및 서버 인증서, 서버 키 파일)이 필요합니다.

    client_tls_sslmode = allow
    client_tls_ca_file = /tmp/ca.cert
    client_tls_key_file = /tmp/server.key
    client_tls_cert_file = /tmp/server.cert
    


    pgbouncer가 SSL을 제공하면 데이터베이스에 대한 비SSL 연결(또는 소켓 연결)을 사용할 수 있으므로 pgbouncer가 SSL 터미네이터로 작동합니다.

    pgbouncer가 SSL을 데이터베이스와 통신해야 하는 경우 위의 'client_tls' 매개변수와 마찬가지로 'server_tls'로 시작하는 추가 설정이 필요합니다.

    좋은 웹페이지 즐겨찾기