Skip to content

Version 3.5.7 UpdateX509 Not Compatible with Keycloak 26.1.2 and BouncyCastle FIPS #5

@p1-bot-repo-sync

Description

@p1-bot-repo-sync

When using version 3.5.7 and Keycloak 26.1.2 in FIPS-enabled mode (BouncyCastle FIPS libraries), the UpdateX509 action crashes:

2025-03-04 14:54:36,895 INFO  [dod.p1.keycloak.registration.X509Tools] (executor-thread-192) ZacsOCSPProvider Mode Set: false
2025-03-04 14:54:36,895 INFO  [dod.p1.keycloak.registration.X509Tools] (executor-thread-192) P1_X509_TOOLS_GET_X509_IDENTITY_FROM_CHAIN_d51cf4a6-5363-4ac2-85ff-89c45d9d3e3a checking cert policy 2.16.840.1.101.2.1.11.42
2025-03-04 14:54:36,895 ERROR [org.keycloak.crypto.fips.BCFIPSUserIdentityExtractorProvider] (executor-thread-192) Failed to parse subjectAltName: java.lang.IllegalArgumentException: illegal object in getInstance: org.bouncycastle.asn1.DEROctetString
	at org.bouncycastle.asn1.DERUTF8String.getInstance(Unknown Source)
	at org.keycloak.crypto.fips.BCFIPSUserIdentityExtractorProvider$SubjectAltNameExtractorBCProvider.extractUserIdentity(BCFIPSUserIdentityExtractorProvider.java:169)
	at dod.p1.keycloak.registration.X509Tools.lambda$getX509IdentityFromCertChain$2(X509Tools.java:300)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.HashMap$ValueSpliterator.tryAdvance(HashMap.java:1808)
	at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
	at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
	at dod.p1.keycloak.registration.X509Tools.getX509IdentityFromCertChain(X509Tools.java:301)
	at dod.p1.keycloak.registration.X509Tools.getX509Identity(X509Tools.java:326)
	at dod.p1.keycloak.registration.X509Tools.getX509Username(X509Tools.java:109)
	at dod.p1.keycloak.registration.X509Tools.isX509Registered(X509Tools.java:68)
	at dod.p1.keycloak.registration.X509Tools.isX509Registered(X509Tools.java:94)
	at dod.p1.keycloak.registration.UpdateX509.evaluateTriggers(UpdateX509.java:64)
	at org.keycloak.services.managers.AuthenticationManager.evaluateRequiredAction(AuthenticationManager.java:1463)
	at org.keycloak.services.managers.AuthenticationManager.lambda$evaluateRequiredActionTriggers$19(AuthenticationManager.java:1434)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
--
	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:635)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
	at io.netty.util.concurrent.FastThreadLocalRunnable.

I understand that 3.5.7 is not intended to support Keycloak 26, but my team had to upgrade to be compliant with IAVA releases. Simply upgrading the plugin might fix this.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions