Skip to content

Commit 6afcedd

Browse files
authored
Merge pull request wildfly#6066 from yersan/WFCORE-6755
[WFCORE-6755] Move the org.wildfly.security:wildfly-elytron-dynamic-ssl artifact into its own module
2 parents b94be1e + fdd87e9 commit 6afcedd

File tree

7 files changed

+108
-23
lines changed

7 files changed

+108
-23
lines changed

core-feature-pack/common/src/main/resources/modules/system/layers/base/org/wildfly/security/elytron-base/main/module.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
<artifact name="${org.wildfly.security:wildfly-elytron-credential-source-impl}"/>
3535
<artifact name="${org.wildfly.security:wildfly-elytron-credential-store}"/>
3636
<artifact name="${org.wildfly.security:wildfly-elytron-digest}"/>
37-
<artifact name="${org.wildfly.security:wildfly-elytron-dynamic-ssl}"/>
3837
<artifact name="${org.wildfly.security:wildfly-elytron-encryption}"/>
3938
<artifact name="${org.wildfly.security:wildfly-elytron-http}"/>
4039
<artifact name="${org.wildfly.security:wildfly-elytron-http-basic}"/>
@@ -112,5 +111,6 @@
112111
modules use the parser, they need to have visibility to this module.
113112
-->
114113
<module name="org.wildfly.client.config" export="true"/>
114+
<module name="org.wildfly.security.elytron-dynamic-ssl" export="true" optional="true"/>
115115
</dependencies>
116116
</module>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<!--
4+
~ Copyright The WildFly Authors
5+
~ SPDX-License-Identifier: Apache-2.0
6+
-->
7+
<module xmlns="urn:jboss:module:1.9" name="org.wildfly.security.elytron-dynamic-ssl">
8+
9+
<properties>
10+
<property name="jboss.api" value="private"/>
11+
<property name="jboss.stability" value="community"/>
12+
</properties>
13+
14+
<resources>
15+
<artifact name="${org.wildfly.security:wildfly-elytron-dynamic-ssl}"/>
16+
</resources>
17+
18+
<dependencies>
19+
<module name="java.logging"/>
20+
<module name="org.jboss.logging" />
21+
<module name="org.jboss.logmanager" />
22+
<module name="org.wildfly.security.elytron-base"/>
23+
<module name="org.wildfly.common"/>
24+
<module name="org.wildfly.client.config"/>
25+
</dependencies>
26+
</module>

core-feature-pack/galleon-common/src/main/resources/layers/standalone/elytron/layer-spec.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,9 @@
1717
<!-- required by default configuration-->
1818
<package name="org.wildfly.extension.elytron.jaas-realm"/>
1919
<package name="org.wildfly.openssl"/>
20+
<!-- In case the feature-pack containing this package is constrained at build time
21+
to a level that doesn't imply 'community', this package will be not packaged inside the feature-pack.
22+
'valid-for-stability' attribute allows to keep this dependency that will be ignored at provisioning time. -->
23+
<package name="org.wildfly.security.elytron-dynamic-ssl" optional="true" valid-for-stability="community"/>
2024
</packages>
2125
</layer-spec>
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The WildFly Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package org.wildfly.extension.elytron;
7+
8+
import org.wildfly.security.auth.client.AuthenticationContext;
9+
import org.wildfly.security.dynamic.ssl.DynamicSSLContext;
10+
import org.wildfly.security.dynamic.ssl.DynamicSSLContextImpl;
11+
import org.wildfly.security.dynamic.ssl.DynamicSSLContextException;
12+
13+
import javax.net.ssl.SSLContext;
14+
import java.security.GeneralSecurityException;
15+
import static org.wildfly.extension.elytron._private.ElytronSubsystemMessages.ROOT_LOGGER;
16+
17+
/**
18+
* Helper class for obtaining an instance of DynamicSSLContext created from the provided AuthenticationContext
19+
*/
20+
class DynamicSSLContextHelper {
21+
22+
/**
23+
* Get DynamicSSLContext instance from the provided authentication context
24+
* @param authenticationContext authentication context to use with the DynamicSSLContext
25+
* @return DynamicSSLContext instance
26+
*/
27+
static SSLContext getDynamicSSLContextInstance(AuthenticationContext authenticationContext) {
28+
try {
29+
return new DynamicSSLContext(new DynamicSSLContextImpl(authenticationContext));
30+
} catch (DynamicSSLContextException | GeneralSecurityException e) {
31+
throw ROOT_LOGGER.unableToObtainDynamicSSLContext();
32+
}
33+
}
34+
}

elytron/src/main/java/org/wildfly/extension/elytron/SSLDefinitions.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,12 @@
116116
import org.wildfly.extension.elytron._private.ElytronSubsystemMessages;
117117
import org.wildfly.extension.elytron.capabilities.PrincipalTransformer;
118118
import org.wildfly.security.auth.client.AuthenticationContext;
119-
import org.wildfly.security.dynamic.ssl.DynamicSSLContextImpl;
120119
import org.wildfly.security.auth.server.MechanismConfiguration;
121120
import org.wildfly.security.auth.server.MechanismConfigurationSelector;
122121
import org.wildfly.security.auth.server.RealmMapper;
123122
import org.wildfly.security.auth.server.SecurityDomain;
124123
import org.wildfly.security.credential.PasswordCredential;
125124
import org.wildfly.security.credential.source.CredentialSource;
126-
import org.wildfly.security.dynamic.ssl.DynamicSSLContext;
127-
import org.wildfly.security.dynamic.ssl.DynamicSSLContextException;
128125
import org.wildfly.security.keystore.AliasFilter;
129126
import org.wildfly.security.keystore.FilteringKeyStore;
130127
import org.wildfly.security.password.interfaces.ClearPassword;
@@ -144,6 +141,7 @@
144141
class SSLDefinitions {
145142

146143
private static final BooleanSupplier IS_FIPS = getFipsSupplier();
144+
private static final String ORG_WILDFLY_SECURITY_ELYTRON_DYNAMIC_SSL = "org.wildfly.security.elytron-dynamic-ssl";
147145

148146
static final ServiceUtil<SSLContext> SERVER_SERVICE_UTIL = ServiceUtil.newInstance(SSL_CONTEXT_RUNTIME_CAPABILITY, ElytronDescriptionConstants.SERVER_SSL_CONTEXT, SSLContext.class);
149147
static final ServiceUtil<SSLContext> CLIENT_SERVICE_UTIL = ServiceUtil.newInstance(SSL_CONTEXT_RUNTIME_CAPABILITY, ElytronDescriptionConstants.CLIENT_SSL_CONTEXT, SSLContext.class);
@@ -1226,13 +1224,18 @@ private static ResourceDefinition createSSLContextDefinition(String pathKey, boo
12261224
}
12271225

12281226
private static ResourceDefinition createSSLContextDefinition(String pathKey, boolean server, AbstractAddStepHandler addHandler, AttributeDefinition[] attributes, boolean serverOrHostController, Stability stability) {
1227+
return createSSLContextDefinition(pathKey, server, addHandler, attributes, serverOrHostController, stability, null);
1228+
}
1229+
1230+
private static ResourceDefinition createSSLContextDefinition(String pathKey, boolean server, AbstractAddStepHandler addHandler, AttributeDefinition[] attributes, boolean serverOrHostController, Stability stability, String dependencyPackageName) {
12291231

12301232
Builder builder = TrivialResourceDefinition.builder()
12311233
.setPathKey(pathKey)
12321234
.setAddHandler(addHandler)
12331235
.setAttributes(attributes)
12341236
.setRuntimeCapabilities(SSL_CONTEXT_RUNTIME_CAPABILITY)
1235-
.setStability(stability);
1237+
.setStability(stability)
1238+
.setDependencyPackageName(dependencyPackageName);
12361239

12371240
if (serverOrHostController) {
12381241
builder.addReadOnlyAttribute(ACTIVE_SESSION_COUNT, new SSLContextRuntimeHandler() {
@@ -1542,13 +1545,7 @@ protected ValueSupplier<SSLContext> getValueSupplier(ServiceBuilder<SSLContext>
15421545
ServiceName acServiceName = context.getCapabilityServiceName(authenticationContextCapability, AuthenticationContext.class);
15431546
Supplier<AuthenticationContext> authenticationContextSupplier = serviceBuilder.requires(acServiceName);
15441547

1545-
return () -> {
1546-
try {
1547-
return new DynamicSSLContext(new DynamicSSLContextImpl(authenticationContextSupplier.get()));
1548-
} catch (DynamicSSLContextException | GeneralSecurityException e) {
1549-
throw new RuntimeException(e);
1550-
}
1551-
};
1548+
return () -> DynamicSSLContextHelper.getDynamicSSLContextInstance(authenticationContextSupplier.get());
15521549
}
15531550

15541551
@Override
@@ -1564,7 +1561,7 @@ protected void installedForResource(ServiceController<SSLContext> serviceControl
15641561
}
15651562
};
15661563

1567-
return createSSLContextDefinition(ElytronDescriptionConstants.DYNAMIC_CLIENT_SSL_CONTEXT, false, add, attributes, false, Stability.COMMUNITY);
1564+
return createSSLContextDefinition(ElytronDescriptionConstants.DYNAMIC_CLIENT_SSL_CONTEXT, false, add, attributes, false, Stability.COMMUNITY, ORG_WILDFLY_SECURITY_ELYTRON_DYNAMIC_SSL);
15681565
}
15691566

15701567
private static Provider[] filterProviders(Provider[] all, String provider) {

elytron/src/main/java/org/wildfly/extension/elytron/TrivialResourceDefinition.java

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.jboss.as.controller.descriptions.ResourceDescriptionResolver;
2424
import org.jboss.as.controller.registry.ManagementResourceRegistration;
2525
import org.jboss.as.controller.registry.OperationEntry;
26+
import org.jboss.as.controller.registry.RuntimePackageDependency;
2627
import org.jboss.as.version.Stability;
2728

2829
/**
@@ -36,10 +37,25 @@ final class TrivialResourceDefinition extends SimpleResourceDefinition {
3637
private final Map<OperationDefinition, OperationStepHandler> operations;
3738
private final Map<AttributeDefinition, OperationStepHandler> readOnlyAttributes;
3839
private final List<ResourceDefinition> children;
40+
private final String dependencyPackageName;
41+
42+
TrivialResourceDefinition(String pathKey, ResourceDescriptionResolver resourceDescriptionResolver, AbstractAddStepHandler add, AttributeDefinition[] attributes, RuntimeCapability<?> ... runtimeCapabilities) {
43+
this(pathKey, resourceDescriptionResolver, add, new TrivialCapabilityServiceRemoveHandler(add, runtimeCapabilities), attributes, null, null, null, runtimeCapabilities, Stability.DEFAULT);
44+
}
45+
46+
TrivialResourceDefinition(String pathKey, AbstractAddStepHandler add, AttributeDefinition[] attributes, RuntimeCapability<?> ... runtimeCapabilities) {
47+
this(pathKey, ElytronExtension.getResourceDescriptionResolver(pathKey), add, new TrivialCapabilityServiceRemoveHandler(add, runtimeCapabilities), attributes, null, null, null, runtimeCapabilities, Stability.DEFAULT);
48+
}
49+
50+
private TrivialResourceDefinition(String pathKey, ResourceDescriptionResolver resourceDescriptionResolver, AbstractAddStepHandler add, AbstractRemoveStepHandler remove, AttributeDefinition[] attributes,
51+
Map<AttributeDefinition, OperationStepHandler> readOnlyAttributes, Map<OperationDefinition, OperationStepHandler> operations, List<ResourceDefinition> children,
52+
RuntimeCapability<?>[] runtimeCapabilities, Stability stability) {
53+
this(pathKey, resourceDescriptionResolver, add, remove, attributes, readOnlyAttributes, operations, children, runtimeCapabilities, stability, null);
54+
}
3955

4056
private TrivialResourceDefinition(String pathKey, ResourceDescriptionResolver resourceDescriptionResolver, AbstractAddStepHandler add, AbstractRemoveStepHandler remove, AttributeDefinition[] attributes,
4157
Map<AttributeDefinition, OperationStepHandler> readOnlyAttributes, Map<OperationDefinition, OperationStepHandler> operations, List<ResourceDefinition> children,
42-
RuntimeCapability<?>[] runtimeCapabilities, Stability stability) {
58+
RuntimeCapability<?>[] runtimeCapabilities, Stability stability, String dependencyPackageName) {
4359
super(new Parameters(ResourceRegistration.of(PathElement.pathElement(pathKey), stability),
4460
resourceDescriptionResolver)
4561
.setAddHandler(add)
@@ -52,14 +68,7 @@ private TrivialResourceDefinition(String pathKey, ResourceDescriptionResolver re
5268
this.readOnlyAttributes = readOnlyAttributes;
5369
this.operations = operations;
5470
this.children = children;
55-
}
56-
57-
TrivialResourceDefinition(String pathKey, ResourceDescriptionResolver resourceDescriptionResolver, AbstractAddStepHandler add, AttributeDefinition[] attributes, RuntimeCapability<?> ... runtimeCapabilities) {
58-
this(pathKey, resourceDescriptionResolver, add, new TrivialCapabilityServiceRemoveHandler(add, runtimeCapabilities), attributes, null, null, null, runtimeCapabilities, Stability.DEFAULT);
59-
}
60-
61-
TrivialResourceDefinition(String pathKey, AbstractAddStepHandler add, AttributeDefinition[] attributes, RuntimeCapability<?> ... runtimeCapabilities) {
62-
this(pathKey, ElytronExtension.getResourceDescriptionResolver(pathKey), add, new TrivialCapabilityServiceRemoveHandler(add, runtimeCapabilities), attributes, null, null, null, runtimeCapabilities, Stability.DEFAULT);
71+
this.dependencyPackageName = dependencyPackageName;
6372
}
6473

6574
@Override
@@ -97,6 +106,13 @@ public void registerChildren(ManagementResourceRegistration resourceRegistration
97106
}
98107
}
99108

109+
@Override
110+
public void registerAdditionalRuntimePackages(ManagementResourceRegistration resourceRegistration) {
111+
if (dependencyPackageName != null) {
112+
resourceRegistration.registerAdditionalRuntimePackages(RuntimePackageDependency.required(dependencyPackageName));
113+
}
114+
}
115+
100116
public AttributeDefinition[] getAttributes() {
101117
return attributes;
102118
}
@@ -117,6 +133,7 @@ static class Builder {
117133
private RuntimeCapability<?>[] runtimeCapabilities;
118134
private List<ResourceDefinition> children;
119135
private Stability stability = Stability.DEFAULT;
136+
private String dependencyPackageName;
120137

121138
Builder() {}
122139

@@ -189,11 +206,16 @@ Builder addChild(ResourceDefinition child) {
189206
return this;
190207
}
191208

209+
Builder setDependencyPackageName(String dependencyPackageName) {
210+
this.dependencyPackageName = dependencyPackageName;
211+
return this;
212+
}
213+
192214
ResourceDefinition build() {
193215
ResourceDescriptionResolver resourceDescriptionResolver = this.resourceDescriptionResolver != null ? this.resourceDescriptionResolver : ElytronExtension.getResourceDescriptionResolver(pathKey);
194216
return new TrivialResourceDefinition(pathKey, resourceDescriptionResolver, addHandler,
195217
removeHandler != null ? removeHandler : new TrivialCapabilityServiceRemoveHandler(addHandler, runtimeCapabilities),
196-
attributes, readOnlyAttributes, operations, children, runtimeCapabilities, stability);
218+
attributes, readOnlyAttributes, operations, children, runtimeCapabilities, stability, dependencyPackageName);
197219
}
198220

199221
}

elytron/src/main/java/org/wildfly/extension/elytron/_private/ElytronSubsystemMessages.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,8 @@ public interface ElytronSubsystemMessages extends BasicLogger {
731731
"use Elytron Tool command `filesystem-realm-encrypt`")
732732
OperationFailedException addSecretKeyToInitializedFilesystemRealm();
733733

734+
@Message(id = 1221, value = "Unable to obtain DynamicSSLContext from the provided authentication context")
735+
RuntimeException unableToObtainDynamicSSLContext();
734736
/*
735737
* Don't just add new errors to the end of the file, there may be an appropriate section above for the resource.
736738
*

0 commit comments

Comments
 (0)