You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by co...@apache.org on 2018/07/05 15:31:20 UTC
[cxf] branch master updated: CXF-7782 - Client session context is
null before SSL context initialization
This is an automated email from the ASF dual-hosted git repository.
coheigea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/master by this push:
new 4d3db73 CXF-7782 - Client session context is null before SSL context initialization
4d3db73 is described below
commit 4d3db73226e7cc6241616be4e7979d3c3357c350
Author: Colm O hEigeartaigh <co...@apache.org>
AuthorDate: Thu Jul 5 15:45:16 2018 +0100
CXF-7782 - Client session context is null before SSL context initialization
---
.../org/apache/cxf/transport/https/SSLUtils.java | 8 ++--
systests/transports/pom.xml | 6 +++
.../systest/https/clientauth/ClientAuthTest.java | 52 ++++++++++++++++++++++
3 files changed, 62 insertions(+), 4 deletions(-)
diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java
index e11eea2..49242ac 100644
--- a/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java
+++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java
@@ -70,10 +70,6 @@ public final class SSLUtils {
SSLContext ctx = provider == null ? SSLContext.getInstance(protocol) : SSLContext
.getInstance(protocol, provider);
- if (parameters instanceof TLSClientParameters) {
- ctx.getClientSessionContext().setSessionTimeout(((TLSClientParameters)parameters).getSslCacheTimeout());
- }
-
KeyManager[] keyManagers = parameters.getKeyManagers();
if (keyManagers == null && parameters instanceof TLSClientParameters) {
keyManagers = org.apache.cxf.configuration.jsse.SSLUtils.getDefaultKeyStoreManagers(LOG);
@@ -87,6 +83,10 @@ public final class SSLUtils {
ctx.init(configuredKeyManagers, trustManagers, parameters.getSecureRandom());
+ if (parameters instanceof TLSClientParameters && ctx.getClientSessionContext() != null) {
+ ctx.getClientSessionContext().setSessionTimeout(((TLSClientParameters)parameters).getSslCacheTimeout());
+ }
+
return ctx;
}
diff --git a/systests/transports/pom.xml b/systests/transports/pom.xml
index e348f75..8c3b53e 100644
--- a/systests/transports/pom.xml
+++ b/systests/transports/pom.xml
@@ -264,6 +264,12 @@
<groupId>org.littleshoot</groupId>
<artifactId>littleproxy</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bctls-jdk15on</artifactId>
+ <version>${cxf.bcprov.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<profiles>
<profile>
diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/https/clientauth/ClientAuthTest.java b/systests/transports/src/test/java/org/apache/cxf/systest/https/clientauth/ClientAuthTest.java
index 92fc9ff..0160a69 100644
--- a/systests/transports/src/test/java/org/apache/cxf/systest/https/clientauth/ClientAuthTest.java
+++ b/systests/transports/src/test/java/org/apache/cxf/systest/https/clientauth/ClientAuthTest.java
@@ -22,6 +22,7 @@ package org.apache.cxf.systest.https.clientauth;
import java.io.InputStream;
import java.net.URL;
import java.security.KeyStore;
+import java.security.Security;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
@@ -46,6 +47,8 @@ import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.hello_world.Greeter;
import org.apache.hello_world.services.SOAPService;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -360,6 +363,55 @@ public class ClientAuthTest extends AbstractBusClientServerTestBase {
((java.io.Closeable)port).close();
}
+ // See CXF-7782
+ @org.junit.Test
+ public void testBouncyCastleProvider() throws Exception {
+ try {
+ Security.addProvider(new BouncyCastleProvider());
+ Security.addProvider(new BouncyCastleJsseProvider());
+ URL url = SOAPService.WSDL_LOCATION;
+ SOAPService service = new SOAPService(url, SOAPService.SERVICE);
+ assertNotNull("Service is null", service);
+
+ // Set up (shared) KeyManagers/TrustManagers
+ X509TrustManager trustManager = new NoOpX509TrustManager();
+ TrustManager[] trustManagers = new TrustManager[1];
+ trustManagers[0] = trustManager;
+
+ KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+
+ try (InputStream inputStream = ClassLoaderUtils.getResourceAsStream("keymanagers.jks", this.getClass())) {
+ KeyStore keyStore = KeyStore.getInstance("JKS");
+ keyStore.load(inputStream, "password".toCharArray());
+
+ kmf.init(keyStore, "password".toCharArray());
+ }
+ KeyManager[] keyManagers = kmf.getKeyManagers();
+
+ // First call to PORT using Morpit
+ TLSClientParameters tlsParams = new TLSClientParameters();
+ tlsParams.setJsseProvider(new BouncyCastleJsseProvider().getName());
+ tlsParams.setKeyManagers(keyManagers);
+ tlsParams.setCertAlias("morpit");
+ tlsParams.setTrustManagers(trustManagers);
+ tlsParams.setDisableCNCheck(true);
+
+ Greeter port = service.getHttpsPort();
+ assertNotNull("Port is null", port);
+
+ updateAddressPort(port, PORT);
+ Client client = ClientProxy.getClient(port);
+ HTTPConduit http = (HTTPConduit) client.getConduit();
+ http.setTlsClientParameters(tlsParams);
+
+ assertEquals(port.greetMe("Kitty"), "Hello Kitty");
+ ((java.io.Closeable)port).close();
+ } finally {
+ Security.removeProvider(new BouncyCastleJsseProvider().getName());
+ Security.removeProvider(new BouncyCastleProvider().getName());
+ }
+ }
+
private static final class DisableCNCheckVerifier implements HostnameVerifier {
@Override