2016-05-23 8 views
1

Ich habe mein eigenes Zertifikat erstellt und postgresql.conf Datei konfiguriert:Wie verbindet man sich mit PostgreSQL-Datenbank über SSL?

... 
#authentication_timeout = 1min   # 1s-600s 
ssl = true        # (change requires restart) 
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers 
             # (change requires restart) 
#ssl_prefer_server_ciphers = on   # (change requires restart) 
#ssl_ecdh_curve = 'prime256v1'   # (change requires restart) 
ssl_cert_file = '/etc/ssl/certs/company/database/certificate'   # (change requires restart) 
ssl_key_file = '/etc/ssl/certs/company/database/key'   # (change requires restart) 
ssl_ca_file = '/usr/share/ca-certificates/company/ca/certificate'      # (change requires restart) 
#ssl_crl_file = ''      # (change requires restart) 
#password_encryption = on 
#db_user_namespace = off 
#row_security = on 
... 

Dann lasse ich meinen Server mit der Datenbank verbinden, pg_hba.conf:

... 
hostssl postgres    postgres    XXX.XXX.XXX.XXX/0   md5 
... 

Also, ich es über psql verbinden kann Befehlszeile:

Aber wenn ich versuche, eine Verbindung mit der Datenbank über meine JAV zu öffnen eine Anwendung, auch wenn ich liefern die Trusts mit meiner Datenbank enthalten Zertifikat, halte ich keine Verbindung mit ihm bekommen:

mvn package -Djavax.net.ssl.trustStore=/opt/app/truststore -Djavax.net.ssl.trustStorePassword=changeit 

Ausnahme:

2016-05-23 16:28:32,900 WARN [com.mchange.v2.resourcepool.BasicResourcePool] - <Having failed to acquire a resource, [email protected] is interrupting all Threads waiting on a resource to check out. Will try again in response to new client requests.> 
2016-05-23 16:28:32,900 WARN [com.mchange.v2.resourcepool.BasicResourcePool] - <com[email protected]2be057bf -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: > 
java.lang.NullPointerException 
    at org.postgresql.Driver.parseURL(Driver.java:532) 
    at org.postgresql.Driver.acceptsURL(Driver.java:431) 
    at java.sql.DriverManager.getDriver(DriverManager.java:299) 
    at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:285) 
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:161) 
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:161) 
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:147) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:202) 
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138) 
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125) 
    at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44) 
    at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870) 
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696) 
2016-05-23 16:28:32,901 WARN [com.mchange.v2.resourcepool.BasicResourcePool] - <Having failed to acquire a resource, [email protected] is interrupting all Threads waiting on a resource to check out. Will try again in response to new client requests.> 

Via psql alles scheint in Ordnung zu arbeiten, nicht mit meiner Bewerbung. Irgendwelche Vorschläge?

EDIT:

Meine props.properties Datei:

uatDb.user=postgres 
uatDb.password=password 
uatDb.driverClass=org.postgresql.Driver 
uatDb.jdbcUrl=jdbc:postgresql://<server_name>:1234/uat?ssl=true 
uatDb.port=5443 
uatDb.name=uat 
uatDb.host=<server_name> 
+1

Veröffentlichen Sie Ihren Java-Code. Legen Sie die Verbindungseigenschaften für SSL fest? Siehe https://jdbc.postgresql.org/documentation/head/connect.html –

+0

@AndrewHenle Ja, ich habe die Eigenschaften für diese Verbindung in einer Datei festgelegt. Ich habe meine Frage bearbeitet. Ich rufe meine Datenbank über 'maven' an, um meine Anwendung zu erstellen, die auf meine Datenbank zugreift, um einige Tests durchzuführen. –

+0

Angenommen, Ihre Verbindung funktioniert ohne SSL aktiviert, können Sie '-Djavax.net.debug = all 'in MAVEN_OPTS setzen, um Java Connection Debugging-Daten zu erhalten? Siehe http://stackoverflow.com/questions/2007192/maven-jetty-plugin-how-to-control-vm-arguments (Ich bin kein Maven Guru ...) –

Antwort

1

einen Schlüsselspeicher benötigen auch, glaube ich. Da ssl = true sollte einen privaten Schlüssel für Ihr selbstsigniertes Zertifikat benötigen. Ich würde auch "nonvalidating SSLFactory" Einstellung hinzufügen

?ssl=true&amp;sslfactory=org.postgresql.ssl.NonValidatingFactory 

Auch Ihr Port für Servereinstellung: 1234 nicht 5432. überein

"ParseURL" ist ein Null-Fehler, vielleicht gibt es eine Variable irgendwo in der JDBC-URL das ist falsch eingestellt.

+0

Die "org.postgresql.ssl.NonValidatingFactory" factory umgeht alle SSL-Zertifikate, wodurch die SSL-Verbindung sinnlos wird. –

Verwandte Themen