diff --git a/x-pack/qa/saml-idp-tests/build.gradle b/x-pack/qa/saml-idp-tests/build.gradle
index 4ae99a1a02253..1229965cf159d 100644
--- a/x-pack/qa/saml-idp-tests/build.gradle
+++ b/x-pack/qa/saml-idp-tests/build.gradle
@@ -1,5 +1,3 @@
-import org.elasticsearch.gradle.Architecture
-
Project idpFixtureProject = xpackProject("test:idp-fixture")
apply plugin: 'elasticsearch.internal-java-rest-test'
@@ -13,17 +11,17 @@ dependencies {
testFixtures.useFixture ":x-pack:test:idp-fixture"
String outputDir = "${project.buildDir}/generated-resources/${project.name}"
-def copyIdpFiles = tasks.register("copyIdpFiles", Copy) {
+def copyIdpFiles = tasks.register("copyIdpFiles", Sync) {
from idpFixtureProject.files('idp/shibboleth-idp/credentials/idp-browser.pem', 'idp/shibboleth-idp/metadata/idp-metadata.xml',
'idp/shibboleth-idp/credentials/sp-signing.key', 'idp/shibboleth-idp/credentials/sp-signing.crt');
into outputDir
+ outputs.upToDateWhen { false } //ensure this copy is always done to prevent stale configuration
}
def setupPorts = tasks.register("setupPorts") {
dependsOn copyIdpFiles, idpFixtureProject.postProcessFixture
// Don't attempt to get ephemeral ports when Docker is not available
- // Also, shibboleth fixture is not available on aarch64
- onlyIf { idpFixtureProject.postProcessFixture.state.skipped == false && Architecture.current() == Architecture.X64 }
+ onlyIf { idpFixtureProject.postProcessFixture.state.skipped == false }
doLast {
String portString = idpFixtureProject.postProcessFixture.ext."test.fixtures.shibboleth-idp.tcp.4443"
int ephemeralPort = Integer.valueOf(portString)
@@ -43,7 +41,7 @@ project.sourceSets.javaRestTest.output.dir(outputDir, builtBy: [copyIdpFiles])
tasks.named("javaRestTest").configure {
dependsOn setupPorts
- onlyIf { idpFixtureProject.postProcessFixture.state.skipped == false && Architecture.current() == Architecture.X64 }
+ onlyIf { idpFixtureProject.postProcessFixture.state.skipped == false }
}
testClusters.matching { it.name == "javaRestTest" }.configureEach {
diff --git a/x-pack/test/idp-fixture/docker-compose.yml b/x-pack/test/idp-fixture/docker-compose.yml
index 4a3af17a673ba..60a58ceaa9ea6 100644
--- a/x-pack/test/idp-fixture/docker-compose.yml
+++ b/x-pack/test/idp-fixture/docker-compose.yml
@@ -137,22 +137,20 @@ services:
- ./openldap/certs:/container/service/slapd/assets/certs
shibboleth-idp:
- image: "unicon/shibboleth-idp:3.4.2"
+ build:
+ context: .
+ dockerfile: ./idp/Dockerfile
depends_on:
- openldap
environment:
- JETTY_MAX_HEAP=64m
- - JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=secret
- - JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=secret
ports:
- - "4443"
+ - 4443
+ expose:
+ - 4443
links:
- openldap:openldap
- volumes:
- - ./idp/shibboleth-idp/conf:/opt/shibboleth-idp/conf
- - ./idp/shibboleth-idp/credentials:/opt/shibboleth-idp/credentials
- - ./idp/shibboleth-idp/metadata:/opt/shibboleth-idp/metadata
- - ./idp/shib-jetty-base/start.d/ssl.ini:/opt/shib-jetty-base/start.d/ssl.ini
+ restart: always #ensure ephemeral port mappings are properly updated
oidc-provider:
image: "c2id/c2id-server-demo:12.16.1"
diff --git a/x-pack/test/idp-fixture/idp/Dockerfile b/x-pack/test/idp-fixture/idp/Dockerfile
new file mode 100644
index 0000000000000..ea7b6880fb42b
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/Dockerfile
@@ -0,0 +1,92 @@
+FROM openjdk:11.0.16-jre AS javabase
+
+ENV JAVA_HOME=/usr/local/openjdk-11
+
+# below is mostly a fork from https://github.com/Unicon/shibboleth-idp-dockerized/blob/master/Dockerfile
+# building entire image to allow for easier upgrades since published image has not been updated for years
+ENV jetty_version=9.3.27.v20190418 \
+ jetty_hash=7c7c80dd1c9f921771e2b1a05deeeec652d5fcaa \
+ idp_version=3.4.3 \
+ idp_hash=eb86bc7b6366ce2a44f97cae1b014d307b84257e3149469b22b2d091007309db \
+ dta_hash=2f547074b06952b94c35631398f36746820a7697 \
+ slf4j_version=1.7.25 \
+ slf4j_hash=da76ca59f6a57ee3102f8f9bd9cee742973efa8a \
+ logback_version=1.2.3 \
+ logback_classic_hash=7c4f3c474fb2c041d8028740440937705ebb473a \
+ logback_core_hash=864344400c3d4d92dfeb0a305dc87d953677c03c \
+ logback_access_hash=e8a841cb796f6423c7afd8738df6e0e4052bf24a
+
+ENV JETTY_HOME=/opt/jetty-home \
+ JETTY_BASE=/opt/shib-jetty-base \
+ PATH=$PATH:$JAVA_HOME/bin \
+ JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=secret \
+ JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=secret
+
+# Manually override the jetty keystore otherwise it will attempt to download and fail
+RUN mkdir -p /opt/shib-jetty-base/modules
+COPY ./idp/jetty-custom/ssl.mod /opt/shib-jetty-base/modules/ssl.mod
+COPY ./idp/jetty-custom/keystore /opt/shib-jetty-base/etc/keystore
+
+# Download Jetty, verify the hash, and install, initialize a new base
+RUN wget -q https://repo.maven.apache.org/maven2/org/eclipse/jetty/jetty-distribution/$jetty_version/jetty-distribution-$jetty_version.tar.gz \
+ && echo "$jetty_hash jetty-distribution-$jetty_version.tar.gz" | sha1sum -c - \
+ && tar -zxvf jetty-distribution-$jetty_version.tar.gz -C /opt \
+ && ln -s /opt/jetty-distribution-$jetty_version/ /opt/jetty-home
+
+# Config Jetty
+RUN mkdir -p /opt/shib-jetty-base/modules /opt/shib-jetty-base/lib/ext /opt/shib-jetty-base/lib/logging /opt/shib-jetty-base/resources \
+ && cd /opt/shib-jetty-base \
+ && touch start.ini \
+ && java -jar ../jetty-home/start.jar --add-to-startd=http,https,deploy,ext,annotations,jstl,rewrite
+
+# Download Shibboleth IdP, verify the hash, and install
+RUN wget -q https://shibboleth.net/downloads/identity-provider/archive/$idp_version/shibboleth-identity-provider-$idp_version.tar.gz \
+ && echo "$idp_hash shibboleth-identity-provider-$idp_version.tar.gz" | sha256sum -c - \
+ && tar -zxvf shibboleth-identity-provider-$idp_version.tar.gz -C /opt \
+ && ln -s /opt/shibboleth-identity-provider-$idp_version/ /opt/shibboleth-idp
+
+# Download the library to allow SOAP Endpoints, verify the hash, and place
+RUN wget -q https://build.shibboleth.net/nexus/content/repositories/releases/net/shibboleth/utilities/jetty9/jetty9-dta-ssl/1.0.0/jetty9-dta-ssl-1.0.0.jar \
+ && echo "$dta_hash jetty9-dta-ssl-1.0.0.jar" | sha1sum -c - \
+ && mv jetty9-dta-ssl-1.0.0.jar /opt/shib-jetty-base/lib/ext/
+
+# Download the slf4j library for Jetty logging, verify the hash, and place
+RUN wget -q https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/$slf4j_version/slf4j-api-$slf4j_version.jar \
+ && echo "$slf4j_hash slf4j-api-$slf4j_version.jar" | sha1sum -c - \
+ && mv slf4j-api-$slf4j_version.jar /opt/shib-jetty-base/lib/logging/
+
+# Download the logback_classic library for Jetty logging, verify the hash, and place
+RUN wget -q https://repo.maven.apache.org/maven2/ch/qos/logback/logback-classic/$logback_version/logback-classic-$logback_version.jar \
+ && echo "$logback_classic_hash logback-classic-$logback_version.jar" | sha1sum -c - \
+ && mv logback-classic-$logback_version.jar /opt/shib-jetty-base/lib/logging/
+
+# Download the logback-core library for Jetty logging, verify the hash, and place
+RUN wget -q https://repo.maven.apache.org/maven2/ch/qos/logback/logback-core/$logback_version/logback-core-$logback_version.jar \
+ && echo "$logback_core_hash logback-core-$logback_version.jar" | sha1sum -c - \
+ && mv logback-core-$logback_version.jar /opt/shib-jetty-base/lib/logging/
+
+# Download the logback-access library for Jetty logging, verify the hash, and place
+RUN wget -q https://repo.maven.apache.org/maven2/ch/qos/logback/logback-access/$logback_version/logback-access-$logback_version.jar \
+ && echo "$logback_access_hash logback-access-$logback_version.jar" | sha1sum -c - \
+ && mv logback-access-$logback_version.jar /opt/shib-jetty-base/lib/logging/
+
+## Copy local files
+COPY idp/shib-jetty-base/ /opt/shib-jetty-base/
+COPY idp/shibboleth-idp/ /opt/shibboleth-idp/
+COPY idp/bin/ /usr/local/bin/
+
+# Setting owner ownership and permissions
+RUN useradd jetty -U -s /bin/false \
+ && chown -R root:jetty /opt \
+ && chmod -R 640 /opt \
+ && chown -R root:jetty /opt/shib-jetty-base \
+ && chmod -R 640 /opt/shib-jetty-base \
+ && chmod -R 750 /opt/shibboleth-idp/bin
+
+RUN chmod 750 /usr/local/bin/run-jetty.sh /usr/local/bin/init-idp.sh
+RUN chmod +x /opt/jetty-home/bin/jetty.sh
+
+# Opening 4443 (browser TLS), 8443 (mutual auth TLS)
+EXPOSE 4443 8443
+
+CMD ["run-jetty.sh"]
diff --git a/x-pack/test/idp-fixture/idp/bin/init-idp.sh b/x-pack/test/idp-fixture/idp/bin/init-idp.sh
new file mode 100644
index 0000000000000..55c50251cb436
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/bin/init-idp.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+cd /opt/shibboleth-idp/bin
+
+echo "Please complete the following for your IdP environment:"
+./ant.sh -Didp.target.dir=/opt/shibboleth-idp-tmp -Didp.src.dir=/opt/shibboleth-idp/ install
+
+find /opt/shibboleth-idp-tmp/ -type d -exec chmod 750 {} \;
+
+mkdir -p /ext-mount/customized-shibboleth-idp/conf/
+chmod -R 750 /ext-mount/customized-shibboleth-idp/
+
+# Copy the essential and routinely customized config to out Docker mount.
+cd /opt/shibboleth-idp-tmp
+cp -r credentials/ /ext-mount/customized-shibboleth-idp/
+cp -r metadata/ /ext-mount/customized-shibboleth-idp/
+cp conf/{attribute-resolver*.xml,attribute-filter.xml,cas-protocol.xml,idp.properties,ldap.properties,metadata-providers.xml,relying-party.xml,saml-nameid.*} /ext-mount/customized-shibboleth-idp/conf/
+
+# Copy the basic UI components, which are routinely customized
+cp -r views/ /ext-mount/customized-shibboleth-idp/
+mkdir /ext-mount/customized-shibboleth-idp/webapp/
+cp -r edit-webapp/css/ /ext-mount/customized-shibboleth-idp/webapp/
+cp -r edit-webapp/images/ /ext-mount/customized-shibboleth-idp/webapp/
+rm -r /ext-mount/customized-shibboleth-idp/views/user-prefs.js
+
+echo "A basic Shibboleth IdP config and UI has been copied to ./customized-shibboleth-idp/ (assuming the default volume mapping was used)."
+echo "Most files, if not being customized can be removed from what was exported/the local Docker image and baseline files will be used."
diff --git a/x-pack/test/idp-fixture/idp/bin/run-jetty.sh b/x-pack/test/idp-fixture/idp/bin/run-jetty.sh
new file mode 100644
index 0000000000000..af795963b9712
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/bin/run-jetty.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+#set -x
+
+if [ -e "/opt/shibboleth-idp/ext-conf/idp-secrets.properties" ]; then
+ export JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=`gawk 'match($0,/^jetty.backchannel.sslContext.keyStorePassword=\s?(.*)\s?$/, a) {print a[1]}' /opt/shibboleth-idp/ext-conf/idp-secrets.properties`
+ export JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=`gawk 'match($0,/^jetty\.sslContext\.keyStorePassword=\s?(.*)\s?$/, a) {print a[1]}' /opt/shibboleth-idp/ext-conf/idp-secrets.properties`
+fi
+
+export JETTY_ARGS="jetty.sslContext.keyStorePassword=$JETTY_BROWSER_SSL_KEYSTORE_PASSWORD jetty.backchannel.sslContext.keyStorePassword=$JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD"
+sed -i "s/^-Xmx.*$/-Xmx$JETTY_MAX_HEAP/g" /opt/shib-jetty-base/start.ini
+
+exec /opt/jetty-home/bin/jetty.sh run
diff --git a/x-pack/test/idp-fixture/idp/jetty-custom/keystore b/x-pack/test/idp-fixture/idp/jetty-custom/keystore
new file mode 100644
index 0000000000000..d6592f95ee935
Binary files /dev/null and b/x-pack/test/idp-fixture/idp/jetty-custom/keystore differ
diff --git a/x-pack/test/idp-fixture/idp/jetty-custom/ssl.mod b/x-pack/test/idp-fixture/idp/jetty-custom/ssl.mod
new file mode 100644
index 0000000000000..460af556676ca
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/jetty-custom/ssl.mod
@@ -0,0 +1,102 @@
+#
+# SSL Keystore module
+#
+
+[name]
+ssl
+
+[depend]
+server
+
+[xml]
+etc/jetty-ssl.xml
+etc/jetty-ssl-context.xml
+
+[files]
+# keystore originally sourced from https://github.com/eclipse/jetty.project/raw/jetty-9.3.x/jetty-server/src/main/config/etc/keystore
+/opt/shib-jetty-base/etc/keystore
+
+[ini-template]
+### TLS(SSL) Connector Configuration
+
+## Connector host/address to bind to
+# jetty.ssl.host=0.0.0.0
+
+## Connector port to listen on
+# jetty.ssl.port=8443
+
+## Connector idle timeout in milliseconds
+# jetty.ssl.idleTimeout=30000
+
+## Connector socket linger time in seconds (-1 to disable)
+# jetty.ssl.soLingerTime=-1
+
+## Number of acceptors (-1 picks default based on number of cores)
+# jetty.ssl.acceptors=-1
+
+## Number of selectors (-1 picks default based on number of cores)
+# jetty.ssl.selectors=-1
+
+## ServerSocketChannel backlog (0 picks platform default)
+# jetty.ssl.acceptorQueueSize=0
+
+## Thread priority delta to give to acceptor threads
+# jetty.ssl.acceptorPriorityDelta=0
+
+## Whether request host names are checked to match any SNI names
+# jetty.ssl.sniHostCheck=true
+
+## max age in seconds for a Strict-Transport-Security response header (default -1)
+# jetty.ssl.stsMaxAgeSeconds=31536000
+
+## include subdomain property in any Strict-Transport-Security header (default false)
+# jetty.ssl.stsIncludeSubdomains=true
+
+### SslContextFactory Configuration
+## Note that OBF passwords are not secure, just protected from casual observation
+## See http://www.eclipse.org/jetty/documentation/current/configuring-security-secure-passwords.html
+
+## Keystore file path (relative to $jetty.base)
+# jetty.sslContext.keyStorePath=etc/keystore
+
+## Truststore file path (relative to $jetty.base)
+# jetty.sslContext.trustStorePath=etc/keystore
+
+## Keystore password
+# jetty.sslContext.keyStorePassword=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
+
+## Keystore type and provider
+# jetty.sslContext.keyStoreType=JKS
+# jetty.sslContext.keyStoreProvider=
+
+## KeyManager password
+# jetty.sslContext.keyManagerPassword=OBF:1u2u1wml1z7s1z7a1wnl1u2g
+
+## Truststore password
+# jetty.sslContext.trustStorePassword=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
+
+## Truststore type and provider
+# jetty.sslContext.trustStoreType=JKS
+# jetty.sslContext.trustStoreProvider=
+
+## whether client certificate authentication is required
+# jetty.sslContext.needClientAuth=false
+
+## Whether client certificate authentication is desired
+# jetty.sslContext.wantClientAuth=false
+
+## Whether cipher order is significant (since java 8 only)
+# jetty.sslContext.useCipherSuitesOrder=true
+
+## To configure Includes / Excludes for Cipher Suites or Protocols see tweak-ssl.xml example at
+## https://www.eclipse.org/jetty/documentation/current/configuring-ssl.html#configuring-sslcontextfactory-cipherSuites
+
+## Set the size of the SslSession cache
+# jetty.sslContext.sslSessionCacheSize=-1
+
+## Set the timeout (in seconds) of the SslSession cache timeout
+# jetty.sslContext.sslSessionTimeout=-1
+
+## Allow SSL renegotiation
+# jetty.sslContext.renegotiationAllowed=true
+# jetty.sslContext.renegotiationLimit=5
diff --git a/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-backchannel.xml b/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-backchannel.xml
new file mode 100644
index 0000000000000..7b07b5116adfe
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-backchannel.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ true
+
+
+ - SSL
+ - SSLv2
+ - SSLv3
+
+
+
+
+ - TLS_ECDHE.*
+ - TLS_RSA.*
+
+
+
+
+ - .*NULL.*
+ - .*RC4.*
+ - .*MD5.*
+ - .*DES.*
+ - .*DSS.*
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ http/1.1
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-logging.xml b/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-logging.xml
new file mode 100644
index 0000000000000..2348f9938705f
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-logging.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-requestlog.xml b/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-requestlog.xml
new file mode 100644
index 0000000000000..69d899a533dee
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-requestlog.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+ /resources/logback-access.xml
+
+
+ [
+
+ ]
+
\ No newline at end of file
diff --git a/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-rewrite.xml b/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-rewrite.xml
new file mode 100644
index 0000000000000..6af7394b37266
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-rewrite.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - REQUEST
+ - ASYNC
+
+
+
+
+
+
+
+ *
+ Content-Security-Policy
+ frame-ancestors 'none';
+
+
+
+
+
+
+
+ *
+ X-Frame-Options
+ DENY
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-ssl-context.xml b/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-ssl-context.xml
new file mode 100644
index 0000000000000..08a72852ab438
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/shib-jetty-base/etc/jetty-ssl-context.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ - SSL
+ - SSLv2
+ - SSLv3
+
+
+
+
+ - TLS_ECDHE.*
+ - TLS_RSA.*
+
+
+
+
+ - .*NULL.*
+ - .*RC4.*
+ - .*MD5.*
+ - .*DES.*
+ - .*DSS.*
+
+
+
+
\ No newline at end of file
diff --git a/x-pack/test/idp-fixture/idp/shib-jetty-base/modules/backchannel.mod b/x-pack/test/idp-fixture/idp/shib-jetty-base/modules/backchannel.mod
new file mode 100644
index 0000000000000..1215b1096aa73
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/shib-jetty-base/modules/backchannel.mod
@@ -0,0 +1,8 @@
+[name]
+backchannel
+
+[depend]
+server
+
+[xml]
+etc/jetty-backchannel.xml
diff --git a/x-pack/test/idp-fixture/idp/shib-jetty-base/resources/logback-access.xml b/x-pack/test/idp-fixture/idp/shib-jetty-base/resources/logback-access.xml
new file mode 100644
index 0000000000000..6c5c2232e66a7
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/shib-jetty-base/resources/logback-access.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ combined
+
+
+
+
+
\ No newline at end of file
diff --git a/x-pack/test/idp-fixture/idp/shib-jetty-base/resources/logback.xml b/x-pack/test/idp-fixture/idp/shib-jetty-base/resources/logback.xml
new file mode 100644
index 0000000000000..641dc41a39879
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/shib-jetty-base/resources/logback.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ UTF-8
+ %date{HH:mm:ss.SSS} - %level [%logger:%line] - %msg%n
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/x-pack/test/idp-fixture/idp/shib-jetty-base/start.d/backchannel.ini b/x-pack/test/idp-fixture/idp/shib-jetty-base/start.d/backchannel.ini
new file mode 100644
index 0000000000000..afa19ed4d4cda
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/shib-jetty-base/start.d/backchannel.ini
@@ -0,0 +1,8 @@
+--module=backchannel
+
+jetty.backchannel.port=8443
+jetty.backchannel.sslContext.keyStorePath=/opt/shibboleth-idp/credentials/idp-backchannel.p12
+jetty.backchannel.sslContext.keyStoreType=PKCS12
+
+# specified by $IDP_HOME/ext-conf/idp-secrets.properties or the 'docker run' command line
+# jetty.backchannel.sslContext.keyStorePassword=CHANGEME
\ No newline at end of file
diff --git a/x-pack/test/idp-fixture/idp/shib-jetty-base/start.ini b/x-pack/test/idp-fixture/idp/shib-jetty-base/start.ini
new file mode 100644
index 0000000000000..91a674c8820bd
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/shib-jetty-base/start.ini
@@ -0,0 +1,33 @@
+# Required Jetty modules
+--module=server
+--module=deploy
+--module=annotations
+--module=resources
+--module=logging
+--module=requestlog
+--module=servlets
+--module=jsp
+--module=jstl
+--module=ext
+--module=plus
+--module=rewrite
+
+# Allows setting Java system properties (-Dname=value)
+# and JVM flags (-X, -XX) in this file
+# NOTE: spawns child Java process
+--exec
+
+# Bypass file validation for the SSL module, to work around a bug in Jetty 9.3.X
+--skip-file-validation=ssl
+
+# Uncomment if IdP is installed somewhere other than /opt/shibboleth-idp
+-Didp.home=/opt/shibboleth-idp
+
+# Alternate garbage collector that reduces memory needed for larger metadata files
+-XX:+UseG1GC
+
+# Maximum amount of memory that Jetty may use, at least 1.5G is recommended
+# for handling larger (> 25M) metadata files but you will need to test on
+# your particular metadata configuration.
+# This value will be replaced at runtime using the env JAVA_MAX_MEMORY setting.
+-XmxJETTY_MAX_HEAP
diff --git a/x-pack/test/idp-fixture/idp/shib-jetty-base/webapps/idp.xml b/x-pack/test/idp-fixture/idp/shib-jetty-base/webapps/idp.xml
new file mode 100644
index 0000000000000..ed62630d6dd8a
--- /dev/null
+++ b/x-pack/test/idp-fixture/idp/shib-jetty-base/webapps/idp.xml
@@ -0,0 +1,7 @@
+
+ /webapp/
+ /idp
+ false
+ false
+ true
+
\ No newline at end of file