Adding Jetty ClientCertificate tests

Project: http://git-wip-us.apache.org/repos/asf/cxf-fediz/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf-fediz/commit/9ca20024
Tree: http://git-wip-us.apache.org/repos/asf/cxf-fediz/tree/9ca20024
Diff: http://git-wip-us.apache.org/repos/asf/cxf-fediz/diff/9ca20024

Branch: refs/heads/master
Commit: 9ca20024cf317396c3a44a50dfa83d3bc05dca41
Parents: 6415da2
Author: Colm O hEigeartaigh <[email protected]>
Authored: Thu Apr 23 16:55:07 2015 +0100
Committer: Colm O hEigeartaigh <[email protected]>
Committed: Thu Apr 23 17:01:46 2015 +0100

----------------------------------------------------------------------
 systests/jetty8/pom.xml                         |   8 +-
 .../ClientCertificatePreAuthSpringTest.java     |  79 ++++++++++++++++++
 .../integrationtests/ClientCertificateTest.java |  79 ++++++++++++++++++
 .../integrationtests/HOKCallbackHandler.java    |  48 +++++++++++
 .../cxf/fediz/integrationtests/JettyUtils.java  |   6 +-
 .../jetty8/src/test/resources/alice_client.jks  | Bin 0 -> 1277 bytes
 .../test/resources/fediz_config_client_cert.xml |  44 ++++++++++
 .../test/resources/rp-client-cert-server.xml    |  81 +++++++++++++++++++
 systests/jetty8/src/test/resources/server.jks   | Bin 1863 -> 2701 bytes
 9 files changed, 340 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/9ca20024/systests/jetty8/pom.xml
----------------------------------------------------------------------
diff --git a/systests/jetty8/pom.xml b/systests/jetty8/pom.xml
index 55fa4c8..305fa70 100644
--- a/systests/jetty8/pom.xml
+++ b/systests/jetty8/pom.xml
@@ -101,8 +101,8 @@
                 <filtering>true</filtering>
                 <includes>
                     <include>**/idp-server.xml</include>
-                    <include>**/rp-server.xml</include>
-                    <include>**/fediz_config.xml</include>
+                    <include>**/rp-*server.xml</include>
+                    <include>**/fediz_config*.xml</include>
                 </includes>
             </testResource>
             <testResource>
@@ -110,8 +110,8 @@
                 <filtering>false</filtering>
                 <excludes>
                     <exclude>**/idp-server.xml</exclude>
-                    <exclude>**/rp-server.xml</exclude>
-                    <exclude>**/fediz_config.xml</exclude>
+                    <exclude>**/rp-*server.xml</exclude>
+                    <exclude>**/fediz_config*.xml</exclude>
                 </excludes>
             </testResource>
         </testResources>

http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/9ca20024/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/ClientCertificatePreAuthSpringTest.java
----------------------------------------------------------------------
diff --git 
a/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/ClientCertificatePreAuthSpringTest.java
 
b/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/ClientCertificatePreAuthSpringTest.java
new file mode 100644
index 0000000..0542bd1
--- /dev/null
+++ 
b/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/ClientCertificatePreAuthSpringTest.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.fediz.integrationtests;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+
+/**
+ * In this test-case, the IdP is set up to require client authentication, 
rather than authenticating using a
+ * username + password, or via Kerberos.
+ */
+public class ClientCertificatePreAuthSpringTest extends 
AbstractClientCertTests {
+
+    static String idpHttpsPort;
+    static String rpHttpsPort;
+    
+    @BeforeClass
+    public static void init() {
+        System.setProperty("org.apache.commons.logging.Log", 
"org.apache.commons.logging.impl.SimpleLog");
+        
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", 
"info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient",
 "info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.springframework.webflow",
 "info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.springframework.security.web",
 "info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.springframework.security",
 "info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.cxf.fediz",
 "info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.cxf", 
"info");
+
+        idpHttpsPort = System.getProperty("idp.https.port");
+        Assert.assertNotNull("Property 'idp.https.port' null", idpHttpsPort);
+        rpHttpsPort = System.getProperty("rp.https.port");
+        Assert.assertNotNull("Property 'rp.https.port' null", rpHttpsPort);
+
+        JettyUtils.initIdpServer();
+        JettyUtils.startIdpServer();
+        JettyUtils.initRpServer("rp-client-cert-server.xml");
+        JettyUtils.startRpServer();
+    }
+    
+    @AfterClass
+    public static void cleanup() {
+        JettyUtils.stopIdpServer();
+        JettyUtils.stopRpServer();
+    }
+
+    @Override
+    public String getIdpHttpsPort() {
+        return idpHttpsPort;
+    }
+
+    @Override
+    public String getRpHttpsPort() {
+        return rpHttpsPort;
+    }
+    
+    @Override
+    public String getServletContextName() {
+        return "fedizspringhelloworld";
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/9ca20024/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/ClientCertificateTest.java
----------------------------------------------------------------------
diff --git 
a/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/ClientCertificateTest.java
 
b/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/ClientCertificateTest.java
new file mode 100644
index 0000000..8e7d734
--- /dev/null
+++ 
b/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/ClientCertificateTest.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.fediz.integrationtests;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+
+/**
+ * In this test-case, the IdP is set up to require client authentication, 
rather than authenticating using a
+ * username + password, or via Kerberos.
+ */
+public class ClientCertificateTest extends AbstractClientCertTests {
+
+    static String idpHttpsPort;
+    static String rpHttpsPort;
+    
+    @BeforeClass
+    public static void init() {
+        System.setProperty("org.apache.commons.logging.Log", 
"org.apache.commons.logging.impl.SimpleLog");
+        
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", 
"info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient",
 "info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.springframework.webflow",
 "info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.springframework.security.web",
 "info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.springframework.security",
 "info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.cxf.fediz",
 "info");
+        
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.cxf", 
"info");
+
+        idpHttpsPort = System.getProperty("idp.https.port");
+        Assert.assertNotNull("Property 'idp.https.port' null", idpHttpsPort);
+        rpHttpsPort = System.getProperty("rp.https.port");
+        Assert.assertNotNull("Property 'rp.https.port' null", rpHttpsPort);
+
+        JettyUtils.initIdpServer();
+        JettyUtils.startIdpServer();
+        JettyUtils.initRpServer("rp-client-cert-server.xml");
+        JettyUtils.startRpServer();
+    }
+    
+    @AfterClass
+    public static void cleanup() {
+        JettyUtils.stopIdpServer();
+        JettyUtils.stopRpServer();
+    }
+
+    @Override
+    public String getIdpHttpsPort() {
+        return idpHttpsPort;
+    }
+
+    @Override
+    public String getRpHttpsPort() {
+        return rpHttpsPort;
+    }
+    
+    @Override
+    public String getServletContextName() {
+        return "fedizhelloworld";
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/9ca20024/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/HOKCallbackHandler.java
----------------------------------------------------------------------
diff --git 
a/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/HOKCallbackHandler.java
 
b/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/HOKCallbackHandler.java
new file mode 100644
index 0000000..e2f402c
--- /dev/null
+++ 
b/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/HOKCallbackHandler.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.fediz.integrationtests;
+
+import java.io.IOException;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+import org.apache.cxf.fediz.core.spi.WReqCallback;
+
+public class HOKCallbackHandler implements CallbackHandler {
+
+    static final String HOK_WREQ = 
+        "<RequestSecurityToken 
xmlns=\"http://docs.oasis-open.org/ws-sx/ws-trust/200512\";>"
+        + 
"<KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/PublicKey</KeyType>"
+        + "</RequestSecurityToken>";
+    
+    public void handle(Callback[] callbacks) throws IOException, 
UnsupportedCallbackException {
+        for (int i = 0; i < callbacks.length; i++) {
+            if (callbacks[i] instanceof WReqCallback) {
+                WReqCallback callback = (WReqCallback) callbacks[i];
+                callback.setWreq(HOK_WREQ);
+            } else {
+                throw new UnsupportedCallbackException(callbacks[i], 
"Unrecognized Callback");
+            }
+        }
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/9ca20024/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/JettyUtils.java
----------------------------------------------------------------------
diff --git 
a/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/JettyUtils.java
 
b/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/JettyUtils.java
index 603fedc..fb6859d 100644
--- 
a/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/JettyUtils.java
+++ 
b/systests/jetty8/src/test/java/org/apache/cxf/fediz/integrationtests/JettyUtils.java
@@ -67,9 +67,13 @@ public final class JettyUtils {
     }
     
     public static void initRpServer() {
+        initRpServer("rp-server.xml");
+    }
+    
+    public static void initRpServer(String configurationFile) {
         if (rpServer == null) {
             try {
-                Resource testServerConfig = 
Resource.newSystemResource("rp-server.xml");
+                Resource testServerConfig = 
Resource.newSystemResource(configurationFile);
                 XmlConfiguration configuration = new 
XmlConfiguration(testServerConfig.getInputStream());
                 rpServer = (Server)configuration.configure();   
                 

http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/9ca20024/systests/jetty8/src/test/resources/alice_client.jks
----------------------------------------------------------------------
diff --git a/systests/jetty8/src/test/resources/alice_client.jks 
b/systests/jetty8/src/test/resources/alice_client.jks
new file mode 100644
index 0000000..5e1bdd2
Binary files /dev/null and 
b/systests/jetty8/src/test/resources/alice_client.jks differ

http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/9ca20024/systests/jetty8/src/test/resources/fediz_config_client_cert.xml
----------------------------------------------------------------------
diff --git a/systests/jetty8/src/test/resources/fediz_config_client_cert.xml 
b/systests/jetty8/src/test/resources/fediz_config_client_cert.xml
new file mode 100644
index 0000000..d0605b8
--- /dev/null
+++ b/systests/jetty8/src/test/resources/fediz_config_client_cert.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Place in Tomcat conf folder or other location as designated in this 
sample's webapp/META-INF/context.xml file. 
+     Keystore referenced below must have IDP STS' public cert included in it.  
This example re-uses the Tomcat SSL 
+     keystore (tomcat-rp.jks) for this task; alternatively you may wish to use 
a Fediz-specific keystore instead. 
+-->
+<FedizConfig>
+    <contextConfig name="/fedizhelloworld">
+        <audienceUris>
+            
<audienceItem>urn:org:apache:cxf:fediz:fedizhelloworld</audienceItem>
+        </audienceUris>
+        <certificateStores>
+            <trustManager>
+                <keyStore file="ststrust.jks" password="storepass" type="JKS" 
/>
+            </trustManager>
+        </certificateStores>
+        <trustedIssuers>
+            <issuer certificateValidation="PeerTrust" />
+        </trustedIssuers>
+        <maximumClockSkew>1000</maximumClockSkew>
+        <signingKey keyAlias="mytomidpkey" keyPassword="tompass">
+            <keyStore file="test-classes/server.jks" password="tompass" 
type="JKS" />
+        </signingKey>
+        <protocol xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+            xsi:type="federationProtocolType" version="1.0.0">
+            <realm>urn:org:apache:cxf:fediz:fedizhelloworld</realm>
+            
<issuer>https://localhost:${idp.https.port}/fediz-idp/federation</issuer>
+            <roleDelimiter>,</roleDelimiter>
+            
<roleURI>http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role</roleURI>
+            <freshness>10</freshness>
+            <homeRealm 
type="String">urn:org:apache:cxf:fediz:idp:realm-A</homeRealm>
+            <claimTypesRequested>
+                <claimType 
type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role"; 
optional="false" />
+                               <claimType 
type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"; 
optional="true" />
+                               <claimType 
type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname"; 
optional="true" />
+                               <claimType 
type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"; 
optional="true" />
+            </claimTypesRequested>
+            
<authenticationType>http://docs.oasis-open.org/wsfed/authorization/200706/authntypes/Ssl</authenticationType>
+            <request 
type="Class">org.apache.cxf.fediz.integrationtests.HOKCallbackHandler</request>
+        </protocol>
+        <logoutURL>/secure/logout</logoutURL>
+        <logoutRedirectTo>/index.html</logoutRedirectTo>
+    </contextConfig>
+</FedizConfig>
+

http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/9ca20024/systests/jetty8/src/test/resources/rp-client-cert-server.xml
----------------------------------------------------------------------
diff --git a/systests/jetty8/src/test/resources/rp-client-cert-server.xml 
b/systests/jetty8/src/test/resources/rp-client-cert-server.xml
new file mode 100644
index 0000000..187d4cb
--- /dev/null
+++ b/systests/jetty8/src/test/resources/rp-client-cert-server.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" 
"http://www.eclipse.org/jetty/configure.dtd";>
+ 
+<Configure id="RPServer" class="org.eclipse.jetty.server.Server">
+ 
+    <Call class="org.eclipse.jetty.util.log.Log" name="getRootLogger">
+        <Call name="setDebugEnabled">
+            <Arg type="boolean">true</Arg>
+        </Call>
+    </Call>
+
+    <Call name="addConnector">
+        <Arg>
+            <New
+                class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
+                <Arg>
+                    <New class="org.eclipse.jetty.http.ssl.SslContextFactory">
+                        <Set name="keyStore">./target/test-classes/server.jks
+                        </Set>
+                        <Set name="keyStorePassword">tompass</Set>
+                        <Set name="keyManagerPassword">tompass</Set>
+                        <Set 
name="trustStore">./target/test-classes/server.jks</Set>
+                        <Set name="trustStorePassword">tompass</Set>
+                        <Set name="wantClientAuth">true</Set>
+                    </New>
+                </Arg>
+                <Set name="port">${rp.https.port}</Set>
+                <Set name="maxIdleTime">30000</Set>
+            </New>
+        </Arg>
+    </Call>
+
+    <Set name="handler">
+      <New class="org.eclipse.jetty.server.handler.HandlerList">
+        <Set name="handlers">
+          <Array type="org.eclipse.jetty.server.Handler">
+            <Item>
+              <New class="org.eclipse.jetty.webapp.WebAppContext">
+                <Set name="contextPath">/fedizhelloworld</Set>
+                <Set 
name="war">./target/rp/fediz-systests-webapps-simple.war</Set>
+                <!--Set 
name="war">./target/jetty/rp/webapps/simpleWebapp</Set>-->
+                <Set name="throwUnavailableOnStartupException">true</Set>
+                    
+                <Get name="securityHandler">
+                  <Set name="authenticator">
+                    <New 
class="org.apache.cxf.fediz.jetty.FederationAuthenticator">
+                      <Set 
name="configFile">./target/test-classes/fediz_config_client_cert.xml</Set>
+                    </New>
+                  </Set>
+                </Get>
+              </New>
+            </Item>
+            <Item>
+              <New class="org.eclipse.jetty.webapp.WebAppContext">
+                <Set name="contextPath">/fedizspringhelloworld</Set>
+                <Set 
name="war">./target/rp/fediz-systests-webapps-springPreauth.war</Set>
+                <Set name="throwUnavailableOnStartupException">true</Set>
+                    
+                <Get name="securityHandler">
+                  <Set name="authenticator">
+                    <New 
class="org.apache.cxf.fediz.jetty.FederationAuthenticator">
+                      <Set 
name="configFile">./target/test-classes/fediz_config_client_cert.xml</Set>
+                    </New>
+                  </Set>
+                </Get>
+              </New>
+            </Item>            
+          </Array>
+        </Set>
+      </New>
+    </Set>
+
+    <Call name="addBean">
+        <Arg>
+            <New class="org.apache.cxf.fediz.jetty.FederationLoginService">
+                <Set name="name">WSFED</Set>
+            </New>
+        </Arg>
+    </Call>
+
+</Configure>

http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/9ca20024/systests/jetty8/src/test/resources/server.jks
----------------------------------------------------------------------
diff --git a/systests/jetty8/src/test/resources/server.jks 
b/systests/jetty8/src/test/resources/server.jks
index 2f0fdf3..a292ec9 100644
Binary files a/systests/jetty8/src/test/resources/server.jks and 
b/systests/jetty8/src/test/resources/server.jks differ

Reply via email to