Error de autenticación al conectarse a la base de datos Heroku PostgreSQL

Estoy desarrollando una aplicación Node.js usando PostgreSQL y hosting en Heroku. Mi problema es que recibo un error de autenticación así:

14:32:05 web.1 | { [error: no pg_hba.conf entry for host "193.40.244.196", user "username", database "database_name", SSL off] 14:32:05 web.1 | length: 168, 14:32:05 web.1 | name: 'error', 14:32:05 web.1 | severity: 'FATAL', 14:32:05 web.1 | code: '28000', 14:32:05 web.1 | detail: undefined, 14:32:05 web.1 | hint: undefined, 14:32:05 web.1 | position: undefined, 14:32:05 web.1 | internalPosition: undefined, 14:32:05 web.1 | internalQuery: undefined, 14:32:05 web.1 | where: undefined, 14:32:05 web.1 | file: 'auth.c', 14:32:05 web.1 | line: '483', 14:32:05 web.1 | routine: 'ClientAuthentication' } 

Puede ser un problema de SSL, pero no debería ser como se menciona aquí . SSL debe ser compatible fuera de la caja. ¿Así que estoy perplejo y solo puedo preguntar qué podría causar este error?

No estoy seguro de si tengo que editar el pg_hba.conf en mi sistema, pero no puedo encontrarlo.

Me encontré con esto, es una solución simple. Simplemente conéctate a través de HTTPS en su lugar

Se solucionó estableciendo PGSSLMODE ( http://www.postgresql.org/docs/9.0/static/libpq-envars.html ) en Heroku. Le dice a PostgreSQL que por defecto a SSL.

 $ heroku config:set PGSSLMODE=require 

node-postgres no admite SSL en sus enlaces de javascript, que está utilizando si lo hace:

 var pg = require('pg'); 

Para obtener SSL, necesita usar el enlace nativo haciendo esto:

 var pg = require('pg').native; 

No necesita usar SSL cuando su aplicación se ejecuta dentro de Heroku, solo necesita usar SSL para conectarse de forma remota (cuando su aplicación se ejecuta localmente).

Agregué estos parámetros y ahora puedo conectarme a mi instancia de heroku postgres desde un servidor externo, específicamente, en la configuración de knex.js en un servidor de nodo express:

 var knex = require('knex')({ client: 'postgres', connection: 'postgres://username:password@host:5432/yourdbname?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory' }); 

Se encontró con el mismo problema. Solo habilitado ssl = true en los parámetros de db.

 var pg = require('pg'); var params = { host: 'heroku_hostname',user: 'username',password: 'password',database: 'database',ssl: true }; var client = new pg.Client(params); client.connect();