Encontrei o problema. Simplesmente passando
ssl = true
não é suficiente para JDBC, você também precisa instalar os certificados raiz corretos em seu keystore Java para que o PgJDBC possa verificar o certificado remoto.
Se você não quiser configurar o armazenamento de certificados raiz, poderá passar:
ssl = true
sslfactory = org.postgresql.ssl.NonValidatingFactory
embora isso desabilite a proteção contra ataques man-in-the-middle , para que sua sessão SSL não tenha mais segurança de ponta a ponta confiável.
Veja os documentos do Heroku aqui:
http://devcenter.heroku .com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting_to_a_dedicated_database_remotely
(Aviso sobre a segurança SSL adicionada por Craig Ringer)