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/dataGere uma chave privada (você deve fornecer uma frase secreta).
openssl genrsa -des3 -out server.key 1024Remova a frase secreta.
openssl rsa -in server.key -out server.keyDefina as permissões e o proprietário apropriados no arquivo da chave privada.
chmod 400 server.key
chown postgres.postgres server.keyCrie 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.crtVocê 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=1Você precisa editar o postgresql.conf para realmente ativar o ssl:
ssl = onO servidor Postgresql deve ser reiniciado.
/etc/init.d/postgresql restartSe 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 1024openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.keyEm 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 -CAcreateserialCopie 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.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.