PostgreSQL · 2 min read · Dec 15, 2025

Certificados SSL para PostgreSQL

Certificados SSL para PostgreSQL

Esto describe cómo configurar certificados ssl para habilitar conexiones encriptadas desde PgAdmin en alguna máquina cliente a postgresql en una máquina servidor. La suposición es que postgresql (compilado con soporte ssl) y openssl ya están instalados y funcionales en el servidor (Linux). PgAdmin ya está instalado en el cliente (ya sea Windows o Linux).

En el servidor, se requieren tres certificados en el directorio de datos. El valor predeterminado de CentOS es /var/lib/pgsql/data/:
root.crt (certificado raíz de confianza)
server.crt (certificado del servidor)
server.key (clave privada)

Emita comandos como root.

sudo -
cd /var/lib/pgsql/data

Genere una clave privada (debe proporcionar una frase de contraseña).

openssl genrsa -des3 -out server.key 1024

Elimine la frase de contraseña.

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

Establezca los permisos y el propietario apropiados en el archivo de clave privada.

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

Cree el certificado del servidor.
-subj es un atajo para evitar que se le pida la información.
-x509 produce un certificado autofirmado en lugar de una solicitud 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]'

Dado que estamos autofirmando, usamos el certificado del servidor como el certificado raíz de confianza.

cp server.crt root.crt

Necesitará editar pg_hba.conf. Por ejemplo:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" es solo para conexiones de socket de dominio Unix
local   all         all                               trust
# Conexiones locales IPv4:
host    all         all         127.0.0.1/32          trust  
  
# Conexiones remotas IPv4 para usuarios autenticados
hostssl all         www-data    0.0.0.0/0             md5 clientcert=1  
hostssl all         postgres    0.0.0.0/0             md5 clientcert=1

Necesita editar postgresql.conf para activar realmente ssl:

ssl = on

El servidor de PostgreSQL debe reiniciarse.

/etc/init.d/postgresql restart

Si el servidor no se inicia (o reinicia), consulte el registro de inicio de PostgreSQL, /var/lib/pgsql/pgstartup.log predeterminado para CentOS, para ver el motivo.

En el cliente, necesitamos tres archivos. Para Windows, estos archivos deben estar en el directorio %appdata%\postgresql. Para Linux en el directorio ~/.postgresql/.
root.crt (certificado raíz de confianza)
postgresql.crt (certificado del cliente)
postgresql.key (clave privada)

Genere los archivos necesarios en la máquina del servidor y luego cópielos al cliente. Generaremos los archivos necesarios en el directorio /tmp/.

Primero cree la clave privada postgresql.key para la máquina cliente y elimine la frase de contraseña.

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

Luego cree el certificado postgresql.crt. Debe ser firmado por nuestra raíz de confianza (que está utilizando el archivo de clave privada en la máquina del servidor). Además, el nombre común del certificado (CN) debe establecerse en el nombre de usuario de la base de datos con el que 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

Copia los tres archivos que creamos desde el directorio /tmp/ del servidor a la máquina cliente.

Copia el certificado raíz de confianza root.crt de la máquina del servidor a la máquina cliente (para Windows pgadmin %appdata%\postgresql\ o para Linux pgadmin ~/.postgresql/). Cambia los permisos del archivo postgresql.key para restringir el acceso solo a ti (probablemente no sea necesario en Windows ya que el acceso restringido ya se hereda). Elimina los archivos del directorio /tmp/ del servidor.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.