viernes, 2 de mayo de 2008

PostgreSQL y SSL

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
  2. Configurando postgre, para ello editamos el fichero
    /var/lib/pgsql/data/postgresql.conf:

    listen_addresses = "*"
    ssl = true
  3. 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
  4. 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
  5. Iniciamos el demonio postgresql, ahora cada vez que iniciemos sesión se empleará SSL.

No hay comentarios: