I run into a problem today trying to connect to an Azure PostgreSQL database. The database enforces SSL connections (“SSL enforce status” = “ENABLED”).

The Java/Spring Boot service could not connect to the database. It would crash with an error message complaining that it could not find the certificate /root/.postgresql/root.crt.

I tried various tricks which all failed miserably. I could disable the SSL enforcement but that would not have been nice either.

When all else failed, I RTFM. According to the documentation, the purpose of this certificate is to check that the server certificate is signed by a trusted certificate authority.

Since my application is packaged in a Docker image based on the standard JRE image, I guessed that my image probably already has such a file somewhere. So, I fired up a container with the JRE image:

docker run --rm -it openjdk:11-jre-slim bash

and inside the container, I searched for crt files:

root@e1a2141f5bb7:/# find . -type f -name "*.crt"
./etc/ssl/certs/ca-certificates.crt
./usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt
./usr/share/ca-certificates/mozilla/Izenpe.com.crt
./usr/share/ca-certificates/mozilla/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt
./usr/share/ca-certificates/mozilla/Starfield_Class_2_CA.crt
... the list goes on ...

I picked the first one, and modified by application’s Dockerfile like this:

RUN mkdir -p /root/.postgresql
RUN ln -s /etc/ssl/certs/ca-certificates.crt /root/.postgresql/root.crt

And that did the trick! Hope this helps.