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/dataGenere una clave privada (debe proporcionar una frase de contraseña).
openssl genrsa -des3 -out server.key 1024Elimine la frase de contraseña.
openssl rsa -in server.key -out server.keyEstablezca los permisos y el propietario apropiados en el archivo de clave privada.
chmod 400 server.key
chown postgres.postgres server.keyCree 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.crtNecesitará 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=1Necesita editar postgresql.conf para activar realmente ssl:
ssl = onEl servidor de PostgreSQL debe reiniciarse.
/etc/init.d/postgresql restartSi 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 1024openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.keyLuego 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 -CAcreateserialCopia 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.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.