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>
Veröffentlichen Sie Ihren Java-Code. Legen Sie die Verbindungseigenschaften für SSL fest? Siehe https://jdbc.postgresql.org/documentation/head/connect.html –
@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. –
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 ...) –