PostgreSQL · 2 min read · Dec 15, 2025

Certificados SSL Para PostgreSQL

Certificados SSL Para PostgreSQL

Isso descreve como configurar certificados ssl para habilitar conexões criptografadas do PgAdmin em uma máquina cliente para o postgresql em uma máquina servidor. A suposição é que o postgresql (compilado com suporte a ssl) e o openssl já estão instalados e funcionais no servidor (Linux). O PgAdmin já está instalado no cliente (Windows ou Linux).

No servidor, três certificados são necessários no diretório de dados. O padrão do CentOS é /var/lib/pgsql/data/:
root.crt (certificado raiz confiável)
server.crt (certificado do servidor)
server.key (chave privada)

Emita comandos como root.

sudo -
cd /var/lib/pgsql/data

Gere uma chave privada (você deve fornecer uma frase secreta).

openssl genrsa -des3 -out server.key 1024

Remova a frase secreta.

openssl rsa -in server.key -out server.key

Defina as permissões e o proprietário apropriados no arquivo da chave privada.

chmod 400 server.key  
chown postgres.postgres server.key

Crie o certificado do servidor.
-subj é um atalho para evitar a solicitação das informações.
-x509 produz um certificado autoassinado em vez de um pedido de certificado.

openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=thebrain.ca/[email protected]'

Como estamos autoassinando, usamos o certificado do servidor como o certificado raiz confiável.

cp server.crt root.crt

Você precisará editar o pg_hba.conf. Por exemplo:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" é apenas para conexões de socket de domínio Unix
local   all         all                               trust
# Conexões locais IPv4:
host    all         all         127.0.0.1/32          trust  
  
# Conexões remotas IPv4 para usuários autenticados
hostssl all         www-data    0.0.0.0/0             md5 clientcert=1  
hostssl all         postgres    0.0.0.0/0             md5 clientcert=1

Você precisa editar o postgresql.conf para realmente ativar o ssl:

ssl = on

O servidor Postgresql deve ser reiniciado.

/etc/init.d/postgresql restart

Se o servidor falhar ao (re)iniciar, verifique o log de inicialização do postgresql, /var/lib/pgsql/pgstartup.log padrão para CentOS, para saber o motivo.

No cliente, precisamos de três arquivos. Para Windows, esses arquivos devem estar no diretório %appdata%\postgresql. Para Linux, no diretório ~/.postgresql/.
root.crt (certificado raiz confiável)
postgresql.crt (certificado do cliente)
postgresql.key (chave privada)

Gere os arquivos necessários na máquina do servidor e, em seguida, copie-os para o cliente. Vamos gerar os arquivos necessários no diretório /tmp/.

Primeiro, crie a chave privada postgresql.key para a máquina cliente e remova a frase secreta.

openssl genrsa -des3 -out /tmp/postgresql.key 1024
openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.key

Em seguida, crie o certificado postgresql.crt. Ele deve ser assinado pela nossa raiz confiável (que está usando o arquivo da chave privada na máquina do servidor). Além disso, o nome comum do certificado (CN) deve ser definido como o nome de usuário do banco de dados com o qual nos conectaremos.

openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=www-data'
openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -out /tmp/postgresql.crt -CAcreateserial

Copie os três arquivos que criamos do diretório /tmp/ do servidor para a máquina cliente.

Copie o certificado raiz confiável root.crt da máquina do servidor para a máquina cliente (para Windows pgadmin %appdata%\postgresql\ ou para Linux pgadmin ~/.postgresql/). Altere a permissão do arquivo postgresql.key para restringir o acesso apenas a você (provavelmente não é necessário no Windows, pois o acesso restrito já é herdado). Remova os arquivos do diretório /tmp/ do servidor.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.