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:
- PostgreSQL 8.x (porque es lo último publicado)
-
OpenSSL 0.9.8
-
Un certificado SSL (Firmado por una Autoridad Certificadora CA)
- 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.
- 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
- Configurando postgre, para ello editamos el fichero
/var/lib/pgsql/data/postgresql.conf:
listen_addresses = "*"
ssl = true
- 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
- 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
- Iniciamos el demonio postgresql, ahora cada vez que iniciemos sesión se empleará SSL.