Connection DSNs and SSL (TLS)#
ノードはlibpq
を使用して接続するため、ノードのDSNは libpq 接続文字列です。そのため、接続文字列には、SSLの接続パラメーターを含む許可されたlibpq
接続パラメーターを含めることができます。
DSNは、指定されたノードに接続するクライアントからの接続文字列として機能する必要があります。クライアント証明書を使用するこのようなパラメーターセットの例は次のとおりです。
sslmode=verify-full sslcert=bdr_client.crt sslkey=bdr_client.key
sslrootcert=root.crt
この設定では、ファイルbdr_client.crt 、bdr_client.key
、およびroot.crt
が、適切な権限を持つ各ノードのデータディレクトリに存在する必要があります。
verify-full
モードの場合、サーバーのSSL証明書がチェックされ、root.crt
認証局で直接または間接的に署名されていること、および接続で使用されるホスト名またはアドレスが証明書の内容と一致することを確認します。名前の場合、これはサブジェクトの別名、または証明書にそのような名前が存在しない場合、サブジェクトのコモンネームCNフィールドと一致します。
Postgresは現在IPアドレスのサブジェクト代替名をサポートしていないため、名前ではなくアドレスによって接続が行われる場合、
CNフィールドと一致する必要があります。
クライアント証明書のCNは、PGD接続を行うユーザーの名前である必要があります。通常はユーザーpostgresです。各ノードには、
pg_hba.conf ファイルでの接続を許可する一致する行が必要です。例
hostssl all postgres 10.1.2.3/24 cert
hostssl replication postgres 10.1.2.3/24 cert
別の設定は、クライアント証明書の代わりにSCRAM-SHA-256
パスワードを使用し、証明書が適切に署名されている限りサーバーIDを検証しないことです。ここで、DSNパラメーターは次のとおりです。
sslmode=verify-ca sslrootcert=root.crt
対応するpg_hba.conf 行は次のとおりです。
hostssl all postgres 10.1.2.3/24 scram-sha-256
hostssl replication postgres 10.1.2.3/24 scram-sha-256
このようなシナリオでは、 postgresユーザーには、正しいパスワードを含む .pgpass ファイルが必要です。