Skip to content

Commit 9e17256

Browse files
Bugfix: Fix keystore path being always empty (#296)
* start to reproduce and add tests for bug * add debug log
1 parent eafcaf0 commit 9e17256

File tree

4 files changed

+25
-7
lines changed

4 files changed

+25
-7
lines changed

Diff for: hivemq-edge/src/main/java/com/hivemq/edge/modules/ModuleLoader.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,16 @@ protected void loadFromModulesDirectory(final ClassLoader parentClassloader) {
131131

132132
public <T> @NotNull List<Class<? extends T>> findImplementations(final @NotNull Class<T> serviceClazz) {
133133
final ArrayList<Class<? extends T>> classes = new ArrayList<>();
134-
for (EdgeModule module : modules) {
134+
for (final EdgeModule module : modules) {
135+
log.trace("Looking for implementations of class '{}' in module '{}'", serviceClazz, module.root);
135136
try {
136137
final Iterable<Class<? extends T>> loaded = classServiceLoader.load(serviceClazz, module.classloader);
137-
for (Class<? extends T> foundClass : loaded) {
138+
for (final Class<? extends T> foundClass : loaded) {
138139
classes.add(foundClass);
140+
log.trace("Found implementation '{}' of class '{}' in module '{}'",
141+
foundClass,
142+
serviceClazz,
143+
module.root);
139144
}
140145
} catch (IOException | ClassNotFoundException e) {
141146
throw new RuntimeException(e);

Diff for: modules/hivemq-edge-module-opcua/src/main/java/com/hivemq/edge/adapters/opcua/client/OpcUaClientConfigurator.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.eclipse.milo.opcua.stack.core.util.validation.ValidationCheck;
3333

3434
import java.io.File;
35+
import java.security.KeyPair;
3536
import java.security.cert.X509Certificate;
3637
import java.util.Arrays;
3738
import java.util.List;
@@ -65,6 +66,11 @@ public OpcUaClientConfigurator(final @NotNull OpcUaAdapterConfig adapterConfig)
6566
configureIdentityProvider(opcUaClientConfigBuilder, tlsEnabled, keyPairWithChain);
6667
}
6768

69+
if (keyPairWithChain != null) {
70+
opcUaClientConfigBuilder.setKeyPair(new KeyPair(keyPairWithChain.getPublicKey().getPublicKey(),
71+
keyPairWithChain.getPrivateKey()));
72+
}
73+
6874
return opcUaClientConfigBuilder.build();
6975
}
7076

@@ -136,7 +142,10 @@ private DefaultClientCertificateValidator createServerCertificateValidator(@NotN
136142
final boolean truststoreAvailable = checkTruststoreAvailable(tlsConfig);
137143
if (truststoreAvailable) {
138144
//if custom truststore is set
139-
trustedCerts = KeystoreUtil.getCertificatesFromTruststore("JKS", "", "");
145+
//noinspection DataFlowIssue nullability is checked in checkTruststoreAvailable()
146+
final String trustStorePath = tlsConfig.getTruststore().getPath();
147+
final String trustStorePassword = tlsConfig.getTruststore().getPassword();
148+
trustedCerts = KeystoreUtil.getCertificatesFromTruststore("JKS", trustStorePath, trustStorePassword);
140149
} else {
141150
trustedCerts = KeystoreUtil.getCertificatesFromDefaultTruststore();
142151
}

Diff for: modules/hivemq-edge-module-opcua/src/main/java/com/hivemq/edge/adapters/opcua/client/OpcUaEndpointFilter.java

-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ public OpcUaEndpointFilter(@NotNull String configPolicyUri, @NotNull OpcUaAdapte
5656
policyUri,
5757
adapterConfig.getId());
5858
return false;
59-
6059
}).min((o1, o2) -> {
6160
final OpcUaAdapterConfig.SecPolicy policy1 = OpcUaAdapterConfig.SecPolicy.forUri(o1.getSecurityPolicyUri());
6261
final OpcUaAdapterConfig.SecPolicy policy2 = OpcUaAdapterConfig.SecPolicy.forUri(o2.getSecurityPolicyUri());

Diff for: modules/hivemq-edge-module-opcua/src/main/java/com/hivemq/edge/adapters/opcua/util/KeystoreUtil.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,14 @@ public class KeystoreUtil {
103103
final PrivateKey privateKey = (PrivateKey) keyStore.getKey(firstAlias, privateKeyPassword.toCharArray());
104104
final Certificate certificate = keyStore.getCertificate(firstAlias);
105105
final Certificate[] certificateChain = keyStore.getCertificateChain(firstAlias);
106-
return new KeyPairWithChain(privateKey,
107-
(X509Certificate) certificate,
108-
(X509Certificate[]) certificateChain);
106+
107+
final X509Certificate certificateX509 = (X509Certificate) certificate;
108+
final X509Certificate[] certificateChainX509 = new X509Certificate[certificateChain.length];
109+
for (int i = 0; i < certificateChain.length; i++) {
110+
certificateChainX509[i] = (X509Certificate) certificateChain[i];
111+
}
112+
113+
return new KeyPairWithChain(privateKey, certificateX509, certificateChainX509);
109114
} catch (final UnrecoverableKeyException e1) {
110115
throw new SslException(
111116
"Not able to recover key from KeyStore, please check your private-key-password and your keyStorePassword",

0 commit comments

Comments
 (0)