PostgreSQL y SSL

Publicado el vie 02 mayo 2008

Como parte de mi memoria de título he tenido que ingresar al misterioso y peligroso mundo de PostgreSQL y SSL. En esta gran aventura he gastado preciadas horas y mucho esfuerzo (dejé de jugar ET!!) para lograr tener un servidor PostgreSQL que permita conexiones seguras mediante SSL.

PostgreSQL permite emplear SSL en forma nativa, para ello necesitamos:

  1. PostgreSQL 8.x (porque es lo último publicado)
  2. OpenSSL 0.9.8

  3. Un certificado SSL (Firmado por una Autoridad Certificadora CA)

  4. La llave del certificado SSL

Para este caso puntual usaremos un certificado SSL firmado por nosotros mismos, válido si deseamos hacer pruebas. Para uso definitivo o de producción se recomienda uno firmado por alguna CA.

  1. Instalando los componentes de software:

yum install postgresql-server postgresql openssl // Para Fedora, CentOS y derivados
apt-get install postgresql-server postgresql openssl // Para Debian y sus derivados

  1. Configurando postgre, para ello editamos el fichero
    /var/lib/pgsql/data/postgresql.conf:

listen_addresses = "*"
ssl = true

  1. Modificamos las reglas de acceso, editando /var/lib/pgsql/data/pg_hba.conf:

"local" is for Unix domain socket connections only

local all all trust

IPv4 local connections:

hostssl all all 127.0.0.1/32 trust

IPv6 local connections:

hostssl all all ::1/128 trust
hostssl all all 192.168.1.0/24 md5
hostssl all all 158.170.34.6/32 md5

  1. Creamos el certificado firmado por nosotros mismos:

cd /var/lib/pgsql/data
openssl req -new -text -out server.req
openssl rsa -in privkey.pem -out server.key
rm privkey.pem
openssl req -x509 -in server.req -text -key server.key -out server.crt
chown postgres:postgres server.*
chmod og-rwx server.key

  1. Iniciamos el demonio postgresql, ahora cada vez que iniciemos sesión se empleará SSL.