Skip to content

Commit d3fcc5c

Browse files
committed
Merge custom CA with default trust store instead of replacing it
When a custom CA certificate is configured, the previous implementation created an empty KeyStore and only added the custom cert, which dropped all JVM default trust anchors. This meant connections to hosts using publicly-trusted certificates would fail. Now the default trusted certs are loaded into the KeyStore alongside the custom CA.
1 parent 0444f7f commit d3fcc5c

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

‎src/main/java/com/zitadel/ApiClient.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,16 @@ public X509Certificate[] getAcceptedIssuers() {
146146
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
147147
ks.load(null, null);
148148
ks.setCertificateEntry("custom-ca", caCert);
149+
TrustManagerFactory defaultTmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
150+
defaultTmf.init((KeyStore) null);
151+
int certIndex = 0;
152+
for (javax.net.ssl.TrustManager tm : defaultTmf.getTrustManagers()) {
153+
if (tm instanceof javax.net.ssl.X509TrustManager) {
154+
for (java.security.cert.X509Certificate cert : ((javax.net.ssl.X509TrustManager) tm).getAcceptedIssuers()) {
155+
ks.setCertificateEntry("default-" + certIndex++, cert);
156+
}
157+
}
158+
}
149159
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
150160
tmf.init(ks);
151161
SSLContext sslContext = SSLContext.getInstance("TLS");

‎src/main/java/com/zitadel/auth/OpenId.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,16 @@ public X509Certificate[] getAcceptedIssuers() {
8282
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
8383
ks.load(null, null);
8484
ks.setCertificateEntry("custom-ca", caCert);
85+
TrustManagerFactory defaultTmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
86+
defaultTmf.init((KeyStore) null);
87+
int certIndex = 0;
88+
for (TrustManager tm : defaultTmf.getTrustManagers()) {
89+
if (tm instanceof X509TrustManager) {
90+
for (java.security.cert.X509Certificate cert : ((X509TrustManager) tm).getAcceptedIssuers()) {
91+
ks.setCertificateEntry("default-" + certIndex++, cert);
92+
}
93+
}
94+
}
8595
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
8696
tmf.init(ks);
8797
SSLContext sslContext = SSLContext.getInstance("TLS");

0 commit comments

Comments
 (0)