Keycloak app doesn't start. "handshake_failure"

After installing Keycloak app join script fails with message “container does not come up healthy”. Checking the logs shows a handshake problem.

univention-app logs keycloak

2023-05-11 16:49:33,259 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to start server in (production) mode
2023-05-11 16:49:33,259 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to obtain JDBC connection
2023-05-11 16:49:33,260 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: SSL error: Received fatal alert: handshake_failure
2023-05-11 16:49:33,260 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Received fatal alert: handshake_failure
2023-05-11 16:49:33,260 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) For more details run the same command passing the '--verbose' option. Also you can use '--help' to see the details about the usage of the particular command.
2023-05-11 16:49:33,276 ERROR [org.jgroups.protocols.JDBC_PING] (Thread-4) JGRP000115: Could not open connection to database: org.postgresql.util.PSQLException: SSL error: Received fatal alert: handshake_failure
        at org.postgresql.ssl.MakeSSL.convert(MakeSSL.java:43)
        at org.postgresql.core.v3.ConnectionFactoryImpl.enableSSL(ConnectionFactoryImpl.java:584)
        at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:168)
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:235)
        at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
        at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:247)
        at org.postgresql.Driver.makeConnection(Driver.java:434)
        at org.postgresql.Driver.connect(Driver.java:291)
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681)
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
        at org.jgroups.protocols.JDBC_PING.getConnection(JDBC_PING.java:290)
        at org.jgroups.protocols.JDBC_PING.delete(JDBC_PING.java:337)
        at org.jgroups.protocols.JDBC_PING.remove(JDBC_PING.java:175)
        at org.jgroups.protocols.FILE_PING.lambda$init$1(FILE_PING.java:116)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:358)
        at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:293)
        at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:204)
        at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172)
        at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1510)
        at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1425)
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:455)
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:426)
        at org.postgresql.ssl.MakeSSL.convert(MakeSSL.java:41)
        ... 14 more

2023-05-11 16:49:33,278 ERROR [org.jgroups.protocols.JDBC_PING] (Thread-4) JGRP000215: Failed to delete PingData in database
2023-05-11 16:49:40,236 INFO  [org.keycloak.quarkus.runtime.hostname.DefaultHostnameProvider] (main) Hostname settings: Base URL: <unset>, Hostname: $(fqdn), Strict HTTPS: true, Path: <request>, Strict BackChannel: false, Admin URL: <unset>, Admin: <request>, Port: -1, Proxied: true
2023-05-11 16:49:43,934 WARN  [io.agroal.pool] (agroal-11) Datasource '<default>': SSL error: Received fatal alert: handshake_failure

/var/log/postgresql/postgresql-11-main.log

2023-05-11 16:49:33.080 CEST [4686-1] [unknown]@[unknown] LOG:  could not accept SSL connection: no suitable signature algorithm

keycloak 21.0.1-ucs2
ucs 5.0.3 errata663

Reason
Postgresql uses ssl-cert-snakeoil.pem
This certificate was created 2015 with SHA1 as hash.

~$ openssl x509 -text -in /etc/ssl/certs/ssl-cert-snakeoil.pem
...
Signature Algorithm: sha1WithRSAEncryption
...

So I updated the certificate and keycloak was able to get a connection to postgresql.

Solution
Update certificate

~$ make-ssl-cert generate-default-snakeoil --force-overwrite

Now SHA256 is used.

~$ openssl x509 -text -in /etc/ssl/certs/ssl-cert-snakeoil.pem
...
Signature Algorithm: sha256WithRSAEncryption
...
Mastodon