diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 92a2f0bd37..c9de306a93 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -6,10 +6,49 @@ inputs: description: "JDK version" required: false default: "17" + requireKeystores: + description: "Fail the job if the keystore artifact is missing. Set for jobs that pass -PskipKeystoreGeneration and therefore cannot regenerate." + required: false + default: "false" runs: using: "composite" steps: + - name: Install openssl if missing + run: | + if ! command -v openssl &>/dev/null; then + if [ "$(id -u)" = "0" ]; then apt-get update && apt-get install -y openssl + else sudo apt-get update && sudo apt-get install -y openssl; fi + fi + shell: bash + # Only the jobs that cannot generate their own keystores pull the artifact. Every + # other workflow using this action (docs, changelog, releases) has no such artifact + # to fetch, and an unconditional download would leave each of their jobs with a + # failed-but-ignored step. + - name: Download keystores + if: inputs.requireKeystores == 'true' + uses: actions/download-artifact@v4 + with: + name: keystores-${{ env.JOB_ID }} + path: . + continue-on-error: true + - name: Verify keystores are present + if: inputs.requireKeystores == 'true' + shell: bash + run: | + missing=0 + for f in keystore/localhost/localhost.keystore.p12 \ + keystore/localhost/localhost.truststore.p12 \ + keystore/docker/all-services.keystore.p12; do + if [ ! -f "$f" ]; then + echo "::error::Missing $f" + missing=1 + fi + done + if [ "$missing" -ne 0 ]; then + echo "::error::Keystore artifact missing or incomplete, and this job runs with -PskipKeystoreGeneration so it cannot regenerate." + exit 1 + fi - name: Set up JDK ${{ inputs.jdkVersion }} uses: actions/setup-java@v4 with: @@ -18,8 +57,8 @@ runs: - name: Set up Node uses: actions/setup-node@v4 with: - node-version: '24.18.1' - - run: npm install -g npm@10.9.9 + node-version: '24.18.1' # keep in sync with gradle/versions.gradle projectNode + - run: npm install --ignore-scripts -g npm@10.9.9 # keep in sync with gradle/versions.gradle projectNpm shell: bash - name: Grant execute permission for gradlew run: chmod +x gradlew diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index bec0fedec1..b66bf15eda 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -24,6 +24,9 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + - name: Generate Keystores + run: ./gradlew generateKeystores + - name: Build Nodejs Sample App run: | cd onboarding-enabler-nodejs-sample-app @@ -55,6 +58,19 @@ jobs: run: > ./gradlew :api-catalog-services:jib -Djib.serialize=true -Pzowe.jib.image.suffix=standalone -Pzowe.jib.image.javaAgentPort=6304 -Pzowe.jib.image.debugPort=5125 -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} -Pzowe.docker.password=${{ secrets.PERSONAL_JB_TOKEN }} -Pzowe.docker.username=balhar-jakub -Pzowe.docker.container=ghcr.io/balhar-jakub/ -Pzowe.docker.tag=${{ env.JOB_ID }} + - name: Upload keystores + uses: actions/upload-artifact@v4 + with: + name: keystores-${{ env.JOB_ID }} + path: | + keystore/ + zaas-client/src/test/resources/localhost.keystore.p12 + zaas-client/src/test/resources/localhost.truststore.p12 + common-service-core/src/test/resources/jwt-public-key.pub + # Downstream jobs cannot regenerate these, so the artifact has to + # outlive the run itself for "re-run failed jobs" to keep working. + retention-days: 5 + - uses: ./.github/actions/teardown CITestsModulithUnknownHostnames: @@ -86,11 +102,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker-modulith -Denvironment.modulith=true + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker-modulith -Denvironment.modulith=true -Ddiscoverableclient.instances=1 -DcentralGateway.instances=0 -Ddiscoverableclient.host=discoverable-client-unknown -Dzosmf.host=mock-services-unknown -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD @@ -100,7 +118,7 @@ jobs: - name: Run CI Tests with Unknown Hostnames run: > - ENV_CONFIG=docker-modulith ./gradlew :integration-tests:runUnknownHostnamesTests --info + ENV_CONFIG=docker-modulith ./gradlew :integration-tests:runUnknownHostnamesTests -PskipKeystoreGeneration --info -Ddiscoverableclient.instances=1 -Denvironment.config=-docker-modulith -Denvironment.modulith=true - uses: ./.github/actions/dump-jacoco if: always() @@ -160,11 +178,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker-modulith + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker-modulith -Denvironment.modulith=true -DcentralGateway.instances=0 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: @@ -173,7 +193,7 @@ jobs: - name: Run Modulith CI Tests run: > - ENV_CONFIG=docker-modulith ./gradlew :integration-tests:runContainerModulithTests --info + ENV_CONFIG=docker-modulith ./gradlew :integration-tests:runContainerModulithTests -PskipKeystoreGeneration --info -Ddiscoverableclient.instances=1 -Denvironment.config=-docker-modulith -Denvironment.modulith=true -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} -Dtest.hostname=testrunner @@ -247,11 +267,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker-modulith-ha -Ddiscoverableclient.instances=1 + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker-modulith-ha -Ddiscoverableclient.instances=1 -Denvironment.gwCount=2 -Dgateway.instances=2 -Ddiscovery.instances=2 -Dcaching.instances=2 -Dapicatalog.instances=2 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Denvironment.modulith=true -Dzosmf.instances=0 @@ -261,7 +283,7 @@ jobs: - name: Run Modulith CI Tests with SAF Provider in HA run: > - ENV_CONFIG=docker-modulith-ha ./gradlew :integration-tests:runContainerSAFProviderTests --info + ENV_CONFIG=docker-modulith-ha ./gradlew :integration-tests:runContainerSAFProviderTests -PskipKeystoreGeneration --info -Ddiscoverableclient.instances=1 -Denvironment.config=-docker-modulith-ha -Denvironment.modulith=true -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} - uses: ./.github/actions/dump-jacoco @@ -370,11 +392,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker-modulith-ha -Ddiscoverableclient.instances=2 + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker-modulith-ha -Ddiscoverableclient.instances=2 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Denvironment.modulith=true env: ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} @@ -383,7 +407,7 @@ jobs: - name: Run Normal HA Tests in Modulith if: ${{ 'normal' == matrix.type }} run: > - ./gradlew runHATests -Denvironment.config=-docker-modulith-ha -Denvironment.gwCount=3 + ./gradlew -PskipKeystoreGeneration runHATests -Denvironment.config=-docker-modulith-ha -Denvironment.gwCount=3 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Denvironment.modulith=true env: ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} @@ -392,7 +416,7 @@ jobs: - name: Run Gateway Service Chaotic HA Tests in Modulith if: ${{ 'gateway-chaotic' == matrix.type }} run: > - ./gradlew :integration-tests:runChaoticHATests --tests org.zowe.apiml.integration.ha.GatewayChaoticTest + ./gradlew :integration-tests:runChaoticHATests -PskipKeystoreGeneration --tests org.zowe.apiml.integration.ha.GatewayChaoticTest -Denvironment.config=-docker-modulith-ha -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Denvironment.modulith=true env: @@ -402,7 +426,7 @@ jobs: - name: Run Discoverable Client Chaotic HA Tests in Modulith if: ${{ 'discoverableclient-chaotic' == matrix.type }} run: > - ./gradlew :integration-tests:runChaoticHATests --tests org.zowe.apiml.integration.ha.SouthboundServiceChaoticTest + ./gradlew :integration-tests:runChaoticHATests -PskipKeystoreGeneration --tests org.zowe.apiml.integration.ha.SouthboundServiceChaoticTest -Denvironment.config=-docker-modulith-ha -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Denvironment.modulith=true env: @@ -412,7 +436,7 @@ jobs: - name: Run WebSocket Chaotic HA Tests in Modulith if: ${{ 'websocket-chaotic' == matrix.type }} run: > - ./gradlew :integration-tests:runChaoticHATests --tests org.zowe.apiml.integration.ha.WebSocketChaoticTest + ./gradlew :integration-tests:runChaoticHATests -PskipKeystoreGeneration --tests org.zowe.apiml.integration.ha.WebSocketChaoticTest -Denvironment.config=-docker-modulith-ha -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Denvironment.modulith=true env: @@ -422,7 +446,7 @@ jobs: - name: Run Caching Chaotic HA Tests if: ${{ 'caching-chaotic' == matrix.type }} run: > - ./gradlew :integration-tests:runChaoticHATests --tests org.zowe.apiml.integration.ha.CachingServiceTests + ./gradlew :integration-tests:runChaoticHATests -PskipKeystoreGeneration --tests org.zowe.apiml.integration.ha.CachingServiceTests -Denvironment.config=-docker-modulith-ha -Denvironment.offPlatform=true -DcloudGateway.enabled=false -Denvironment.modulith=true -Denvironment.chaotic=true -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD @@ -526,11 +550,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker -DcentralGateway.instances=0 + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker -DcentralGateway.instances=0 -DcentralHosts=discovery-service-2,gateway-service-2,zaas-service-2 env: ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} @@ -539,7 +565,7 @@ jobs: - name: Run CI Tests timeout-minutes: 4 run: > - ./gradlew :integration-tests:runContainerTests -Denvironment.config=-docker + ./gradlew :integration-tests:runContainerTests -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} -Dtest.hostname=testrunner - uses: ./.github/actions/dump-jacoco @@ -633,11 +659,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-ha -Ddiscoverableclient.instances=1 + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-ha -Ddiscoverableclient.instances=1 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Dcaching.instances=1 -Dzosmf.instances=0 env: @@ -646,7 +674,7 @@ jobs: - name: Run CI Tests With SAF Provider run: > - ENV_CONFIG=ha ./gradlew :integration-tests:runContainerSAFProviderTests -Denvironment.config=-ha + ENV_CONFIG=ha ./gradlew :integration-tests:runContainerSAFProviderTests -PskipKeystoreGeneration -Denvironment.config=-ha -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} - uses: ./.github/actions/dump-jacoco if: always() @@ -718,11 +746,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Ddiscovery.instances=1 -Dapicatalog.instances=0 env: @@ -731,7 +761,7 @@ jobs: - name: Run CI Tests run: > - ./gradlew :integration-tests:runGatewayProxyTest -Denvironment.config=-docker + ./gradlew :integration-tests:runGatewayProxyTest -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} - name: Dump CGW jacoco data @@ -832,11 +862,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker -Ddiscoverableclient.instances=0 -Dgateway.instances=2 -DcentralHosts=central-gateway-service,api-catalog-services-2,discovery-service-2 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD @@ -846,7 +878,7 @@ jobs: - name: Run CI Tests run: > - ./gradlew :integration-tests:runGatewayCentralRegistryTest --info + ./gradlew :integration-tests:runGatewayCentralRegistryTest -PskipKeystoreGeneration --info -Denvironment.config=-docker -Dgateway.instances=2 -Ddiscoverableclient.instances=0 -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} -DcentralHosts=central-gateway-service,api-catalog-services-2,discovery-service-2 @@ -923,18 +955,20 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker-modulith -Ddiscoverableclient.instances=0 + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker-modulith -Ddiscoverableclient.instances=0 -Denvironment.modulith=true -Dgateway.host=central-gateway-service -DcentralHosts=central-gateway-service - name: Run CI Tests timeout-minutes: 4 run: > - ./gradlew :integration-tests:runGatewayCentralRegistryTest --info + ./gradlew :integration-tests:runGatewayCentralRegistryTest -PskipKeystoreGeneration --info -Denvironment.config=-docker-modulith -Denvironment.modulith=true -Ddiscovery.additionalHost=central-gateway-service -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} @@ -982,11 +1016,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Ddiscovery.instances=1 -DcentralGateway.instances=0 env: @@ -995,7 +1031,7 @@ jobs: - name: Run CI Tests run: > - ./gradlew :integration-tests:runRegistrationTests -Denvironment.config=-docker + ./gradlew :integration-tests:runRegistrationTests -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} # Coverage results are not stored in this job as it would not provide much additional data @@ -1056,18 +1092,20 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck --info -Denvironment.config=-docker + ./gradlew runStartUpCheck -PskipKeystoreGeneration --info -Denvironment.config=-docker -Ddiscovery.instances=1 -DcentralGateway.instances=0 -Dapiml.security.ssl.verifySslCertificatesOfServices=false -Dapiml.discovery.userid=eureka -Dapiml.discovery.password=password - name: Run Discovery Basic Auth Tests run: > - ./gradlew :integration-tests:runDiscoveryBasicAuthTests -Denvironment.config=-docker + ./gradlew :integration-tests:runDiscoveryBasicAuthTests -PskipKeystoreGeneration -Denvironment.config=-docker - name: Store results uses: actions/upload-artifact@v4 @@ -1140,18 +1178,20 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck --info -Denvironment.config=-docker-modulith-2-instances + ./gradlew runStartUpCheck -PskipKeystoreGeneration --info -Denvironment.config=-docker-modulith-2-instances -Denvironment.modulith=true -Dapiml.security.ssl.verifySslCertificatesOfServices=false -Dapiml.discovery.userid=eureka -Dapiml.discovery.password=password - name: Run Discovery Basic Auth Tests run: > - ./gradlew :integration-tests:runDiscoveryBasicAuthTests -Denvironment.config=-docker-modulith-2-instances + ./gradlew :integration-tests:runDiscoveryBasicAuthTests -PskipKeystoreGeneration -Denvironment.config=-docker-modulith-2-instances -Denvironment.modulith=true - name: Store results @@ -1191,11 +1231,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker-modulith -Denvironment.modulith=true + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker-modulith -Denvironment.modulith=true -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Ddiscovery.instances=1 -DcentralGateway.instances=0 env: @@ -1204,7 +1246,7 @@ jobs: - name: Run CI Tests run: > - ./gradlew :integration-tests:runRegistrationTests -Denvironment.config=-docker-modulith + ./gradlew :integration-tests:runRegistrationTests -PskipKeystoreGeneration -Denvironment.config=-docker-modulith -Denvironment.modulith=true -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} # Coverage results are not stored in this job as it would not provide much additional data @@ -1279,11 +1321,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker -Ddiscoverableclient.instances=1 -Ddiscovery.instances=1 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: @@ -1292,7 +1336,7 @@ jobs: - name: Build with Gradle run: > - ./gradlew :integration-tests:runZaasTest -Denvironment.config=-docker + ./gradlew :integration-tests:runZaasTest -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} -Doidc.client.id=${{ secrets.OIDC_CLIENT_ID }} -Doidc.client.secret=${{ secrets.OIDC_CLIENT_SECRET }} -Doidc.test.user=${{ secrets.OIDC_TEST_USER }} -Doidc.test.pass=${{ secrets.OIDC_TEST_PASS }} -Doidc.test.alt_user=${{ secrets.OIDC_WINNIE_USER }} @@ -1356,11 +1400,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Ddiscovery.instances=1 -DcentralGateway.instances=0 env: @@ -1369,7 +1415,7 @@ jobs: - name: Build with Gradle run: > - ./gradlew :integration-tests:runZosmfAuthTest -Denvironment.config=-docker + ./gradlew :integration-tests:runZosmfAuthTest -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} # Coverage results are not stored in this job as it would not provide much additional data - name: Store results @@ -1415,11 +1461,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker-modulith -Denvironment.modulith=true + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker-modulith -Denvironment.modulith=true -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -DcentralGateway.instances=0 env: @@ -1428,7 +1476,7 @@ jobs: - name: Build with Gradle run: > - ./gradlew :integration-tests:runZosmfAuthTest --info + ./gradlew :integration-tests:runZosmfAuthTest -PskipKeystoreGeneration --info -Denvironment.config=-docker-modulith -Denvironment.modulith=true -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} # Coverage results are not stored in this job as it would not provide much additional data @@ -1454,6 +1502,8 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run APIML and Redis Containers run: | @@ -1463,7 +1513,7 @@ jobs: - name: Run Startup Check run: > - ./gradlew runStartUpCheck --info + ./gradlew runStartUpCheck -PskipKeystoreGeneration --info -DtlsConfiguration.clientKeyStore=../docker/redis/redis-containers/keystore/all-services.keystore.p12 -DtlsConfiguration.keyAlias=apimtst -DtlsConfiguration.keyStore=../docker/redis/redis-containers/keystore/all-services.keystore.p12 @@ -1476,7 +1526,7 @@ jobs: - name: Run Caching Service tests run: > - ./gradlew :integration-tests:runCachingServiceTests --info + ./gradlew :integration-tests:runCachingServiceTests -PskipKeystoreGeneration --info -DtlsConfiguration.clientKeyStore=../docker/redis/redis-containers/keystore/all-services.keystore.p12 -DtlsConfiguration.keyAlias=apimtst -DtlsConfiguration.keyStore=../docker/redis/redis-containers/keystore/all-services.keystore.p12 @@ -1534,6 +1584,8 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run APIML and Redis Containers run: | @@ -1543,7 +1595,7 @@ jobs: - name: Run Startup Check run: > - ./gradlew runStartUpCheck --info + ./gradlew runStartUpCheck -PskipKeystoreGeneration --info -DtlsConfiguration.clientKeyStore=../docker/redis/redis-containers/keystore/all-services.keystore.p12 -DtlsConfiguration.keyAlias=apimtst -DtlsConfiguration.keyStore=../docker/redis/redis-containers/keystore/all-services.keystore.p12 @@ -1556,7 +1608,7 @@ jobs: - name: Run Caching Service tests run: > - ./gradlew :integration-tests:runCachingServiceTests --info + ./gradlew :integration-tests:runCachingServiceTests -PskipKeystoreGeneration --info -DtlsConfiguration.clientKeyStore=../docker/redis/redis-containers/keystore/all-services.keystore.p12 -DtlsConfiguration.keyAlias=apimtst -DtlsConfiguration.keyStore=../docker/redis/redis-containers/keystore/all-services.keystore.p12 @@ -1677,6 +1729,8 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Setup Docker if: ${{ false }} # Debug of containers @@ -1692,7 +1746,7 @@ jobs: - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-ha + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-ha -Ddiscoverableclient.instances=2 -Dcaching.instances=1 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: @@ -1701,7 +1755,7 @@ jobs: - name: Run HA Tests run: > - ./gradlew runDeterministicLbHaTests --info + ./gradlew -PskipKeystoreGeneration runDeterministicLbHaTests --info -Denvironment.config=-ha -Ddiscoverableclient.instances=2 -Dcaching.instances=1 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: @@ -1773,6 +1827,8 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Setup Docker if: ${{ false }} # Debug of containers @@ -1788,7 +1844,7 @@ jobs: - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker-modulith-ha + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker-modulith-ha -Ddiscoverableclient.instances=2 -Denvironment.gwCount=2 -Dgateway.instances=2 -Ddiscovery.instances=2 -Dcaching.instances=2 -Dapicatalog.instances=2 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Denvironment.modulith=true @@ -1798,7 +1854,7 @@ jobs: - name: Run HA Tests run: > - ./gradlew runDeterministicLbHaTests --info + ./gradlew -PskipKeystoreGeneration runDeterministicLbHaTests --info -Denvironment.config=-docker-modulith-ha -Ddiscoverableclient.instances=2 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Denvironment.modulith=true env: @@ -1897,6 +1953,8 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Setup Docker if: ${{ false }} # Debug of containers @@ -1912,7 +1970,7 @@ jobs: - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-ha + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-ha -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Dapicatalog.instances=1 -Dcaching.instances=1 env: @@ -1921,7 +1979,7 @@ jobs: - name: Run HA Tests run: > - ./gradlew runStickySessionLbHaTests -Denvironment.config=-ha + ./gradlew -PskipKeystoreGeneration runStickySessionLbHaTests -Denvironment.config=-ha -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} @@ -1990,6 +2048,8 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Setup Docker if: ${{ false }} # Debug of containers @@ -2005,7 +2065,7 @@ jobs: - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker-modulith-ha -Denvironment.modulith=true + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker-modulith-ha -Denvironment.modulith=true -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Dgateway.instances=2 -Ddiscovery.instances=2 -Dcaching.instances=2 -Dapicatalog.instances=2 env: @@ -2014,7 +2074,7 @@ jobs: - name: Run HA Tests run: > - ./gradlew runStickySessionLbHaTests -Denvironment.config=-docker-modulith-ha + ./gradlew -PskipKeystoreGeneration runStickySessionLbHaTests -Denvironment.config=-docker-modulith-ha -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Denvironment.modulith=true env: ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} @@ -2157,11 +2217,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-ha -Ddiscoverableclient.instances=2 + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-ha -Ddiscoverableclient.instances=2 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} @@ -2169,7 +2231,7 @@ jobs: - name: Run Caching Chaotic HA Tests run: > - ./gradlew :integration-tests:runChaoticHATests --tests org.zowe.apiml.integration.ha.CachingServiceTests + ./gradlew :integration-tests:runChaoticHATests -PskipKeystoreGeneration --tests org.zowe.apiml.integration.ha.CachingServiceTests -Denvironment.config=-ha -Denvironment.offPlatform=true -DcloudGateway.enabled=false -Denvironment.chaotic=true -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: @@ -2299,11 +2361,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-ha -Ddiscoverableclient.instances=2 -Dcaching.instances=2 + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-ha -Ddiscoverableclient.instances=2 -Dcaching.instances=2 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} @@ -2312,7 +2376,7 @@ jobs: - name: Run Normal HA Tests if: ${{ 'normal' == matrix.type }} run: > - ./gradlew runHATests -Denvironment.config=-ha -Denvironment.gwCount=2 -Dcaching.instances=2 + ./gradlew -PskipKeystoreGeneration runHATests -Denvironment.config=-ha -Denvironment.gwCount=2 -Dcaching.instances=2 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} @@ -2321,7 +2385,7 @@ jobs: - name: Run Discovery Service Chaotic HA Tests if: ${{ 'discovery-chaotic' == matrix.type }} run: > - ./gradlew :integration-tests:runChaoticHATests --tests org.zowe.apiml.integration.ha.DiscoveryChaoticTest + ./gradlew :integration-tests:runChaoticHATests -PskipKeystoreGeneration --tests org.zowe.apiml.integration.ha.DiscoveryChaoticTest -Denvironment.config=-ha -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: @@ -2331,7 +2395,7 @@ jobs: - name: Run Gateway Service Chaotic HA Tests if: ${{ 'gateway-chaotic' == matrix.type }} run: > - ./gradlew :integration-tests:runChaoticHATests --tests org.zowe.apiml.integration.ha.GatewayChaoticTest + ./gradlew :integration-tests:runChaoticHATests -PskipKeystoreGeneration --tests org.zowe.apiml.integration.ha.GatewayChaoticTest -Denvironment.config=-ha -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: @@ -2341,7 +2405,7 @@ jobs: - name: Run Discoverable Client Chaotic HA Tests if: ${{ 'discoverableclient-chaotic' == matrix.type }} run: > - ./gradlew :integration-tests:runChaoticHATests --tests org.zowe.apiml.integration.ha.SouthboundServiceChaoticTest + ./gradlew :integration-tests:runChaoticHATests -PskipKeystoreGeneration --tests org.zowe.apiml.integration.ha.SouthboundServiceChaoticTest -Denvironment.config=-ha -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: @@ -2351,7 +2415,7 @@ jobs: - name: Run WebSocket Chaotic HA Tests if: ${{ 'websocket-chaotic' == matrix.type }} run: > - ./gradlew :integration-tests:runChaoticHATests --tests org.zowe.apiml.integration.ha.WebSocketChaoticTest + ./gradlew :integration-tests:runChaoticHATests -PskipKeystoreGeneration --tests org.zowe.apiml.integration.ha.WebSocketChaoticTest -Denvironment.config=-ha -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: @@ -2361,7 +2425,7 @@ jobs: - name: Run Caching Chaotic HA Tests if: ${{ 'caching-chaotic' == matrix.type }} run: > - ./gradlew :integration-tests:runChaoticHATests --tests org.zowe.apiml.integration.ha.CachingServiceTests + ./gradlew :integration-tests:runChaoticHATests -PskipKeystoreGeneration --tests org.zowe.apiml.integration.ha.CachingServiceTests -Denvironment.config=-ha -Denvironment.offPlatform=true -DcloudGateway.enabled=false -Denvironment.chaotic=true -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: @@ -2437,11 +2501,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Ddiscovery.instances=1 -DcentralGateway.instances=0 env: @@ -2450,7 +2516,7 @@ jobs: - name: Build with Gradle run: > - ./gradlew :integration-tests:runInfinispanServiceTests -Denvironment.config=-docker + ./gradlew :integration-tests:runInfinispanServiceTests -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} - uses: ./.github/actions/dump-jacoco @@ -2521,11 +2587,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker-modulith-ha + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker-modulith-ha -Dgateway.instances=2 -Ddiscovery.instances=2 -Dcaching.instances=2 -Dapicatalog.instances=2 -Denvironment.modulith=true -Ddiscoverableclient.instances=1 -DcentralGateway.instances=0 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD @@ -2535,7 +2603,7 @@ jobs: - name: Build with Gradle run: > - ENV_CONFIG=docker-modulith ./gradlew :integration-tests:runModulithInfinispanServiceTests --info + ENV_CONFIG=docker-modulith ./gradlew :integration-tests:runModulithInfinispanServiceTests -PskipKeystoreGeneration --info -Ddiscoverableclient.instances=1 -Denvironment.config=-docker-modulith -Denvironment.modulith=true -Partifactory_user=${{ secrets.ARTIFACTORY_USERNAME }} -Partifactory_password=${{ secrets.ARTIFACTORY_PASSWORD }} @@ -2629,6 +2697,8 @@ jobs: with: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Install npm dependencies API Catalog uses: bahmutov/npm-install@v1 with: @@ -2644,7 +2714,7 @@ jobs: - name: Run startup check run: > - ./gradlew runStartUpCheck --scan -Denvironment.config=-ha -Ddiscoverableclient.instances=1 + ./gradlew runStartUpCheck -PskipKeystoreGeneration --scan -Denvironment.config=-ha -Ddiscoverableclient.instances=1 -Dgateway.instances=1 -Dcaching.instances=1 -Dapicatalog.instances=1 -DcentralHosts=api-catalog-services,discoverable-client,discovery-service,gateway-service,zaas-service,caching-service @@ -2749,6 +2819,8 @@ jobs: with: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Install npm dependencies API Catalog uses: bahmutov/npm-install@v1 with: @@ -2764,7 +2836,7 @@ jobs: - name: Run startup check run: > - ./gradlew runStartUpCheck --scan -Denvironment.config=-docker-modulith-ha -Ddiscoverableclient.instances=1 -Denvironment.modulith=true -Denvironment.gwCount=1 + ./gradlew runStartUpCheck -PskipKeystoreGeneration --scan -Denvironment.config=-docker-modulith-ha -Ddiscoverableclient.instances=1 -Denvironment.modulith=true -Denvironment.gwCount=1 -Dgateway.host=gateway-service,gateway-service-2 -Ddiscovery.host=gateway-service -Ddiscovery.additionalHost=gateway-service-2 -DcentralHosts=discoverable-client,gateway-service @@ -2840,11 +2912,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD -Ddiscovery.instances=1 -DserviceIdReplaced=discoverableclient:sampleclient -DcentralGateway.instances=0 @@ -2854,7 +2928,7 @@ jobs: - name: Run Service ID Prefix Replacer Tests run: > - ./gradlew :integration-tests:runIdPrefixReplacerTests -Denvironment.config=-docker + ./gradlew :integration-tests:runIdPrefixReplacerTests -PskipKeystoreGeneration -Denvironment.config=-docker -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} @@ -2897,11 +2971,13 @@ jobs: ref: ${{ github.head_ref }} - uses: ./.github/actions/setup + with: + requireKeystores: 'true' - name: Run Startup Check if: always() run: > - ./gradlew runStartUpCheck -Denvironment.config=-docker-modulith + ./gradlew runStartUpCheck -PskipKeystoreGeneration -Denvironment.config=-docker-modulith -Denvironment.modulith=true -Ddiscoverableclient.instances=0 -DcentralGateway.instances=0 -Partifactory_user=$ARTIFACTORY_USERNAME -Partifactory_password=$ARTIFACTORY_PASSWORD env: @@ -2910,7 +2986,7 @@ jobs: - name: Run Node.JS and Python Services Tests run: > - ./gradlew :integration-tests:runNodeAndPythonSampleServiceTests -Denvironment.config=-docker-modulith + ./gradlew :integration-tests:runNodeAndPythonSampleServiceTests -PskipKeystoreGeneration -Denvironment.config=-docker-modulith -Denvironment.modulith=true - name: Store results diff --git a/.gitignore b/.gitignore index abedb00737..2e7c561526 100644 --- a/.gitignore +++ b/.gitignore @@ -131,4 +131,22 @@ deploy-apiml.sh */*.trc tools/* +# Node/npm toolchains, one per project that applies the Node plugin +*/tools/ + otel/otel-collector/export/*.json + +# Generated keystores — do not commit, regenerate via scripts/generate-keystores.sh +keystore/**/*.p12 +keystore/**/*.cer +keystore/**/*.key +keystore/**/*.pem +keystore/**/*.srl +keystore/**/*.crt +keystore/**/*.csr +keystore/generation.stamp +zaas-client/src/test/resources/*.p12 +common-service-core/src/test/resources/*.pub + +# TLS material generated by docker/redis/run-redis.sh +docker/redis/redis-containers/ diff --git a/README.md b/README.md index 5727712ef7..a2dcf4346b 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,17 @@ To run integration tests, follow the instructions in [Integration Tests](integra ## Certificates +Keystores are **not committed** to this repository. They are generated locally and are ignored by git. +The Gradle build generates them automatically before running tests, but you can also generate them +explicitly — do this after a fresh clone if you intend to run individual tests from an IDE: + +```shell +./gradlew generateKeystores # or: ./scripts/generate-keystores.sh +``` + +This also produces two generated test fixtures: `zaas-client/src/test/resources/localhost.*store.p12` +and `common-service-core/src/test/resources/jwt-public-key.pub`. + For more information about how the certificates between API ML services are set up for localhost, see [TLS Certificates for localhost](keystore/README.md). ## Contributor guidelines diff --git a/api-catalog-ui/build.gradle b/api-catalog-ui/build.gradle index 5925f92e96..f9968b5d5f 100644 --- a/api-catalog-ui/build.gradle +++ b/api-catalog-ui/build.gradle @@ -8,9 +8,9 @@ node { npmVersion = libs.versions.projectNpm.get() distBaseUrl = "https://nodejs.org/dist" npmInstallCommand = "ci" - workDir = file("${project.rootDir}/tools/nodejs") - npmWorkDir = file("${project.rootDir}/tools/npm") - yarnWorkDir = file("${project.rootDir}/tools/yarn") + workDir = file("${project.projectDir}/tools/nodejs") + npmWorkDir = file("${project.projectDir}/tools/npm") + yarnWorkDir = file("${project.projectDir}/tools/yarn") nodeProjectDir = file("${project.projectDir}/frontend") } diff --git a/build.gradle b/build.gradle index ae0780237b..36529cecf3 100644 --- a/build.gradle +++ b/build.gradle @@ -49,6 +49,26 @@ import java.util.regex.Matcher //noinspection GroovyAssignabilityCheck group 'org.zowe.apiml' +/* + * A note for whoever is tempted to move the Node toolchains back under ${rootDir}/tools: + * api-catalog-ui, zowe-cli-id-federation-plugin, onboarding-enabler-nodejs and + * onboarding-enabler-nodejs-sample-app each keep their own /tools/{nodejs,npm,yarn}. + * + * Sharing one tree breaks under org.gradle.parallel=true. Each project has a private + * nodeSetup -> npmSetup -> npmInstall chain, so with a shared tree all four npmSetup tasks + * declare the same output directory: every execution invalidates the other three, one of them + * reinstalls npm on practically every build, and a project's npmInstall ends up executing + * tools/npm/npm-v/bin/npm while another project's npmSetup replaces that directory. + * The victim is SIGKILLed and the build reports "exit value 137 ... may indicate ... out of + * memory", which sends you looking in entirely the wrong place. + * + * Private directories cost disk (~210 MB per project: 195 MB unpacked node, 16 MB npm) and buy: + * no cross-project invalidation, setup tasks that stay up to date, full parallelism, and no + * coordination code here. They cost no extra download — Gradle resolves the distribution as + * org.nodejs:node: and caches the 50 MB tarball once per machine in + * ~/.gradle/caches/modules-2, and npm caches its own tarball in ~/.npm/_cacache. + */ + apply plugin: 'java-library' apply from: 'gradle/license.gradle' @@ -312,8 +332,11 @@ task publishAllSDKVersions { task nodejsClean(type: Delete) { group = 'npm' if (cleanNode == 'true') { - delete 'api-catalog-ui/tools/nodejs', 'api-catalog-ui/tools/npm', 'api-catalog-ui/tools/yarn' - delete 'onboarding-enabler-nodejs-sample-app/tools/nodejs', 'onboarding-enabler-nodejs-sample-app/tools/npm', 'onboarding-enabler-nodejs-sample-app/tools/yarn' + // Every project that applies the Node plugin keeps its toolchain in /tools + ['api-catalog-ui', 'zowe-cli-id-federation-plugin', + 'onboarding-enabler-nodejs', 'onboarding-enabler-nodejs-sample-app'].each { name -> + delete "$name/tools/nodejs", "$name/tools/npm", "$name/tools/yarn" + } } } @@ -359,6 +382,121 @@ task runChaoticHATests(dependsOn: ":integration-tests:runChaoticHATests") { clean.dependsOn nodejsClean +tasks.register('generateKeystores', Exec) { + group = 'build' + description = 'Generate TLS keystores for local development and testing' + workingDir = rootProject.projectDir + if (System.getProperty('os.name').toLowerCase().contains('win')) { + commandLine 'cmd', '/c', 'bash scripts/generate-keystores.sh' + } else { + commandLine 'bash', 'scripts/generate-keystores.sh' + } + inputs.file(layout.projectDirectory.file('scripts/generate-keystores.sh')) + outputs.dir(layout.projectDirectory.dir('keystore')) + onlyIf { + if (project.hasProperty('skipKeystoreGeneration')) { + logger.lifecycle('Keystore generation skipped: skipKeystoreGeneration property is set') + return false + } + // Check for a representative set rather than "any *.p12 exists": a partial tree + // (interrupted run, incomplete CI artifact) must regenerate, not silently skip. + def required = [ + 'keystore/localhost/localhost.keystore.p12', + 'keystore/localhost/localhost.truststore.p12', + 'keystore/localhost/nonlocalhost.keystore.p12', + 'keystore/docker/all-services.keystore.p12', + 'keystore/client_cert/client-certs.p12', + 'zaas-client/src/test/resources/localhost.keystore.p12', + 'common-service-core/src/test/resources/jwt-public-key.pub' + ] + def missing = required.findAll { !file(it).exists() } + + // Whether the existing tree came from the script as it stands now. Gradle's own + // up-to-date check cannot answer this: it needs execution history, which a fresh + // clone and a CI job that unpacked the keystore artifact both lack — so a changed + // script would otherwise never regenerate anything on a developer machine that + // already has keystores. + def script = file('scripts/generate-keystores.sh') + def stamp = file('keystore/generation.stamp') + def expectedStamp = java.security.MessageDigest.getInstance('SHA-256') + .digest(script.bytes).encodeHex().toString() + def stale = !stamp.exists() || stamp.text.trim() != expectedStamp + + if (missing.isEmpty() && !stale) { + logger.lifecycle('Keystore generation skipped: keystores are present and up to date') + return false + } + + def opensslAvailable = { -> + try { + def proc = 'openssl version'.execute() + proc.waitFor() + return proc.exitValue() == 0 + } catch (IOException ignored) { + return false + } + } + + // Without openssl nothing can be generated. Carry on with a stale-but-complete + // tree, but never pretend a missing one is fine — let the script report the + // missing prerequisite instead of failing later as an unexplained TLS error. + if (!opensslAvailable() && missing.isEmpty()) { + logger.warn('WARNING: keystores were generated by an older revision of ' + + 'scripts/generate-keystores.sh, but openssl is not available to regenerate them') + return false + } + + if (!missing.isEmpty()) { + logger.lifecycle("Generating keystores: missing ${missing.size()} of ${required.size()} expected files") + } else { + logger.lifecycle('Generating keystores: scripts/generate-keystores.sh changed since they were last generated') + } + true + } +} + +// The generated test fixtures under zaas-client/src/test/resources and +// common-service-core/src/test/resources are produced by generate-keystores.sh itself. +// They are deliberately NOT modelled as Gradle task outputs: doing so would make those +// source directories task outputs, and every task that reads them (checkLicenseTest, +// processTestResources, ...) would need an explicit ordering. Licence checking has +// nothing to do with TLS material and must not wait on it. +// +// Keystores are TLS material needed to RUN the services — locally, under test, or baked +// into a container image. Nothing else should wait on them: compiling, licence checking, +// javadoc, jars, packaging and publishing all work fine without any TLS material. +allprojects { + // Tests start real services over TLS. 21 of the ~25 Java modules read keystore + // material from their tests, so this is hooked wholesale rather than allowlisted. + tasks.withType(Test).configureEach { + dependsOn ':generateKeystores' + } + + tasks.matching { + // bootRun — runs a service locally + // jib* — gradle/jib.gradle puts ../keystore in jib.extraDirectories.paths, + // so the keystore is baked into the image + // build — the documented entry point: after it the repo must be runnable, + // including when tests are skipped (`build -x test`) + it.name in ['bootRun', 'jib', 'jibDockerBuild', 'jibBuildTar', 'build'] + }.configureEach { + dependsOn ':generateKeystores' + } +} +// +// In CI the script does not run in downstream jobs, so those two fixtures travel in the +// keystore artifact — see the Upload keystores step in integration-tests.yml. +// +// processTestResources does need them: common-service-core loads jwt-public-key.pub from +// the classpath, so it must be on disk before the resources are copied into build/. +['zaas-client', 'common-service-core'].each { name -> + project(":$name") { + tasks.named('processTestResources') { + dependsOn ':generateKeystores' + } + } +} + publishAllVersions.dependsOn publishZoweServerArtifacts publishAllSDKVersions.dependsOn publishZoweServerArtifacts diff --git a/common-service-core/src/test/resources/jwt-public-key.pub b/common-service-core/src/test/resources/jwt-public-key.pub deleted file mode 100644 index f378ae1629..0000000000 --- a/common-service-core/src/test/resources/jwt-public-key.pub +++ /dev/null @@ -1 +0,0 @@ -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjo7rxDzO51tfSmqahMbY6lsXLO+/tXYk1ZcIufsh5L+UMs5StHlfSglbiRgWhfdJDTZb9R760klXL7QRYwBcYn3yhdYTsTB0+RJddPlTQzxAx45xV7b+fCtsQqBFZk5aes/TduyHCHXQRl+iLos13isrl5LSB66ohKxMtflPBeqTM/ptNBbq72XqFCQIZClClvMMYnxrW2FNfftxpLQbeFu3KN/8V4gcQoSUvE8YU8PYbVUnuhURActywrxHpke5q/tYQR8iDb6D1ZwLU8+/rTrnPbZq+O2DP7vRyBP9pHS/WNSxY1sTnz7gQ2OlUL+BEQLgRXRPc5ev1kwn0kVd8QIDAQAB diff --git a/gateway-service/src/test/java/org/zowe/apiml/gateway/config/ConnectionsConfigTest.java b/gateway-service/src/test/java/org/zowe/apiml/gateway/config/ConnectionsConfigTest.java index e406d82872..16e1df073c 100644 --- a/gateway-service/src/test/java/org/zowe/apiml/gateway/config/ConnectionsConfigTest.java +++ b/gateway-service/src/test/java/org/zowe/apiml/gateway/config/ConnectionsConfigTest.java @@ -127,7 +127,10 @@ void thenCreateIt() { @Nested @SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, - properties = {"management.port=-1"}, + properties = { + "management.port=-1", + "apiml.enabled=false" + }, classes = {GatewayServiceApplication.class, ConnectionsConfigTest.SslDetectorConfig.class} ) @ActiveProfiles("test") diff --git a/gradle/versions.gradle b/gradle/versions.gradle index 89377365a6..42aa4d03b4 100644 --- a/gradle/versions.gradle +++ b/gradle/versions.gradle @@ -1,9 +1,10 @@ dependencyResolutionManagement { versionCatalogs { libs { - // for node projects - version('projectNode', '24.10.0') - version('projectNpm', '10.9.0') + // for node projects — keep in sync with .github/actions/setup/action.yml + // and with the engines of onboarding-enabler-nodejs/package.json + version('projectNode', '24.18.1') + version('projectNpm', '10.9.9') // keep in sync with .github/actions/setup/action.yml version('springBoot', '3.5.16') version('springBootGraphQl', '3.5.16') diff --git a/keystore/README.md b/keystore/README.md index 3c79bd14e0..3ddf41a732 100644 --- a/keystore/README.md +++ b/keystore/README.md @@ -1,48 +1,71 @@ # TLS Certificates for localhost -This README describes how to generate certificates for default local configuration. +TLS certificates are signed by a local certificate authority (CA) that is trusted by the +HTTPS clients in integration tests. The root certificate of the local CA can also be +imported to your browser. -Such certificates can also be used for integration tests. +**None of this material is committed to the repository.** It is generated locally and +ignored by git. -TLS certificates are signed by a local certificate authority (CA) that is created as part of steps outlined in this topic and trusted by HTTPS clients in integration tests. +## Generating the key stores -The root certificate of the local CA can also be imported to your browser. +```shell +./gradlew generateKeystores # or: ./scripts/generate-keystores.sh +``` + +The Gradle build runs this automatically before anything that needs TLS material — tests, +`bootRun`, `jib`, `build` — and skips it when the tree is already present and was produced +by the current revision of the script. Run it explicitly after a fresh clone if you intend +to run individual tests from an IDE. `openssl` and `keytool` must be on the `PATH`; on +macOS the system LibreSSL works, as does Homebrew's OpenSSL. + +Besides the tree described below, the script produces two generated test fixtures: +`zaas-client/src/test/resources/localhost.*store.p12` and +`common-service-core/src/test/resources/jwt-public-key.pub`. -You can use the provided key store and trust store, or create your own version of the key stores and local CA. +`keystore/generation.stamp` records which revision of the script produced the tree; delete +it (or the key stores) to force regeneration. -The last section of this README describes how to import and trust the local CA certificate on your system. +### Trusting additional certificate authorities + +Every generated trust store trusts the local CA plus a small set of public roots. To trust +something else — a corporate root needed to reach an internal z/OSMF or OIDC provider — +drop the certificate into `keystore/extra_ca/` as `.pem`, `.cer` or `.crt` and re-run the +script. That directory is not cleaned between runs and nothing in it is committed. ## Key stores -* `keystore/local/localhost.keystore.cer` +* `keystore/localhost/localhost.keystore.cer` * convenience * contains the exported server certificate signed by the local CA and private key for the server -* `keystore/local/localhost.keystore.key` +* `keystore/localhost/localhost.keystore.key` * convenience * contains the exported private key -* `keystore/local/localhost.pem` +* `keystore/localhost/localhost.pem` * convenience * contains the exported server certificate in PEM format for use with http clients -* `keystore/local/localhost.keystore.p12` +* `keystore/localhost/localhost.keystore.p12` * password: `password` * used for the HTTPS server(s) * contains the server certificate signed by the local CA and private key for the server -* `keystore/local/localhost.truststore.p12` +* `keystore/localhost/localhost.truststore.p12` * password: `password` * used for HTTPS clients (e.g. integration tests, services using the gateway) * contains the root certificate of the local CA (not the server certificate) -* `keystore/local/localhost2.keystore.p12` +* `keystore/localhost/localhost2.keystore.p12` * password: `password` - * used for tests only, please refer to the particular tests for detils + * used for tests only — signed by a second, unrelated CA, so that it is *not* trusted + by `localhost.truststore.p12` -* `keystore/local/localhost2.truststore.p12` +* `keystore/localhost/localhost2.truststore.p12` * password: `password` - * used for tests only, please refer to the particular tests for detils + * used for tests only — trusts only the second CA, so it does *not* trust + `localhost.keystore.p12` ### Local CA @@ -76,6 +99,10 @@ The following files are used by the NGINX proxy to simulate AT_TLS on the CI ser ## Generate your own certificates for localhost +The steps below are a reference for building a certificate by hand — for example one with +a subject or SAN set that the generator does not produce. They are not needed for the +normal workflow; `./gradlew generateKeystores` covers that. + ### (Optional)Generate certificate authority create private key diff --git a/keystore/client_cert/ca/apiml_ca.p12 b/keystore/client_cert/ca/apiml_ca.p12 deleted file mode 100644 index da507bf023..0000000000 Binary files a/keystore/client_cert/ca/apiml_ca.p12 and /dev/null differ diff --git a/keystore/client_cert/client-certs.p12 b/keystore/client_cert/client-certs.p12 deleted file mode 100644 index ed81104bb8..0000000000 Binary files a/keystore/client_cert/client-certs.p12 and /dev/null differ diff --git a/keystore/docker/all-services.cer b/keystore/docker/all-services.cer deleted file mode 100644 index dd7708ef3a..0000000000 --- a/keystore/docker/all-services.cer +++ /dev/null @@ -1,59 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIGLDCCBRSgAwIBAgIUMya5ei8ObPHTBvmE4YMW5YnAXUcwDQYJKoZIhvcNAQEL -BQAwgZ4xCzAJBgNVBAYTAkNaMQ8wDQYDVQQIEwZQcmFndWUxDzANBgNVBAcTBlBy -YWd1ZTEUMBIGA1UEChMLWm93ZSBTYW1wbGUxHDAaBgNVBAsTE0FQSSBNZWRpYXRp -b24gTGF5ZXIxOTA3BgNVBAMTMFpvd2UgRGV2ZWxvcG1lbnQgSW5zdGFuY2VzIENl -cnRpZmljYXRlIEF1dGhvcml0eTAeFw0yNjAyMTAxNjQ3NDNaFw0zMTAyMDkxNjQ3 -NDNaMF0xEDAOBgNVBAgMB0N6ZWNoaWExDzANBgNVBAcMBlByYWd1ZTERMA8GA1UE -CgwIQnJvYWRjb20xDDAKBgNVBAsMA01TRDEXMBUGA1UEAwwOWm93ZSBDb21wb25l -bnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx9PMZM2lhfXgoe6Yy -lAtDbKIQuLfb3FA8MdC6GO/lm4KMWUfFvrA/tkPXAEEfulmQwcL0bcX3pg6JSjSy -cNgyoQpn/4shFqasOhggYmyk2XzdA2H5x//aBa1RX9N1u99kiDi1+lYX1J2jAXV5 -q3RelY+dIUHuxY+Mi7lXg3gBbjHW5Nxa2NWZNqeAvBx7dw/TPuZ6rWCGH2MNp0JS -DY5nn9gCOJyWeCsLcxlIp76QIEzS5iLdKh07Oi+a2T5nSP2eV+uFhsbV+2V+93Zh -Bwi+AdVLWP4jJRh85eP/rV+x0be4BT4RDcBybwtcn5FDF/21S4X7C0SD11+FcsnX -FzrbAgMBAAGjggKgMIICnDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw -ggI5BgNVHREEggIwMIICLIIJbG9jYWxob3N0ggkxMjcuMC4wLjGCDHphYXMtc2Vy -dmljZYIOemFhcy1zZXJ2aWNlLTKCFGFwaS1jYXRhbG9nLXNlcnZpY2VzghZhcGkt -Y2F0YWxvZy1zZXJ2aWNlcy0ygg9jYWNoaW5nLXNlcnZpY2WCEWNhY2hpbmctc2Vy -dmljZS0yghFjYWNoaW5nLXNlcnZpY2UtM4IRZGlzY292ZXJ5LXNlcnZpY2WCE2Rp -c2NvdmVyeS1zZXJ2aWNlLTKCE2Rpc2NvdmVyYWJsZS1jbGllbnSCFWRpc2NvdmVy -YWJsZS1jbGllbnQtMYIVZGlzY292ZXJhYmxlLWNsaWVudC0yghVkaXNjb3ZlcmFi -bGUtY2xpZW50LTOCFWRpc2NvdmVyYWJsZS1jbGllbnQtNIIbZGlzY292ZXJhYmxl -LWNsaWVudC11bmtub3dugg1tb2NrLXNlcnZpY2Vzgg9tb2NrLXNlcnZpY2VzLTKC -FW1vY2stc2VydmljZXMtdW5rbm93boINcmV2ZXJzZS1wcm94eYIPZ2F0ZXdheS1z -ZXJ2aWNlghFnYXRld2F5LXNlcnZpY2UtMoIXY2VudHJhbC1nYXRld2F5LXNlcnZp -Y2WCGWNlbnRyYWwtZ2F0ZXdheS1zZXJ2aWNlLTKCBWFwaW1sggdhcGltbC0yggdh -cGltbC0zghFub2RlanMtc2FtcGxlLWFwcIIRcHl0aG9uLXNhbXBsZS1hcHAwHQYD -VR0OBBYEFDos5S4oK5zTvCPBJY9TCNP0BQfzMB8GA1UdIwQYMBaAFCRpLjbYx589 -Li1EfWKwGmQxiLA2MA0GCSqGSIb3DQEBCwUAA4IBAQCqYNPORG322H1PQq65C12c -5Xt4eQOLfq1d+RCiosU2CCGFRFu++sv0fUin/EhYzUd0HaFuNjH+jNlf/2JFjEgl -+Doa4H1h2BKz3BgrJ1ZxJDVbl0H82XsRZ0ePcOVOS8nVOkF9Cgnou9wb9bl22+uH -5CRTm3gDM7AtUnsx/uiycbvRgJSqBXLRR/mEEupJx4ZPt3trCpsd8ewji/OSqkus -Y8pBh/QTbAO23SvDptLrmmqM6kX7FQcALXprUOP1FISDMPSw6L0EwVyb89aPSjS2 -v2xF0bnbX668zcthTpAyg/qw49Cajq/BA5Lhoy7T4U2a0zJbMs2aXrLPiggIQyCD ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIES2Kd2TANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjE5MDcGA1UE -AxMwWm93ZSBEZXZlbG9wbWVudCBJbnN0YW5jZXMgQ2VydGlmaWNhdGUgQXV0aG9y -aXR5MB4XDTIwMTAyMDA3MzkyOVoXDTMwMTAxODA3MzkyOVowgZ4xCzAJBgNVBAYT -AkNaMQ8wDQYDVQQIEwZQcmFndWUxDzANBgNVBAcTBlByYWd1ZTEUMBIGA1UEChML -Wm93ZSBTYW1wbGUxHDAaBgNVBAsTE0FQSSBNZWRpYXRpb24gTGF5ZXIxOTA3BgNV -BAMTMFpvd2UgRGV2ZWxvcG1lbnQgSW5zdGFuY2VzIENlcnRpZmljYXRlIEF1dGhv -cml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANHkJhhd/rrtmm4B -XCU/ZMq/4F8T3QYXGnDfmRLSN2GzGpb1YEK2RaEVBBKh8QI5baiD3vSzhK1VoO3L -qEMOpPxgwoUTz8wDzf4u18i7qSREdSDTJIo9Qj5DT8w4wHpGBpFtNVU/5bTwNAPw -khg5CdRJpiOQV3O4MFmnt94VLcMQnywISja2Mv+RC3eZjr86OepDLpyfi2UuQ/Us -hKvVvUM+Bxcl9TkWzFJ6lqYvVBPo5Epa3v8qIeOfmkOzO8id5LT/AWqgOYUGFhox -4Lsvj8txOc3SYTXbY9IOrKXggX5NwhTW038j+1n1zXlVeAr5xhASymAzwbV/QQ3l -GsWig1ECAwEAAaM/MD0wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAgQwHQYD -VR0OBBYEFCRpLjbYx589Li1EfWKwGmQxiLA2MA0GCSqGSIb3DQEBCwUAA4IBAQCt -0YxLl4u7RZkntKSBjDiQXoFL6xkzvvoEAGtNztCVW78NHgA86MkuWmQ+eBSBxHda -NzjtLHHSwFfzHaaXoc/kNS2iTyHbntKheJ6YHi6mCA71nA5m+AUS3yV+iO5qFusc -jeYXXuwbP06i2v5J/yYtEyEARl2Wo9mOCOTOAl7e+V9qhYgRh1EbWO0pYTeRpya+ -MCHI+xEPSmUaguEtxvGTdtmhDuKuS1Ndo5j72ceevy0uP5el3scsJnB1puGhQCh1 -waG/jp8kndRbB3V3YjIqbA9MxxpMzpiOC5S0uQQ3t2sqV6p4q7Dj5o4GgfDu+RK3 -EDOis6zm74HV4CIcw9Ka ------END CERTIFICATE----- diff --git a/keystore/docker/all-services.ext b/keystore/docker/all-services.ext deleted file mode 100644 index 0b9cfc9526..0000000000 --- a/keystore/docker/all-services.ext +++ /dev/null @@ -1,49 +0,0 @@ -[ req ] -default_bits = 2048 -prompt = no -default_md = sha256 -distinguished_name = dn - -[ v3_req ] -extendedKeyUsage = clientAuth, serverAuth -subjectAltName = @alt_names - -[ dn ] -CN = "CZ" -ST = "Czechia" -L = "Prague" -O = "Broadcom" -OU = "MSD" -CN = "Zowe Component" - -[alt_names] -DNS.1 = localhost -DNS.2 = 127.0.0.1 -DNS.3 = zaas-service -DNS.4 = zaas-service-2 -DNS.5 = api-catalog-services -DNS.6 = api-catalog-services-2 -DNS.7 = caching-service -DNS.8 = caching-service-2 -DNS.9 = caching-service-3 -DNS.10 = discovery-service -DNS.11 = discovery-service-2 -DNS.12 = discoverable-client -DNS.13 = discoverable-client-1 -DNS.14 = discoverable-client-2 -DNS.15 = discoverable-client-3 -DNS.16 = discoverable-client-4 -DNS.17 = discoverable-client-unknown -DNS.18 = mock-services -DNS.19 = mock-services-2 -DNS.20 = mock-services-unknown -DNS.21 = reverse-proxy -DNS.22 = gateway-service -DNS.23 = gateway-service-2 -DNS.24 = central-gateway-service -DNS.25 = central-gateway-service-2 -DNS.26 = apiml -DNS.27 = apiml-2 -DNS.28 = apiml-3 -DNS.29 = nodejs-sample-app -DNS.30 = python-sample-app diff --git a/keystore/docker/all-services.keystore.cer b/keystore/docker/all-services.keystore.cer deleted file mode 100644 index 40bdb4d6fb..0000000000 --- a/keystore/docker/all-services.keystore.cer +++ /dev/null @@ -1,35 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIGLDCCBRSgAwIBAgIUMya5ei8ObPHTBvmE4YMW5YnAXUcwDQYJKoZIhvcNAQEL -BQAwgZ4xCzAJBgNVBAYTAkNaMQ8wDQYDVQQIEwZQcmFndWUxDzANBgNVBAcTBlBy -YWd1ZTEUMBIGA1UEChMLWm93ZSBTYW1wbGUxHDAaBgNVBAsTE0FQSSBNZWRpYXRp -b24gTGF5ZXIxOTA3BgNVBAMTMFpvd2UgRGV2ZWxvcG1lbnQgSW5zdGFuY2VzIENl -cnRpZmljYXRlIEF1dGhvcml0eTAeFw0yNjAyMTAxNjQ3NDNaFw0zMTAyMDkxNjQ3 -NDNaMF0xEDAOBgNVBAgMB0N6ZWNoaWExDzANBgNVBAcMBlByYWd1ZTERMA8GA1UE -CgwIQnJvYWRjb20xDDAKBgNVBAsMA01TRDEXMBUGA1UEAwwOWm93ZSBDb21wb25l -bnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx9PMZM2lhfXgoe6Yy -lAtDbKIQuLfb3FA8MdC6GO/lm4KMWUfFvrA/tkPXAEEfulmQwcL0bcX3pg6JSjSy -cNgyoQpn/4shFqasOhggYmyk2XzdA2H5x//aBa1RX9N1u99kiDi1+lYX1J2jAXV5 -q3RelY+dIUHuxY+Mi7lXg3gBbjHW5Nxa2NWZNqeAvBx7dw/TPuZ6rWCGH2MNp0JS -DY5nn9gCOJyWeCsLcxlIp76QIEzS5iLdKh07Oi+a2T5nSP2eV+uFhsbV+2V+93Zh -Bwi+AdVLWP4jJRh85eP/rV+x0be4BT4RDcBybwtcn5FDF/21S4X7C0SD11+FcsnX -FzrbAgMBAAGjggKgMIICnDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw -ggI5BgNVHREEggIwMIICLIIJbG9jYWxob3N0ggkxMjcuMC4wLjGCDHphYXMtc2Vy -dmljZYIOemFhcy1zZXJ2aWNlLTKCFGFwaS1jYXRhbG9nLXNlcnZpY2VzghZhcGkt -Y2F0YWxvZy1zZXJ2aWNlcy0ygg9jYWNoaW5nLXNlcnZpY2WCEWNhY2hpbmctc2Vy -dmljZS0yghFjYWNoaW5nLXNlcnZpY2UtM4IRZGlzY292ZXJ5LXNlcnZpY2WCE2Rp -c2NvdmVyeS1zZXJ2aWNlLTKCE2Rpc2NvdmVyYWJsZS1jbGllbnSCFWRpc2NvdmVy -YWJsZS1jbGllbnQtMYIVZGlzY292ZXJhYmxlLWNsaWVudC0yghVkaXNjb3ZlcmFi -bGUtY2xpZW50LTOCFWRpc2NvdmVyYWJsZS1jbGllbnQtNIIbZGlzY292ZXJhYmxl -LWNsaWVudC11bmtub3dugg1tb2NrLXNlcnZpY2Vzgg9tb2NrLXNlcnZpY2VzLTKC -FW1vY2stc2VydmljZXMtdW5rbm93boINcmV2ZXJzZS1wcm94eYIPZ2F0ZXdheS1z -ZXJ2aWNlghFnYXRld2F5LXNlcnZpY2UtMoIXY2VudHJhbC1nYXRld2F5LXNlcnZp -Y2WCGWNlbnRyYWwtZ2F0ZXdheS1zZXJ2aWNlLTKCBWFwaW1sggdhcGltbC0yggdh -cGltbC0zghFub2RlanMtc2FtcGxlLWFwcIIRcHl0aG9uLXNhbXBsZS1hcHAwHQYD -VR0OBBYEFDos5S4oK5zTvCPBJY9TCNP0BQfzMB8GA1UdIwQYMBaAFCRpLjbYx589 -Li1EfWKwGmQxiLA2MA0GCSqGSIb3DQEBCwUAA4IBAQCqYNPORG322H1PQq65C12c -5Xt4eQOLfq1d+RCiosU2CCGFRFu++sv0fUin/EhYzUd0HaFuNjH+jNlf/2JFjEgl -+Doa4H1h2BKz3BgrJ1ZxJDVbl0H82XsRZ0ePcOVOS8nVOkF9Cgnou9wb9bl22+uH -5CRTm3gDM7AtUnsx/uiycbvRgJSqBXLRR/mEEupJx4ZPt3trCpsd8ewji/OSqkus -Y8pBh/QTbAO23SvDptLrmmqM6kX7FQcALXprUOP1FISDMPSw6L0EwVyb89aPSjS2 -v2xF0bnbX668zcthTpAyg/qw49Cajq/BA5Lhoy7T4U2a0zJbMs2aXrLPiggIQyCD ------END CERTIFICATE----- diff --git a/keystore/docker/all-services.keystore.key b/keystore/docker/all-services.keystore.key deleted file mode 100644 index d71364b80a..0000000000 --- a/keystore/docker/all-services.keystore.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCx9PMZM2lhfXgo -e6YylAtDbKIQuLfb3FA8MdC6GO/lm4KMWUfFvrA/tkPXAEEfulmQwcL0bcX3pg6J -SjSycNgyoQpn/4shFqasOhggYmyk2XzdA2H5x//aBa1RX9N1u99kiDi1+lYX1J2j -AXV5q3RelY+dIUHuxY+Mi7lXg3gBbjHW5Nxa2NWZNqeAvBx7dw/TPuZ6rWCGH2MN -p0JSDY5nn9gCOJyWeCsLcxlIp76QIEzS5iLdKh07Oi+a2T5nSP2eV+uFhsbV+2V+ -93ZhBwi+AdVLWP4jJRh85eP/rV+x0be4BT4RDcBybwtcn5FDF/21S4X7C0SD11+F -csnXFzrbAgMBAAECggEAKo4g9A3PTXjrmwK2o7GzX9RCjS0fCnyM01g2Scpc09N0 -TIutFiSbkSDM6EUvTZ8KfAtZy4nUpXwYTcxo/aLukGziSCxb4PXBtb3Oty/SOzmn -GlMMwuaI0GI7KBJ6RtU+fpP0u8+5dslpSOm4ZfgSQ+wQA8tIMQkdYsam876EnBKO -zRQT8F+UUaJlDSTLOqQLQgGvOxczNk4hUo2S3ZQdb9vqv3afiWhMFGuVWOe4WECj -uzwmhCC8X/LvMY597aK+PF7WvMxnVvQqOmbYbuZ4iDRubguT4wqHrM9EPJpnxx6Z -VbY12NOxPBO1Cy+srnZRtOkACqIBWW5Jm7asTmoHwQKBgQD15rOHVwHmgieqgddE -b7Dr1yl1bCf/TxLclHTt8u8MoWSeEOvLsIINGezRIY9nZDQOI2++H6V8b4trpn62 -xZGp3GLWhnmBlgJuhrfRRbIFDbnl3Wlj7ImgtOaX1WQziTZgX3ZHq3Z8pUOtCk+J -at6ITZP17T4xVJSXwjLBfXoEhwKBgQC5Q+kuQuZoeJDnkmZ4qNym034YYN/WWBa5 -bVKmQXjBvfn5l+SuZgeJzqOGacoLHeySYyXd4AePZ3aWZ6Z2cgHhsH6BZn+MBeTS -JEUWT8CSitNkWLuw+VhBKxG0xpmZYZv8twv2zfpqnenhR6aK0LoLPbmSm69YhNyK -LiQRJzMADQKBgQDTWCg/Dznz6zO6aYQiLrjpynC4mm+6EDVO3k2tYZmxylkXPcXb -uGXeasTObcC6BTZ0XGKjDsIFtD0pFd1cq2vpiSBt7wApr0uBwUnllLhPfZ+j/+uf -1WHofPKf1ukbHjhdFk8rhCP/N292HyGDIxYGIl8kBHbqoR5hXKiRAo5HqwKBgGLa -apyFk92gn2kAw+6T45CcfsbRQf5j6FQukhAmFSIDlVNpidrIlDMi8DwzTFxcLjP5 -9WWLOV16Tlt4mOjQclKTUx0GrP3w0ySRt89s5IsMyjjb4+JNWZsEOSFlauXdoFba -8OZTB9BFzFqpWaLuNqby24bvzUMFOYv9jL8eVGctAoGAeaf0V2k12JO5gK3DehHv -9F4cIX09ylNHEPhlbQPO5VCnLjtQQjaP6GpBdLZs1KNEporB+RqoW+PQYAGRkPAp -DtQ0dxoABH48JsOWSS7+Gx+OnxRuAegXZnqAGSzsoTJ+MY71Ze/nWA1DiOAwYI9s -DRAcn43CSNmd0FWKubLrcVo= ------END PRIVATE KEY----- diff --git a/keystore/docker/all-services.keystore.p12 b/keystore/docker/all-services.keystore.p12 deleted file mode 100644 index 9e37992f50..0000000000 Binary files a/keystore/docker/all-services.keystore.p12 and /dev/null differ diff --git a/keystore/docker/all-services.pem b/keystore/docker/all-services.pem deleted file mode 100644 index 9c39116726..0000000000 --- a/keystore/docker/all-services.pem +++ /dev/null @@ -1,87 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCx9PMZM2lhfXgo -e6YylAtDbKIQuLfb3FA8MdC6GO/lm4KMWUfFvrA/tkPXAEEfulmQwcL0bcX3pg6J -SjSycNgyoQpn/4shFqasOhggYmyk2XzdA2H5x//aBa1RX9N1u99kiDi1+lYX1J2j -AXV5q3RelY+dIUHuxY+Mi7lXg3gBbjHW5Nxa2NWZNqeAvBx7dw/TPuZ6rWCGH2MN -p0JSDY5nn9gCOJyWeCsLcxlIp76QIEzS5iLdKh07Oi+a2T5nSP2eV+uFhsbV+2V+ -93ZhBwi+AdVLWP4jJRh85eP/rV+x0be4BT4RDcBybwtcn5FDF/21S4X7C0SD11+F -csnXFzrbAgMBAAECggEAKo4g9A3PTXjrmwK2o7GzX9RCjS0fCnyM01g2Scpc09N0 -TIutFiSbkSDM6EUvTZ8KfAtZy4nUpXwYTcxo/aLukGziSCxb4PXBtb3Oty/SOzmn -GlMMwuaI0GI7KBJ6RtU+fpP0u8+5dslpSOm4ZfgSQ+wQA8tIMQkdYsam876EnBKO -zRQT8F+UUaJlDSTLOqQLQgGvOxczNk4hUo2S3ZQdb9vqv3afiWhMFGuVWOe4WECj -uzwmhCC8X/LvMY597aK+PF7WvMxnVvQqOmbYbuZ4iDRubguT4wqHrM9EPJpnxx6Z -VbY12NOxPBO1Cy+srnZRtOkACqIBWW5Jm7asTmoHwQKBgQD15rOHVwHmgieqgddE -b7Dr1yl1bCf/TxLclHTt8u8MoWSeEOvLsIINGezRIY9nZDQOI2++H6V8b4trpn62 -xZGp3GLWhnmBlgJuhrfRRbIFDbnl3Wlj7ImgtOaX1WQziTZgX3ZHq3Z8pUOtCk+J -at6ITZP17T4xVJSXwjLBfXoEhwKBgQC5Q+kuQuZoeJDnkmZ4qNym034YYN/WWBa5 -bVKmQXjBvfn5l+SuZgeJzqOGacoLHeySYyXd4AePZ3aWZ6Z2cgHhsH6BZn+MBeTS -JEUWT8CSitNkWLuw+VhBKxG0xpmZYZv8twv2zfpqnenhR6aK0LoLPbmSm69YhNyK -LiQRJzMADQKBgQDTWCg/Dznz6zO6aYQiLrjpynC4mm+6EDVO3k2tYZmxylkXPcXb -uGXeasTObcC6BTZ0XGKjDsIFtD0pFd1cq2vpiSBt7wApr0uBwUnllLhPfZ+j/+uf -1WHofPKf1ukbHjhdFk8rhCP/N292HyGDIxYGIl8kBHbqoR5hXKiRAo5HqwKBgGLa -apyFk92gn2kAw+6T45CcfsbRQf5j6FQukhAmFSIDlVNpidrIlDMi8DwzTFxcLjP5 -9WWLOV16Tlt4mOjQclKTUx0GrP3w0ySRt89s5IsMyjjb4+JNWZsEOSFlauXdoFba -8OZTB9BFzFqpWaLuNqby24bvzUMFOYv9jL8eVGctAoGAeaf0V2k12JO5gK3DehHv -9F4cIX09ylNHEPhlbQPO5VCnLjtQQjaP6GpBdLZs1KNEporB+RqoW+PQYAGRkPAp -DtQ0dxoABH48JsOWSS7+Gx+OnxRuAegXZnqAGSzsoTJ+MY71Ze/nWA1DiOAwYI9s -DRAcn43CSNmd0FWKubLrcVo= ------END PRIVATE KEY----- ------BEGIN CERTIFICATE----- -MIIGLDCCBRSgAwIBAgIUMya5ei8ObPHTBvmE4YMW5YnAXUcwDQYJKoZIhvcNAQEL -BQAwgZ4xCzAJBgNVBAYTAkNaMQ8wDQYDVQQIEwZQcmFndWUxDzANBgNVBAcTBlBy -YWd1ZTEUMBIGA1UEChMLWm93ZSBTYW1wbGUxHDAaBgNVBAsTE0FQSSBNZWRpYXRp -b24gTGF5ZXIxOTA3BgNVBAMTMFpvd2UgRGV2ZWxvcG1lbnQgSW5zdGFuY2VzIENl -cnRpZmljYXRlIEF1dGhvcml0eTAeFw0yNjAyMTAxNjQ3NDNaFw0zMTAyMDkxNjQ3 -NDNaMF0xEDAOBgNVBAgMB0N6ZWNoaWExDzANBgNVBAcMBlByYWd1ZTERMA8GA1UE -CgwIQnJvYWRjb20xDDAKBgNVBAsMA01TRDEXMBUGA1UEAwwOWm93ZSBDb21wb25l -bnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx9PMZM2lhfXgoe6Yy -lAtDbKIQuLfb3FA8MdC6GO/lm4KMWUfFvrA/tkPXAEEfulmQwcL0bcX3pg6JSjSy -cNgyoQpn/4shFqasOhggYmyk2XzdA2H5x//aBa1RX9N1u99kiDi1+lYX1J2jAXV5 -q3RelY+dIUHuxY+Mi7lXg3gBbjHW5Nxa2NWZNqeAvBx7dw/TPuZ6rWCGH2MNp0JS -DY5nn9gCOJyWeCsLcxlIp76QIEzS5iLdKh07Oi+a2T5nSP2eV+uFhsbV+2V+93Zh -Bwi+AdVLWP4jJRh85eP/rV+x0be4BT4RDcBybwtcn5FDF/21S4X7C0SD11+FcsnX -FzrbAgMBAAGjggKgMIICnDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw -ggI5BgNVHREEggIwMIICLIIJbG9jYWxob3N0ggkxMjcuMC4wLjGCDHphYXMtc2Vy -dmljZYIOemFhcy1zZXJ2aWNlLTKCFGFwaS1jYXRhbG9nLXNlcnZpY2VzghZhcGkt -Y2F0YWxvZy1zZXJ2aWNlcy0ygg9jYWNoaW5nLXNlcnZpY2WCEWNhY2hpbmctc2Vy -dmljZS0yghFjYWNoaW5nLXNlcnZpY2UtM4IRZGlzY292ZXJ5LXNlcnZpY2WCE2Rp -c2NvdmVyeS1zZXJ2aWNlLTKCE2Rpc2NvdmVyYWJsZS1jbGllbnSCFWRpc2NvdmVy -YWJsZS1jbGllbnQtMYIVZGlzY292ZXJhYmxlLWNsaWVudC0yghVkaXNjb3ZlcmFi -bGUtY2xpZW50LTOCFWRpc2NvdmVyYWJsZS1jbGllbnQtNIIbZGlzY292ZXJhYmxl -LWNsaWVudC11bmtub3dugg1tb2NrLXNlcnZpY2Vzgg9tb2NrLXNlcnZpY2VzLTKC -FW1vY2stc2VydmljZXMtdW5rbm93boINcmV2ZXJzZS1wcm94eYIPZ2F0ZXdheS1z -ZXJ2aWNlghFnYXRld2F5LXNlcnZpY2UtMoIXY2VudHJhbC1nYXRld2F5LXNlcnZp -Y2WCGWNlbnRyYWwtZ2F0ZXdheS1zZXJ2aWNlLTKCBWFwaW1sggdhcGltbC0yggdh -cGltbC0zghFub2RlanMtc2FtcGxlLWFwcIIRcHl0aG9uLXNhbXBsZS1hcHAwHQYD -VR0OBBYEFDos5S4oK5zTvCPBJY9TCNP0BQfzMB8GA1UdIwQYMBaAFCRpLjbYx589 -Li1EfWKwGmQxiLA2MA0GCSqGSIb3DQEBCwUAA4IBAQCqYNPORG322H1PQq65C12c -5Xt4eQOLfq1d+RCiosU2CCGFRFu++sv0fUin/EhYzUd0HaFuNjH+jNlf/2JFjEgl -+Doa4H1h2BKz3BgrJ1ZxJDVbl0H82XsRZ0ePcOVOS8nVOkF9Cgnou9wb9bl22+uH -5CRTm3gDM7AtUnsx/uiycbvRgJSqBXLRR/mEEupJx4ZPt3trCpsd8ewji/OSqkus -Y8pBh/QTbAO23SvDptLrmmqM6kX7FQcALXprUOP1FISDMPSw6L0EwVyb89aPSjS2 -v2xF0bnbX668zcthTpAyg/qw49Cajq/BA5Lhoy7T4U2a0zJbMs2aXrLPiggIQyCD ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIES2Kd2TANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjE5MDcGA1UE -AxMwWm93ZSBEZXZlbG9wbWVudCBJbnN0YW5jZXMgQ2VydGlmaWNhdGUgQXV0aG9y -aXR5MB4XDTIwMTAyMDA3MzkyOVoXDTMwMTAxODA3MzkyOVowgZ4xCzAJBgNVBAYT -AkNaMQ8wDQYDVQQIEwZQcmFndWUxDzANBgNVBAcTBlByYWd1ZTEUMBIGA1UEChML -Wm93ZSBTYW1wbGUxHDAaBgNVBAsTE0FQSSBNZWRpYXRpb24gTGF5ZXIxOTA3BgNV -BAMTMFpvd2UgRGV2ZWxvcG1lbnQgSW5zdGFuY2VzIENlcnRpZmljYXRlIEF1dGhv -cml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANHkJhhd/rrtmm4B -XCU/ZMq/4F8T3QYXGnDfmRLSN2GzGpb1YEK2RaEVBBKh8QI5baiD3vSzhK1VoO3L -qEMOpPxgwoUTz8wDzf4u18i7qSREdSDTJIo9Qj5DT8w4wHpGBpFtNVU/5bTwNAPw -khg5CdRJpiOQV3O4MFmnt94VLcMQnywISja2Mv+RC3eZjr86OepDLpyfi2UuQ/Us -hKvVvUM+Bxcl9TkWzFJ6lqYvVBPo5Epa3v8qIeOfmkOzO8id5LT/AWqgOYUGFhox -4Lsvj8txOc3SYTXbY9IOrKXggX5NwhTW038j+1n1zXlVeAr5xhASymAzwbV/QQ3l -GsWig1ECAwEAAaM/MD0wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAgQwHQYD -VR0OBBYEFCRpLjbYx589Li1EfWKwGmQxiLA2MA0GCSqGSIb3DQEBCwUAA4IBAQCt -0YxLl4u7RZkntKSBjDiQXoFL6xkzvvoEAGtNztCVW78NHgA86MkuWmQ+eBSBxHda -NzjtLHHSwFfzHaaXoc/kNS2iTyHbntKheJ6YHi6mCA71nA5m+AUS3yV+iO5qFusc -jeYXXuwbP06i2v5J/yYtEyEARl2Wo9mOCOTOAl7e+V9qhYgRh1EbWO0pYTeRpya+ -MCHI+xEPSmUaguEtxvGTdtmhDuKuS1Ndo5j72ceevy0uP5el3scsJnB1puGhQCh1 -waG/jp8kndRbB3V3YjIqbA9MxxpMzpiOC5S0uQQ3t2sqV6p4q7Dj5o4GgfDu+RK3 -EDOis6zm74HV4CIcw9Ka ------END CERTIFICATE----- diff --git a/keystore/docker/all-services.truststore.p12 b/keystore/docker/all-services.truststore.p12 deleted file mode 100644 index bef040c846..0000000000 Binary files a/keystore/docker/all-services.truststore.p12 and /dev/null differ diff --git a/keystore/docker/client-cert.p12 b/keystore/docker/client-cert.p12 deleted file mode 100644 index 97df6f05a1..0000000000 Binary files a/keystore/docker/client-cert.p12 and /dev/null differ diff --git a/keystore/docker/generate_cert.sh b/keystore/docker/generate_cert.sh deleted file mode 100755 index 43f4b52e3c..0000000000 --- a/keystore/docker/generate_cert.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh - -set -e - -if [ $# != 2 ]; then - echo "Arguments were not provided or they are invalid:" - echo " 1. argument: " - echo " 2. argument: " - exit -1 -fi - -PASSWORD=${1} -PASSWORD_CA=${2} - -echo "Generating key pair" -openssl genrsa -out localhost.key 2048 - -echo "Generating CSR" -openssl req -newkey rsa:2048 -nodes -keyout localhost.key -sha256 -out localhost.csr -outform PEM -config all-services.ext -extensions v3_req -rm all-services.keystore.key -cp localhost.key all-services.keystore.key - -echo "Export local CA keys" -keytool -exportcert -keystore ../local_ca/localca.keystore.p12 -alias localca -storepass ${PASSWORD_CA} -rfc -file local_ca.pem -openssl pkcs12 -in ../local_ca/localca.keystore.p12 -nodes -nocerts -out local_ca.key -legacy -password pass:${PASSWORD_CA} - -echo "Signing CSR" -openssl x509 -req -in localhost.csr -CA local_ca.pem -CAkey local_ca.key -CAcreateserial -out localhost.crt -days 1825 -sha256 -extfile all-services.ext -extensions v3_req -rm all-services.keystore.cer -cp localhost.crt all-services.keystore.cer -cat local_ca.pem >> localhost.crt -rm all-services.pem -cat localhost.key > all-services.pem -cat localhost.crt >> all-services.pem -rm all-services.cer -cp localhost.crt all-services.cer - -echo "Creating new keystore" -openssl pkcs12 -export -out all-services.keystore.p12 -in localhost.crt -inkey localhost.key -name localhost -macalg SHA256 -password pass:${PASSWORD} - -echo "Add local CA into keystore because of issue https://github.com/zowe/api-layer/issues/4420" -keytool -importcert -keystore all-services.keystore.p12 -alias local_ca -file local_ca.pem -noprompt -storepass ${PASSWORD} - -echo "Cleaning folder" -rm localhost.crt localhost.key local_ca.srl localhost.csr local_ca.key local_ca.pem - diff --git a/keystore/docker/server-only.p12 b/keystore/docker/server-only.p12 deleted file mode 100644 index 75fd01c698..0000000000 Binary files a/keystore/docker/server-only.p12 and /dev/null differ diff --git a/keystore/local_ca/localca.cer b/keystore/local_ca/localca.cer deleted file mode 100644 index ed0a0eeea3..0000000000 --- a/keystore/local_ca/localca.cer +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIES2Kd2TANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjE5MDcGA1UE -AxMwWm93ZSBEZXZlbG9wbWVudCBJbnN0YW5jZXMgQ2VydGlmaWNhdGUgQXV0aG9y -aXR5MB4XDTIwMTAyMDA3MzkyOVoXDTMwMTAxODA3MzkyOVowgZ4xCzAJBgNVBAYT -AkNaMQ8wDQYDVQQIEwZQcmFndWUxDzANBgNVBAcTBlByYWd1ZTEUMBIGA1UEChML -Wm93ZSBTYW1wbGUxHDAaBgNVBAsTE0FQSSBNZWRpYXRpb24gTGF5ZXIxOTA3BgNV -BAMTMFpvd2UgRGV2ZWxvcG1lbnQgSW5zdGFuY2VzIENlcnRpZmljYXRlIEF1dGhv -cml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANHkJhhd/rrtmm4B -XCU/ZMq/4F8T3QYXGnDfmRLSN2GzGpb1YEK2RaEVBBKh8QI5baiD3vSzhK1VoO3L -qEMOpPxgwoUTz8wDzf4u18i7qSREdSDTJIo9Qj5DT8w4wHpGBpFtNVU/5bTwNAPw -khg5CdRJpiOQV3O4MFmnt94VLcMQnywISja2Mv+RC3eZjr86OepDLpyfi2UuQ/Us -hKvVvUM+Bxcl9TkWzFJ6lqYvVBPo5Epa3v8qIeOfmkOzO8id5LT/AWqgOYUGFhox -4Lsvj8txOc3SYTXbY9IOrKXggX5NwhTW038j+1n1zXlVeAr5xhASymAzwbV/QQ3l -GsWig1ECAwEAAaM/MD0wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAgQwHQYD -VR0OBBYEFCRpLjbYx589Li1EfWKwGmQxiLA2MA0GCSqGSIb3DQEBCwUAA4IBAQCt -0YxLl4u7RZkntKSBjDiQXoFL6xkzvvoEAGtNztCVW78NHgA86MkuWmQ+eBSBxHda -NzjtLHHSwFfzHaaXoc/kNS2iTyHbntKheJ6YHi6mCA71nA5m+AUS3yV+iO5qFusc -jeYXXuwbP06i2v5J/yYtEyEARl2Wo9mOCOTOAl7e+V9qhYgRh1EbWO0pYTeRpya+ -MCHI+xEPSmUaguEtxvGTdtmhDuKuS1Ndo5j72ceevy0uP5el3scsJnB1puGhQCh1 -waG/jp8kndRbB3V3YjIqbA9MxxpMzpiOC5S0uQQ3t2sqV6p4q7Dj5o4GgfDu+RK3 -EDOis6zm74HV4CIcw9Ka ------END CERTIFICATE----- diff --git a/keystore/local_ca/localca.keystore.p12 b/keystore/local_ca/localca.keystore.p12 deleted file mode 100644 index b8c7269aab..0000000000 Binary files a/keystore/local_ca/localca.keystore.p12 and /dev/null differ diff --git a/keystore/local_ca/zowe-dev-ca.cer b/keystore/local_ca/zowe-dev-ca.cer deleted file mode 100644 index ebd7836405..0000000000 --- a/keystore/local_ca/zowe-dev-ca.cer +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIEdkRICDANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjE5MDcGA1UE -AxMwWm93ZSBEZXZlbG9wbWVudCBJbnN0YW5jZXMgQ2VydGlmaWNhdGUgQXV0aG9y -aXR5MB4XDTE5MDExMTEyMTIwNVoXDTI5MDEwODEyMTIwNVowgZ4xCzAJBgNVBAYT -AkNaMQ8wDQYDVQQIEwZQcmFndWUxDzANBgNVBAcTBlByYWd1ZTEUMBIGA1UEChML -Wm93ZSBTYW1wbGUxHDAaBgNVBAsTE0FQSSBNZWRpYXRpb24gTGF5ZXIxOTA3BgNV -BAMTMFpvd2UgRGV2ZWxvcG1lbnQgSW5zdGFuY2VzIENlcnRpZmljYXRlIEF1dGhv -cml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALyotswfS+sLTmwO -08ocbkNWPccRVWGWaP/LvfLe1USmhUOMO7E38ztTy8AJYBxrFTPr2lL3rXybRHCn -Lscz0XNvkNll6Yef71ghaLbpe0V12Jygw4J9BAbYdVIsrP+brR3pijGVO/ECvJwD -815ODsGU3Staw9HFlHO7dWss/TM2uz3Y6oVLObuhEWvAXiU3fW3PpFebRUlhLe5g -yprGSZDFQAJpiqD7Nac5uZB53ETSPI+Cyku2E5CPx3qDJh9ueiHyaqmtbhBXjOue -7rHU9F03zpldofqp4WDMnrl9ktzQDx+OHY5HI+gsaKV/MEX3YVrD+Rdc1GTc0JiI -OS2VBCsCAwEAAaM/MD0wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAgQwHQYD -VR0OBBYEFPA6lVzMZhd6jkR4JClljOSWs0J1MA0GCSqGSIb3DQEBCwUAA4IBAQCt -onZY1WkhTXmBxIl6EW/IDmcXZeYgucw590I7iVVXDi53oCM16AIM6pniqMP/iku5 -2MX2JqGD//eEnJDt6q+qA4htJSb7lswjbC90xLkGAKAuDsC2cKGaoQAeTh5ouP7C -itN2+xVjZTfyAg3ZxmhXmVKVsv4rRpiAOYvX7R7ewNjpJkBeTQouind5rKtabzPD -0nHKF0u/Y8FaEwv8zFRffsnl0/3nqfnT6l0mvekDP+LhIKZI9TwIJYkP9PGraR50 -HgUnKdoaJuPVQfbiMzISRqXygfTdmVnY9CEP9/W2S4NgaLXI6AkNLEcLNvz/CKJg -TRqXQKkvunUCrHxi5oV+ ------END CERTIFICATE----- diff --git a/keystore/localhost/Zowe_Service_Zowe_Development_Instances_Certificate_Authority_.cer b/keystore/localhost/Zowe_Service_Zowe_Development_Instances_Certificate_Authority_.cer deleted file mode 100644 index 5e0ba584d6..0000000000 --- a/keystore/localhost/Zowe_Service_Zowe_Development_Instances_Certificate_Authority_.cer +++ /dev/null @@ -1,25 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIENzCCAx+gAwIBAgIEBUx4bjANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjE5MDcGA1UE -AxMwWm93ZSBEZXZlbG9wbWVudCBJbnN0YW5jZXMgQ2VydGlmaWNhdGUgQXV0aG9y -aXR5MB4XDTE5MDExMTEyMTIwN1oXDTI5MDEwODEyMTIwN1owejELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjEVMBMGA1UE -AxMMWm93ZSBTZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -jo7rxDzO51tfSmqahMbY6lsXLO+/tXYk1ZcIufsh5L+UMs5StHlfSglbiRgWhfdJ -DTZb9R760klXL7QRYwBcYn3yhdYTsTB0+RJddPlTQzxAx45xV7b+fCtsQqBFZk5a -es/TduyHCHXQRl+iLos13isrl5LSB66ohKxMtflPBeqTM/ptNBbq72XqFCQIZClC -lvMMYnxrW2FNfftxpLQbeFu3KN/8V4gcQoSUvE8YU8PYbVUnuhURActywrxHpke5 -q/tYQR8iDb6D1ZwLU8+/rTrnPbZq+O2DP7vRyBP9pHS/WNSxY1sTnz7gQ2OlUL+B -EQLgRXRPc5ev1kwn0kVd8QIDAQABo4GfMIGcMB8GA1UdIwQYMBaAFPA6lVzMZhd6 -jkR4JClljOSWs0J1MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAOBgNV -HQ8BAf8EBAMCBPAwKwYDVR0RBCQwIoIVbG9jYWxob3N0LmxvY2FsZG9tYWluggls -b2NhbGhvc3QwHQYDVR0OBBYEFJDw32hIl2AHqtLlFJtyVkrIlaGjMA0GCSqGSIb3 -DQEBCwUAA4IBAQAwO1TPIg5ebOiotTtJgj2wbyYFBfqljLrBMEfgP6h6ZOkj5fQI -dZSLNmyY/PSk8IHUPE43QzEPV8Bd2zOwtDzbrnfvtuKLuLzPr+shih3gpUoSYGLU -2miZZerk4AhpOrjIaUvKgcZ5QU7EQy32kQuKf9ldozxgnOzgN60G5z/qae7fYZxo -SeV/nq8t7AkognCwHAKx8Iy418ucsfAuXQbursVWMi3KHrSENimZ+3fgCJ3ym0QT -qwTpojppW5F9SWkJ4Q31l+oRROwIRKm44XSB8DVFnX/k8gzTPMylfQ+GwEyVHcyA -R9zBnNhbbueFLlG9CBMeCHCyia6DUdIQlY5/ ------END CERTIFICATE----- diff --git a/keystore/localhost/localca.cer b/keystore/localhost/localca.cer deleted file mode 100644 index ebd7836405..0000000000 --- a/keystore/localhost/localca.cer +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIEdkRICDANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjE5MDcGA1UE -AxMwWm93ZSBEZXZlbG9wbWVudCBJbnN0YW5jZXMgQ2VydGlmaWNhdGUgQXV0aG9y -aXR5MB4XDTE5MDExMTEyMTIwNVoXDTI5MDEwODEyMTIwNVowgZ4xCzAJBgNVBAYT -AkNaMQ8wDQYDVQQIEwZQcmFndWUxDzANBgNVBAcTBlByYWd1ZTEUMBIGA1UEChML -Wm93ZSBTYW1wbGUxHDAaBgNVBAsTE0FQSSBNZWRpYXRpb24gTGF5ZXIxOTA3BgNV -BAMTMFpvd2UgRGV2ZWxvcG1lbnQgSW5zdGFuY2VzIENlcnRpZmljYXRlIEF1dGhv -cml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALyotswfS+sLTmwO -08ocbkNWPccRVWGWaP/LvfLe1USmhUOMO7E38ztTy8AJYBxrFTPr2lL3rXybRHCn -Lscz0XNvkNll6Yef71ghaLbpe0V12Jygw4J9BAbYdVIsrP+brR3pijGVO/ECvJwD -815ODsGU3Staw9HFlHO7dWss/TM2uz3Y6oVLObuhEWvAXiU3fW3PpFebRUlhLe5g -yprGSZDFQAJpiqD7Nac5uZB53ETSPI+Cyku2E5CPx3qDJh9ueiHyaqmtbhBXjOue -7rHU9F03zpldofqp4WDMnrl9ktzQDx+OHY5HI+gsaKV/MEX3YVrD+Rdc1GTc0JiI -OS2VBCsCAwEAAaM/MD0wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAgQwHQYD -VR0OBBYEFPA6lVzMZhd6jkR4JClljOSWs0J1MA0GCSqGSIb3DQEBCwUAA4IBAQCt -onZY1WkhTXmBxIl6EW/IDmcXZeYgucw590I7iVVXDi53oCM16AIM6pniqMP/iku5 -2MX2JqGD//eEnJDt6q+qA4htJSb7lswjbC90xLkGAKAuDsC2cKGaoQAeTh5ouP7C -itN2+xVjZTfyAg3ZxmhXmVKVsv4rRpiAOYvX7R7ewNjpJkBeTQouind5rKtabzPD -0nHKF0u/Y8FaEwv8zFRffsnl0/3nqfnT6l0mvekDP+LhIKZI9TwIJYkP9PGraR50 -HgUnKdoaJuPVQfbiMzISRqXygfTdmVnY9CEP9/W2S4NgaLXI6AkNLEcLNvz/CKJg -TRqXQKkvunUCrHxi5oV+ ------END CERTIFICATE----- diff --git a/keystore/localhost/localhost-multi.keystore.p12 b/keystore/localhost/localhost-multi.keystore.p12 deleted file mode 100644 index 78dce9d2e3..0000000000 Binary files a/keystore/localhost/localhost-multi.keystore.p12 and /dev/null differ diff --git a/keystore/localhost/localhost-multi.truststore.p12 b/keystore/localhost/localhost-multi.truststore.p12 deleted file mode 100644 index 8b2c18bb01..0000000000 Binary files a/keystore/localhost/localhost-multi.truststore.p12 and /dev/null differ diff --git a/keystore/localhost/localhost.keystore.cer b/keystore/localhost/localhost.keystore.cer deleted file mode 100644 index c19c6d1da1..0000000000 --- a/keystore/localhost/localhost.keystore.cer +++ /dev/null @@ -1,49 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIENzCCAx+gAwIBAgIEBUx4bjANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjE5MDcGA1UE -AxMwWm93ZSBEZXZlbG9wbWVudCBJbnN0YW5jZXMgQ2VydGlmaWNhdGUgQXV0aG9y -aXR5MB4XDTE5MDExMTEyMTIwN1oXDTI5MDEwODEyMTIwN1owejELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjEVMBMGA1UE -AxMMWm93ZSBTZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -jo7rxDzO51tfSmqahMbY6lsXLO+/tXYk1ZcIufsh5L+UMs5StHlfSglbiRgWhfdJ -DTZb9R760klXL7QRYwBcYn3yhdYTsTB0+RJddPlTQzxAx45xV7b+fCtsQqBFZk5a -es/TduyHCHXQRl+iLos13isrl5LSB66ohKxMtflPBeqTM/ptNBbq72XqFCQIZClC -lvMMYnxrW2FNfftxpLQbeFu3KN/8V4gcQoSUvE8YU8PYbVUnuhURActywrxHpke5 -q/tYQR8iDb6D1ZwLU8+/rTrnPbZq+O2DP7vRyBP9pHS/WNSxY1sTnz7gQ2OlUL+B -EQLgRXRPc5ev1kwn0kVd8QIDAQABo4GfMIGcMB8GA1UdIwQYMBaAFPA6lVzMZhd6 -jkR4JClljOSWs0J1MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAOBgNV -HQ8BAf8EBAMCBPAwKwYDVR0RBCQwIoIVbG9jYWxob3N0LmxvY2FsZG9tYWluggls -b2NhbGhvc3QwHQYDVR0OBBYEFJDw32hIl2AHqtLlFJtyVkrIlaGjMA0GCSqGSIb3 -DQEBCwUAA4IBAQAwO1TPIg5ebOiotTtJgj2wbyYFBfqljLrBMEfgP6h6ZOkj5fQI -dZSLNmyY/PSk8IHUPE43QzEPV8Bd2zOwtDzbrnfvtuKLuLzPr+shih3gpUoSYGLU -2miZZerk4AhpOrjIaUvKgcZ5QU7EQy32kQuKf9ldozxgnOzgN60G5z/qae7fYZxo -SeV/nq8t7AkognCwHAKx8Iy418ucsfAuXQbursVWMi3KHrSENimZ+3fgCJ3ym0QT -qwTpojppW5F9SWkJ4Q31l+oRROwIRKm44XSB8DVFnX/k8gzTPMylfQ+GwEyVHcyA -R9zBnNhbbueFLlG9CBMeCHCyia6DUdIQlY5/ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIEdkRICDANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjE5MDcGA1UE -AxMwWm93ZSBEZXZlbG9wbWVudCBJbnN0YW5jZXMgQ2VydGlmaWNhdGUgQXV0aG9y -aXR5MB4XDTE5MDExMTEyMTIwNVoXDTI5MDEwODEyMTIwNVowgZ4xCzAJBgNVBAYT -AkNaMQ8wDQYDVQQIEwZQcmFndWUxDzANBgNVBAcTBlByYWd1ZTEUMBIGA1UEChML -Wm93ZSBTYW1wbGUxHDAaBgNVBAsTE0FQSSBNZWRpYXRpb24gTGF5ZXIxOTA3BgNV -BAMTMFpvd2UgRGV2ZWxvcG1lbnQgSW5zdGFuY2VzIENlcnRpZmljYXRlIEF1dGhv -cml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALyotswfS+sLTmwO -08ocbkNWPccRVWGWaP/LvfLe1USmhUOMO7E38ztTy8AJYBxrFTPr2lL3rXybRHCn -Lscz0XNvkNll6Yef71ghaLbpe0V12Jygw4J9BAbYdVIsrP+brR3pijGVO/ECvJwD -815ODsGU3Staw9HFlHO7dWss/TM2uz3Y6oVLObuhEWvAXiU3fW3PpFebRUlhLe5g -yprGSZDFQAJpiqD7Nac5uZB53ETSPI+Cyku2E5CPx3qDJh9ueiHyaqmtbhBXjOue -7rHU9F03zpldofqp4WDMnrl9ktzQDx+OHY5HI+gsaKV/MEX3YVrD+Rdc1GTc0JiI -OS2VBCsCAwEAAaM/MD0wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAgQwHQYD -VR0OBBYEFPA6lVzMZhd6jkR4JClljOSWs0J1MA0GCSqGSIb3DQEBCwUAA4IBAQCt -onZY1WkhTXmBxIl6EW/IDmcXZeYgucw590I7iVVXDi53oCM16AIM6pniqMP/iku5 -2MX2JqGD//eEnJDt6q+qA4htJSb7lswjbC90xLkGAKAuDsC2cKGaoQAeTh5ouP7C -itN2+xVjZTfyAg3ZxmhXmVKVsv4rRpiAOYvX7R7ewNjpJkBeTQouind5rKtabzPD -0nHKF0u/Y8FaEwv8zFRffsnl0/3nqfnT6l0mvekDP+LhIKZI9TwIJYkP9PGraR50 -HgUnKdoaJuPVQfbiMzISRqXygfTdmVnY9CEP9/W2S4NgaLXI6AkNLEcLNvz/CKJg -TRqXQKkvunUCrHxi5oV+ ------END CERTIFICATE----- diff --git a/keystore/localhost/localhost.keystore.key b/keystore/localhost/localhost.keystore.key deleted file mode 100644 index 97e60ee10d..0000000000 --- a/keystore/localhost/localhost.keystore.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCOjuvEPM7nW19K -apqExtjqWxcs77+1diTVlwi5+yHkv5QyzlK0eV9KCVuJGBaF90kNNlv1HvrSSVcv -tBFjAFxiffKF1hOxMHT5El10+VNDPEDHjnFXtv58K2xCoEVmTlp6z9N27IcIddBG -X6IuizXeKyuXktIHrqiErEy1+U8F6pMz+m00FurvZeoUJAhkKUKW8wxifGtbYU19 -+3GktBt4W7co3/xXiBxChJS8TxhTw9htVSe6FREBy3LCvEemR7mr+1hBHyINvoPV -nAtTz7+tOuc9tmr47YM/u9HIE/2kdL9Y1LFjWxOfPuBDY6VQv4ERAuBFdE9zl6/W -TCfSRV3xAgMBAAECggEAPU1sSSi0+HwsT/3jkHFJ2g1tu98lG01ArbCTChbaDlnr -yqU6n20J8vZvLFb1aIpcGZhkltXJmh/7pAHU8DO5hokOf0r9kNZ7lpe1JJYKngEN -AkNYrhV8/bxWg5gT/9h1xBYWoy83KgYvl/OL9GPcuDrsNfPm6XLL+LF3E1GwD6SW -tQSrKtgCeWylhEq+EFXqKxJRuzdYKoJMG/trGOjm68LG6yyP6kUy62Juuxg0EHVZ -8UJ2HK8kCtgm9erCH+ZBwvZKISiqmQYEqbncN1VM7PPZY5kUuiKBbBq8KGrZjJzk -MzyrK35Ch10QaRHUf+NyYtYqU8gNf1N0LKnN0cw5+QKBgQDlaEe/LgJ5zte/zzSp -627KENwGRbO9Y43bFFGbClv83aJlWQGF0EhW2YQ5mbOAqlGASTdJNlvYE0BOsFux -J2/wBN85dDmAxmjDBCGvIAeNJW9VD5Fd8nHDfKZ9ffLYOTwGWNVAMEjDkNQNZRy+ -JsWPxl4Tz8fJLTu4wDZ/NrRzswKBgQCfFV+UUixf9sJ2DlttRLb1ueGj3buDflW4 -qhcSBrbPjRCJQpDgmfzr8DqZsMwbjYdAaJreP/JoUCgJzP9oq7anLX7MA/lYFYgr -0/Gq4Bs4mJyDhiT5qm9c3sBNaWesViSj2gmqt3t8ImfGCmwPR9gqm5yhfmQUHXkz -kLK2nlhlywKBgA1nM1HrKT/eouJVA9mtpLJvm7tOFTtKdr5HCKGLUGaMuHE9awZb -be6NFNmcrk0lJk/ddzpyz5jnPwmZ6jGGgVa/oh8kODva28IRGrq1n1tSxZdtqmuX -v6fRP5TzZ93UMjqYtBTk/UtXydvifXRqpX5J87Mqn5yUZPndWRHDq3VbAoGASY/X -l7172ZBAkdjHvDpXJD+lMGIbEI3905uLeYFzTXxcliwa1FFAnFWEs4cGiwMh9M2q -N3V4gXX3XbjWri8hEiM+i9aWmX2zbxjdmndw/vXLAiKovG5sepRidil0kENxQ/dS -GwgnaNp8BB7ToylEs0cr4Z2RZ5/NaOPTUBDerYsCgYAqdGUHDFrRglatMXEDOQAR -nfGRBHcG5wxN+Vp7IsvzbQVRGWexbw5vh+Z1t/JrE3YC0lvKYhKUQTupydrUV9q7 -Nol3hUZ31vbpNmd6A+r78wvMletwNxe8/vjsnMEtBX8zjjPtroCqNL1mRvm83qLL -kRv/iliKTDgkH9gupKiElA== ------END PRIVATE KEY----- diff --git a/keystore/localhost/localhost.keystore.p12 b/keystore/localhost/localhost.keystore.p12 deleted file mode 100644 index 5af256bb89..0000000000 Binary files a/keystore/localhost/localhost.keystore.p12 and /dev/null differ diff --git a/keystore/localhost/localhost.pem b/keystore/localhost/localhost.pem deleted file mode 100644 index 8dd47a72b9..0000000000 --- a/keystore/localhost/localhost.pem +++ /dev/null @@ -1,77 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCOjuvEPM7nW19K -apqExtjqWxcs77+1diTVlwi5+yHkv5QyzlK0eV9KCVuJGBaF90kNNlv1HvrSSVcv -tBFjAFxiffKF1hOxMHT5El10+VNDPEDHjnFXtv58K2xCoEVmTlp6z9N27IcIddBG -X6IuizXeKyuXktIHrqiErEy1+U8F6pMz+m00FurvZeoUJAhkKUKW8wxifGtbYU19 -+3GktBt4W7co3/xXiBxChJS8TxhTw9htVSe6FREBy3LCvEemR7mr+1hBHyINvoPV -nAtTz7+tOuc9tmr47YM/u9HIE/2kdL9Y1LFjWxOfPuBDY6VQv4ERAuBFdE9zl6/W -TCfSRV3xAgMBAAECggEAPU1sSSi0+HwsT/3jkHFJ2g1tu98lG01ArbCTChbaDlnr -yqU6n20J8vZvLFb1aIpcGZhkltXJmh/7pAHU8DO5hokOf0r9kNZ7lpe1JJYKngEN -AkNYrhV8/bxWg5gT/9h1xBYWoy83KgYvl/OL9GPcuDrsNfPm6XLL+LF3E1GwD6SW -tQSrKtgCeWylhEq+EFXqKxJRuzdYKoJMG/trGOjm68LG6yyP6kUy62Juuxg0EHVZ -8UJ2HK8kCtgm9erCH+ZBwvZKISiqmQYEqbncN1VM7PPZY5kUuiKBbBq8KGrZjJzk -MzyrK35Ch10QaRHUf+NyYtYqU8gNf1N0LKnN0cw5+QKBgQDlaEe/LgJ5zte/zzSp -627KENwGRbO9Y43bFFGbClv83aJlWQGF0EhW2YQ5mbOAqlGASTdJNlvYE0BOsFux -J2/wBN85dDmAxmjDBCGvIAeNJW9VD5Fd8nHDfKZ9ffLYOTwGWNVAMEjDkNQNZRy+ -JsWPxl4Tz8fJLTu4wDZ/NrRzswKBgQCfFV+UUixf9sJ2DlttRLb1ueGj3buDflW4 -qhcSBrbPjRCJQpDgmfzr8DqZsMwbjYdAaJreP/JoUCgJzP9oq7anLX7MA/lYFYgr -0/Gq4Bs4mJyDhiT5qm9c3sBNaWesViSj2gmqt3t8ImfGCmwPR9gqm5yhfmQUHXkz -kLK2nlhlywKBgA1nM1HrKT/eouJVA9mtpLJvm7tOFTtKdr5HCKGLUGaMuHE9awZb -be6NFNmcrk0lJk/ddzpyz5jnPwmZ6jGGgVa/oh8kODva28IRGrq1n1tSxZdtqmuX -v6fRP5TzZ93UMjqYtBTk/UtXydvifXRqpX5J87Mqn5yUZPndWRHDq3VbAoGASY/X -l7172ZBAkdjHvDpXJD+lMGIbEI3905uLeYFzTXxcliwa1FFAnFWEs4cGiwMh9M2q -N3V4gXX3XbjWri8hEiM+i9aWmX2zbxjdmndw/vXLAiKovG5sepRidil0kENxQ/dS -GwgnaNp8BB7ToylEs0cr4Z2RZ5/NaOPTUBDerYsCgYAqdGUHDFrRglatMXEDOQAR -nfGRBHcG5wxN+Vp7IsvzbQVRGWexbw5vh+Z1t/JrE3YC0lvKYhKUQTupydrUV9q7 -Nol3hUZ31vbpNmd6A+r78wvMletwNxe8/vjsnMEtBX8zjjPtroCqNL1mRvm83qLL -kRv/iliKTDgkH9gupKiElA== ------END PRIVATE KEY----- ------BEGIN CERTIFICATE----- -MIIENzCCAx+gAwIBAgIEBUx4bjANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjE5MDcGA1UE -AxMwWm93ZSBEZXZlbG9wbWVudCBJbnN0YW5jZXMgQ2VydGlmaWNhdGUgQXV0aG9y -aXR5MB4XDTE5MDExMTEyMTIwN1oXDTI5MDEwODEyMTIwN1owejELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjEVMBMGA1UE -AxMMWm93ZSBTZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -jo7rxDzO51tfSmqahMbY6lsXLO+/tXYk1ZcIufsh5L+UMs5StHlfSglbiRgWhfdJ -DTZb9R760klXL7QRYwBcYn3yhdYTsTB0+RJddPlTQzxAx45xV7b+fCtsQqBFZk5a -es/TduyHCHXQRl+iLos13isrl5LSB66ohKxMtflPBeqTM/ptNBbq72XqFCQIZClC -lvMMYnxrW2FNfftxpLQbeFu3KN/8V4gcQoSUvE8YU8PYbVUnuhURActywrxHpke5 -q/tYQR8iDb6D1ZwLU8+/rTrnPbZq+O2DP7vRyBP9pHS/WNSxY1sTnz7gQ2OlUL+B -EQLgRXRPc5ev1kwn0kVd8QIDAQABo4GfMIGcMB8GA1UdIwQYMBaAFPA6lVzMZhd6 -jkR4JClljOSWs0J1MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAOBgNV -HQ8BAf8EBAMCBPAwKwYDVR0RBCQwIoIVbG9jYWxob3N0LmxvY2FsZG9tYWluggls -b2NhbGhvc3QwHQYDVR0OBBYEFJDw32hIl2AHqtLlFJtyVkrIlaGjMA0GCSqGSIb3 -DQEBCwUAA4IBAQAwO1TPIg5ebOiotTtJgj2wbyYFBfqljLrBMEfgP6h6ZOkj5fQI -dZSLNmyY/PSk8IHUPE43QzEPV8Bd2zOwtDzbrnfvtuKLuLzPr+shih3gpUoSYGLU -2miZZerk4AhpOrjIaUvKgcZ5QU7EQy32kQuKf9ldozxgnOzgN60G5z/qae7fYZxo -SeV/nq8t7AkognCwHAKx8Iy418ucsfAuXQbursVWMi3KHrSENimZ+3fgCJ3ym0QT -qwTpojppW5F9SWkJ4Q31l+oRROwIRKm44XSB8DVFnX/k8gzTPMylfQ+GwEyVHcyA -R9zBnNhbbueFLlG9CBMeCHCyia6DUdIQlY5/ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIEdkRICDANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjE5MDcGA1UE -AxMwWm93ZSBEZXZlbG9wbWVudCBJbnN0YW5jZXMgQ2VydGlmaWNhdGUgQXV0aG9y -aXR5MB4XDTE5MDExMTEyMTIwNVoXDTI5MDEwODEyMTIwNVowgZ4xCzAJBgNVBAYT -AkNaMQ8wDQYDVQQIEwZQcmFndWUxDzANBgNVBAcTBlByYWd1ZTEUMBIGA1UEChML -Wm93ZSBTYW1wbGUxHDAaBgNVBAsTE0FQSSBNZWRpYXRpb24gTGF5ZXIxOTA3BgNV -BAMTMFpvd2UgRGV2ZWxvcG1lbnQgSW5zdGFuY2VzIENlcnRpZmljYXRlIEF1dGhv -cml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALyotswfS+sLTmwO -08ocbkNWPccRVWGWaP/LvfLe1USmhUOMO7E38ztTy8AJYBxrFTPr2lL3rXybRHCn -Lscz0XNvkNll6Yef71ghaLbpe0V12Jygw4J9BAbYdVIsrP+brR3pijGVO/ECvJwD -815ODsGU3Staw9HFlHO7dWss/TM2uz3Y6oVLObuhEWvAXiU3fW3PpFebRUlhLe5g -yprGSZDFQAJpiqD7Nac5uZB53ETSPI+Cyku2E5CPx3qDJh9ueiHyaqmtbhBXjOue -7rHU9F03zpldofqp4WDMnrl9ktzQDx+OHY5HI+gsaKV/MEX3YVrD+Rdc1GTc0JiI -OS2VBCsCAwEAAaM/MD0wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAgQwHQYD -VR0OBBYEFPA6lVzMZhd6jkR4JClljOSWs0J1MA0GCSqGSIb3DQEBCwUAA4IBAQCt -onZY1WkhTXmBxIl6EW/IDmcXZeYgucw590I7iVVXDi53oCM16AIM6pniqMP/iku5 -2MX2JqGD//eEnJDt6q+qA4htJSb7lswjbC90xLkGAKAuDsC2cKGaoQAeTh5ouP7C -itN2+xVjZTfyAg3ZxmhXmVKVsv4rRpiAOYvX7R7ewNjpJkBeTQouind5rKtabzPD -0nHKF0u/Y8FaEwv8zFRffsnl0/3nqfnT6l0mvekDP+LhIKZI9TwIJYkP9PGraR50 -HgUnKdoaJuPVQfbiMzISRqXygfTdmVnY9CEP9/W2S4NgaLXI6AkNLEcLNvz/CKJg -TRqXQKkvunUCrHxi5oV+ ------END CERTIFICATE----- diff --git a/keystore/localhost/localhost.truststore.p12 b/keystore/localhost/localhost.truststore.p12 deleted file mode 100644 index 80050c9dd8..0000000000 Binary files a/keystore/localhost/localhost.truststore.p12 and /dev/null differ diff --git a/keystore/localhost/localhost2.keystore.p12 b/keystore/localhost/localhost2.keystore.p12 deleted file mode 100644 index 03d2c7d859..0000000000 Binary files a/keystore/localhost/localhost2.keystore.p12 and /dev/null differ diff --git a/keystore/localhost/localhost2.truststore.p12 b/keystore/localhost/localhost2.truststore.p12 deleted file mode 100644 index d0a22ca7e0..0000000000 Binary files a/keystore/localhost/localhost2.truststore.p12 and /dev/null differ diff --git a/keystore/localhost/nonlocalhost.keystore.p12 b/keystore/localhost/nonlocalhost.keystore.p12 deleted file mode 100644 index c3a6c47540..0000000000 Binary files a/keystore/localhost/nonlocalhost.keystore.p12 and /dev/null differ diff --git a/keystore/localhost/trusted_CAs.cer b/keystore/localhost/trusted_CAs.cer deleted file mode 100644 index 1c19f552f7..0000000000 --- a/keystore/localhost/trusted_CAs.cer +++ /dev/null @@ -1,47 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID3zCCAsegAwIBAgIUFhpJdn8dPLOj9FkPP2PIkzfwRLwwDQYJKoZIhvcNAQEL -BQAwfzELMAkGA1UEBhMCQ1oxDzANBgNVBAgMBlByYWd1ZTEPMA0GA1UEBwwGUHJh -Z3VlMREwDwYDVQQKDAhCcm9hZGNvbTEMMAoGA1UECwwDTUZEMS0wKwYDVQQDDCRB -UElNTCBFeHRlcm5hbCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMjAwODIxMTAw -MTIzWhcNMjMwNTE4MTAwMTIzWjB/MQswCQYDVQQGEwJDWjEPMA0GA1UECAwGUHJh -Z3VlMQ8wDQYDVQQHDAZQcmFndWUxETAPBgNVBAoMCEJyb2FkY29tMQwwCgYDVQQL -DANNRkQxLTArBgNVBAMMJEFQSU1MIEV4dGVybmFsIENlcnRpZmljYXRlIEF1dGhv -cml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxBIK3rQgHi0Aig -5/azMjPZcKFZx0Kihv3JBdQ0z+oUMHimykc1wheDplnNtmLzqL6c/Bsa/X2zLT3c -nhFZrvdYZeb5sFZQIlDrmZ90D9fAedkTSfK6bET7vw6x9NGAuhXTZ/r27E+a2tY/ -wvFaw8IWNe5lthidXdRfiPOdf6RPM0Fssj+aU42+y7dHlvvDbmMusy+j5SxEP6dx -Oh6p9cUUr6i9mOXZUN7RTo2cHjgLjGm9uokjv3sR/Fh7whoyjyWfOFRYAUZvWqiq -v8vV1dEhcoVefwUxxvyYjPeE/V1NlIlA3mL0Z9dx5Fp+U60H9brkxCizTxD1jLEx -ixne5Y8CAwEAAaNTMFEwHQYDVR0OBBYEFHGB79eApQnqoGh4OZ+C2I5ZoI93MB8G -A1UdIwQYMBaAFHGB79eApQnqoGh4OZ+C2I5ZoI93MA8GA1UdEwEB/wQFMAMBAf8w -DQYJKoZIhvcNAQELBQADggEBAAaimjQxE1LXZoi71zC86cGWXjydAgXwHQE9GpLq -1LQvdfRciAWwOURBP9k2SNtVQR7UmfDpVJOtIwA5PcFAIklvx1g7S6FuCzuSLX7k -4fhOv9pcsNCHfP+Hju6TvNGHQKKkJDQt7IDUHAkW/xPE3idEpBi8q/SI8LCXW3en -AwfJE+evrcOWdt17IVh8TcBMDgHQYlg9pYu5fvf1GiVAlok0dIhvf3OwBX5ND3fu -0fLIBgx9/3T2PXxK9eLJTDnSLCSa9w/aDoSQNVjJtBOt3XKnXsGpgIzJPg2IXIEf -h9GozrCPF9ceSUD2o8wqDkE7UjTLL3k3gDhss7HPJo3nkao= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIEdkRICDANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC -Q1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBxMGUHJhZ3VlMRQwEgYDVQQKEwta -b3dlIFNhbXBsZTEcMBoGA1UECxMTQVBJIE1lZGlhdGlvbiBMYXllcjE5MDcGA1UE -AxMwWm93ZSBEZXZlbG9wbWVudCBJbnN0YW5jZXMgQ2VydGlmaWNhdGUgQXV0aG9y -aXR5MB4XDTE5MDExMTEyMTIwNVoXDTI5MDEwODEyMTIwNVowgZ4xCzAJBgNVBAYT -AkNaMQ8wDQYDVQQIEwZQcmFndWUxDzANBgNVBAcTBlByYWd1ZTEUMBIGA1UEChML -Wm93ZSBTYW1wbGUxHDAaBgNVBAsTE0FQSSBNZWRpYXRpb24gTGF5ZXIxOTA3BgNV -BAMTMFpvd2UgRGV2ZWxvcG1lbnQgSW5zdGFuY2VzIENlcnRpZmljYXRlIEF1dGhv -cml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALyotswfS+sLTmwO -08ocbkNWPccRVWGWaP/LvfLe1USmhUOMO7E38ztTy8AJYBxrFTPr2lL3rXybRHCn -Lscz0XNvkNll6Yef71ghaLbpe0V12Jygw4J9BAbYdVIsrP+brR3pijGVO/ECvJwD -815ODsGU3Staw9HFlHO7dWss/TM2uz3Y6oVLObuhEWvAXiU3fW3PpFebRUlhLe5g -yprGSZDFQAJpiqD7Nac5uZB53ETSPI+Cyku2E5CPx3qDJh9ueiHyaqmtbhBXjOue -7rHU9F03zpldofqp4WDMnrl9ktzQDx+OHY5HI+gsaKV/MEX3YVrD+Rdc1GTc0JiI -OS2VBCsCAwEAAaM/MD0wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAgQwHQYD -VR0OBBYEFPA6lVzMZhd6jkR4JClljOSWs0J1MA0GCSqGSIb3DQEBCwUAA4IBAQCt -onZY1WkhTXmBxIl6EW/IDmcXZeYgucw590I7iVVXDi53oCM16AIM6pniqMP/iku5 -2MX2JqGD//eEnJDt6q+qA4htJSb7lswjbC90xLkGAKAuDsC2cKGaoQAeTh5ouP7C -itN2+xVjZTfyAg3ZxmhXmVKVsv4rRpiAOYvX7R7ewNjpJkBeTQouind5rKtabzPD -0nHKF0u/Y8FaEwv8zFRffsnl0/3nqfnT6l0mvekDP+LhIKZI9TwIJYkP9PGraR50 -HgUnKdoaJuPVQfbiMzISRqXygfTdmVnY9CEP9/W2S4NgaLXI6AkNLEcLNvz/CKJg -TRqXQKkvunUCrHxi5oV+ ------END CERTIFICATE----- diff --git a/keystore/selfsigned/localhost-untrusted.keystore.cer b/keystore/selfsigned/localhost-untrusted.keystore.cer deleted file mode 100644 index 5d3f30cad4..0000000000 --- a/keystore/selfsigned/localhost-untrusted.keystore.cer +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIEKWdbVTANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMC -Q1oxDTALBgNVBAgTBEJybm8xDTALBgNVBAcTBEJybm8xFDASBgNVBAoTC1pvd2Ug -U2FtcGxlMRwwGgYDVQQLExNBUEkgTWVkaWF0aW9uIExheWVyMSswKQYDVQQDEyJa -b3dlIFNlbGYtU2lnbmVkIFVudHJ1c3RlZCBTZXJ2aWNlMB4XDTE4MTIwNzIwMDc1 -MloXDTI4MTIwNDIwMDc1MlowgYwxCzAJBgNVBAYTAkNaMQ0wCwYDVQQIEwRCcm5v -MQ0wCwYDVQQHEwRCcm5vMRQwEgYDVQQKEwtab3dlIFNhbXBsZTEcMBoGA1UECxMT -QVBJIE1lZGlhdGlvbiBMYXllcjErMCkGA1UEAxMiWm93ZSBTZWxmLVNpZ25lZCBV -bnRydXN0ZWQgU2VydmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AJti8p4nr8ztRSbemrAv1ytVLQMbXozhLe3lNaiVADGTFPZYeJ2lDt7oAl238HOY -ScpOz+JjTeUkL0jsjNYgMhi4J07II/3sJL0SBfVqvvgjUL4BvcpdBl0crSuI/3D4 -OaPue+ZmPFijwdCcw5JbazMoOka/zUwpYYdbwxPUH2BbKfwtmmygX88nkJcRSoQO -KBdNsUs+QRuUiokZ/FJi7uiOsNZ8eEfQv6qJ7mOJ7l1IrMcNm3jHgodoQi/4jXO1 -np/hZaz/ZDni9kBwcyd64AViB2v7VrrBmjdESt1mtCIMvKMlwAZAqrDO75Q9pepO -Y7zbN4s9s7IUfyb9431xg2MCAwEAAaN9MHswHQYDVR0lBBYwFAYIKwYBBQUHAwIG -CCsGAQUFBwMBMA4GA1UdDwEB/wQEAwIE8DArBgNVHREEJDAighVsb2NhbGhvc3Qu -bG9jYWxkb21haW6CCWxvY2FsaG9zdDAdBgNVHQ4EFgQUIeSN7aNtwH2MnBAGDLre -TtcSaZ4wDQYJKoZIhvcNAQELBQADggEBAELPbHlG60nO164yrBjZcpQJ/2e5ThOR -8efXUWExuy/NpwVx0vJg4tb8s9NI3X4pRh3WyD0uGPGkO9w+CAvgUaECePLYjkov -KIS6Cvlcav9nWqdZau1fywltmOLu8Sq5i42Yvb7ZcPOEwDShpuq0ql7LR7j7P4XH -+JkA0k9Zi6RfYJAyOOpbD2R4JoMbxBKrxUVs7cEajl2ltckjyRWoB6FBud1IthRR -mZoPMtlCleKlsKp7yJiE13hpX+qIGnzEQE2gNgQ94dSl4m2xO6pnyDRMAEncmd33 -oehy77omRxNsLzkWe6mjaC8ShMGzG9jYR02iN2h4083/PVXvTZIqwhg= ------END CERTIFICATE----- diff --git a/keystore/selfsigned/localhost-untrusted.keystore.key b/keystore/selfsigned/localhost-untrusted.keystore.key deleted file mode 100644 index 44cc5efa2a..0000000000 --- a/keystore/selfsigned/localhost-untrusted.keystore.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCbYvKeJ6/M7UUm -3pqwL9crVS0DG16M4S3t5TWolQAxkxT2WHidpQ7e6AJdt/BzmEnKTs/iY03lJC9I -7IzWIDIYuCdOyCP97CS9EgX1ar74I1C+Ab3KXQZdHK0riP9w+Dmj7nvmZjxYo8HQ -nMOSW2szKDpGv81MKWGHW8MT1B9gWyn8LZpsoF/PJ5CXEUqEDigXTbFLPkEblIqJ -GfxSYu7ojrDWfHhH0L+qie5jie5dSKzHDZt4x4KHaEIv+I1ztZ6f4WWs/2Q54vZA -cHMneuAFYgdr+1a6wZo3RErdZrQiDLyjJcAGQKqwzu+UPaXqTmO82zeLPbOyFH8m -/eN9cYNjAgMBAAECggEAPPP3kCqpP43jjnfL3kkl8o2a9pkJ4eGDDsrW3aZ1SP0V -P/08czqINtBz/SdmXzHh4EZCLeAeckBbfBOuu2AtxpyWbsT7uWOklbY4OCkDeHsB -9UbhmDwdfvD8zRMUgNAebDvkxmBcU7kJEjgsT4Ek8BBbq90ZP0MMSvin8WNIW5dI -JO8HEJajQx6UUpLQ8r8VFDwRUh1jsG4wL3BO1xQNjsrWYjsoIXRz5lEe80d96Y/J -Jl/4duLYheAlPtTqIjnxPLXWMygTfRpWxNlXFKea8LvQW+wqEPvzifebg7sQV/BA -/bDSV0fM9rFMeNp4aE7bLSgIpL1EQUR2iukL9kI+gQKBgQDvr5UWjUwS9kUDWNuK -7h3KMZ+hfkk+NHbkR2MuQZuvAxCWCmsYyWhsMZV5ekPLR3Tj7bk3kQqn3qs3GovU -uNSeLR2phtZAXMSUUgGMW1W3S2RJdUZFMDPR1cZqgqqhFZ8NyOcXu1mknIQ9ywoI -3MIlqBBF7SdojBF3Pqj1ko+I8QKBgQCl9nzAlIIHXN6nXH2mW0QimB2dlKXEggDs -qdR1AeRmdx1C7+a6s++U9+3U+1+JuMNOlUkW6+MZRI3uS51Olhz+eFmsXZ+7uzQX -nO+ZbIWOdDfOYIkdM1dyXVFejHWIAU8zys/OAy7/ZwpBMwuwdpePVppe6KIsaa3f -Ps+ffsvxkwKBgFgw8Nh1cRJhDw+mOFGsP8XP8H6JawW6ZCymn7W7aj9BD29FshZS -tVtp+yfRdvRq/HWJWOc7NQKDidgiqmTBBWqWCx3/gQH5oFM6wVsVmDpzQRlOT2bR -z59b20ABiCrxO67kxzMSOm+5L2dVOAH+yGj2p9Yy5pcvQpXvtld1b97hAoGAZbg1 -rjNXnvuk3B8sRBIcKLfjLvo0v8SOnH9a4HxQaR0IqkYvvK8cYMm0051eaSL9UeTd -71aU0p/Z/fwKZmhLTQymqaaYiI+s1ewyTm7dTPqeWbeBUoxtRIM9pB2iy8FBshTU -WQhKfe/BsUSAHaASNKB37UPYYjBDiVkOGEu25FECgYAPIE4qnzXCKx7qZUCYsA7v -wk31nVwpwiE/+TufqbaNTi8xqmZVbkrebhcPGfsWAKLbNWCflrI+OZvNc5KK30ZH -IhbhF8UOTMCZ0bDnucneVbGJyCtDvw4oP8nzGRmHr7qJdmiDGFCTE/puGpyfT3ok -mm9Oogqq1ZVaVqWe3jIk/g== ------END PRIVATE KEY----- diff --git a/keystore/selfsigned/localhost-untrusted.keystore.p12 b/keystore/selfsigned/localhost-untrusted.keystore.p12 deleted file mode 100644 index b4befd4d41..0000000000 Binary files a/keystore/selfsigned/localhost-untrusted.keystore.p12 and /dev/null differ diff --git a/keystore/selfsigned/localhost-untrusted.truststore.p12 b/keystore/selfsigned/localhost-untrusted.truststore.p12 deleted file mode 100644 index f595d32643..0000000000 Binary files a/keystore/selfsigned/localhost-untrusted.truststore.p12 and /dev/null differ diff --git a/keystore/selfsigned/localhost.keystore.cer b/keystore/selfsigned/localhost.keystore.cer deleted file mode 100644 index af4037002a..0000000000 --- a/keystore/selfsigned/localhost.keystore.cer +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIED0TPEjANBgkqhkiG9w0BAQsFADB6MQswCQYDVQQGEwJD -WjEPMA0GA1UECBMGUHJhZ3VlMQ8wDQYDVQQHEwZQcmFndWUxFDASBgNVBAoTC1pv -d2UgU2FtcGxlMRwwGgYDVQQLExNBUEkgTWVkaWF0aW9uIExheWVyMRUwEwYDVQQD -Ewxab3dlIFNlcnZpY2UwHhcNMTgxMjA3MTQ1NzIyWhcNMjgxMjA0MTQ1NzIyWjB6 -MQswCQYDVQQGEwJDWjEPMA0GA1UECBMGUHJhZ3VlMQ8wDQYDVQQHEwZQcmFndWUx -FDASBgNVBAoTC1pvd2UgU2FtcGxlMRwwGgYDVQQLExNBUEkgTWVkaWF0aW9uIExh -eWVyMRUwEwYDVQQDEwxab3dlIFNlcnZpY2UwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQC6Orc/EJ5/t2qam1DiYU/xVbHaQrjd6uvpj2HTvOOohtFZ7/Kx -yMAezgB8DBR4+77qXXsdP9ngnTl/i22yGwvo7Tlz6dhnQLnks7VFr1eGGC2ks+rL -BJsF/RQexmONG9ddexWD8SOYoW9RRapQqETbcllxOenvzXruOEzaXhMazkK9Cg+J -ucNb9HcfhIM0rjLZhqG8Gc8dAtCcxF/xHlVyFQq8fr4u2p/wGmARM14iZeQltQV7 -F3gxmw3djfcNM5S3tirPrHlZb76ZmmQEn4QiLSP198Lm+4QKAOw1dUpMf4eELO4c -EFUHXQUCHLWc5NztZxWW40NrDbZEjcRI5ah7AgMBAAGjfTB7MB0GA1UdJQQWMBQG -CCsGAQUFBwMCBggrBgEFBQcDATAOBgNVHQ8BAf8EBAMCBPAwKwYDVR0RBCQwIoIV -bG9jYWxob3N0LmxvY2FsZG9tYWlugglsb2NhbGhvc3QwHQYDVR0OBBYEFHL1ygBb -UCI/ktdk3TgQA6EJlATIMA0GCSqGSIb3DQEBCwUAA4IBAQBHALBlFf0P1TBR1MHQ -vXYDFAW+PiyF7zP0HcrvQTAGYhF7uJtRIamapjUdIsDVbqY0RhoFnBOu8ti2z0pW -djw47f3X/yj98n+J2aYcO64Ar+ovx93P01MA8+Mz1u/LwXk4pmrbUIcOEtyNu+vT -a0jDobC++3Zfv5Y+iD2M8L+jacSMZNCqQByhKtTkAICXg9LMccx4XLYtJ65zGP2h -4TEK0MMfO2G1/vUmdb3tq17zKdukj3MUS254mENCck7ioNFR0Cc9lzuSHyBrdb0x -M/iHeamNblckK/r1roDjhCAQz9DtmETad/o7qGNFxDTRRShRV9Lww0fFB7PaV7u/ -VPx2 ------END CERTIFICATE----- diff --git a/keystore/selfsigned/localhost.keystore.key b/keystore/selfsigned/localhost.keystore.key deleted file mode 100644 index 37daa766eb..0000000000 --- a/keystore/selfsigned/localhost.keystore.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6Orc/EJ5/t2qa -m1DiYU/xVbHaQrjd6uvpj2HTvOOohtFZ7/KxyMAezgB8DBR4+77qXXsdP9ngnTl/ -i22yGwvo7Tlz6dhnQLnks7VFr1eGGC2ks+rLBJsF/RQexmONG9ddexWD8SOYoW9R -RapQqETbcllxOenvzXruOEzaXhMazkK9Cg+JucNb9HcfhIM0rjLZhqG8Gc8dAtCc -xF/xHlVyFQq8fr4u2p/wGmARM14iZeQltQV7F3gxmw3djfcNM5S3tirPrHlZb76Z -mmQEn4QiLSP198Lm+4QKAOw1dUpMf4eELO4cEFUHXQUCHLWc5NztZxWW40NrDbZE -jcRI5ah7AgMBAAECggEAG4SZl0QJZ63ensHcjdb7TRnwkePSFVilS3nYZsU+jqR9 -QuDl58dWPDcMc0gFrmrkpxTxID1TIJGa8XHU38CHXf/PwYUIaRlzXov/eTCTqkjg -VboQM7eWgKgI1RNTmoJGrJWHdFupeuA/5q54oDp9EkAvXz/DhZ/DTngbQxkrkYYw -ZbxLhKpVsCFSLnAoxi1BKQvZiJv8Q0EtZ6Prk+KiN44vHL5HuvhSWUwIdK+tczAV -oEyD2xXl2jy2z87l1HcU7CCBK249/2kl2OIcGqfWL53XgYMWbDI5P6myEqWlZCAU -6Ir/6CLHR4VZ/MZvFO4z7ZgzZ9V6i3nXMbO3gXQTgQKBgQDdR02Fj6SZoVgJkZBU -p9wNddp8Cx+jaX1doiIgFjm0G7iADp1fYGp8Zpnot18bHcB4lpurbmK64rR2oial -H6HyA/2YRn+sNnrzEj+NAGhbysZ7v2MMFrEiJp2kMDbDETNJVC2PSgMTR17fzeo+ -ERDtIczYxDH7vFmr6zmPmJZvKwKBgQDXc39jJPb26GxcOCK6mIEqZ3PTGFopLv08 -mzhRM6hNUh8JEY7GFS18omTSRP6bjcCS/YrO54teqoK+PKCWrUEGHrGPJ2E2GBZj -NsfwX8oCmy424B8hoaQ5cfSGL/ih1Oa0Lax1DI/B2QlrdznfZq29yPSevRkOIkS6 -1+4iJyyD8QKBgHCAWAGXzm/tf/0dbOwdi9usF7EJVsSWVY7NZ9w4cI4JqfwxcgGT -24/z+jw/PrNipQCqUesO7FNn/6hxOISrWILbVIufDDpaWJhMptLhai2BIvi3jXwP -7W8Xgv5/JNh4XkLh8WfwkS+0EaBn6Lg1pQ1rKeLrnR4H3O9zYIiJY7KRAoGBAJ/r -TeHEfT+WE2B8FmMUccOM2G8Ww02QYE2NFUdIpaMG0pyDmMs0yveY/mcI6UeC9y7j -3RVozo0s2TDlhXlyDjLBs6ADZeemB3ALKGsmXqaCktIOl2z6MxCkohC8KLvOcJPK -1xhmg4oqVBCdhapp54pYUCJHUAKqswNQ5aQaGbOxAoGAOP2NrERSDLaOrGBsdtRw -YQRhIFhEliiJBOCVbnDKy8BVa3HLbZ35w+8hH6uC/elKzYVyfPOE3ZZHvdCAwvzu -7+DokkZe1XOCwBHQ9cr4he28rMxBLw7OB6wjqqrVrP1olxzfCcXuawPA3d2OplQw -3eEG8eljLv4Gv/LY9IUPHrE= ------END PRIVATE KEY----- diff --git a/keystore/selfsigned/localhost.keystore.p12 b/keystore/selfsigned/localhost.keystore.p12 deleted file mode 100644 index c15f7c1733..0000000000 Binary files a/keystore/selfsigned/localhost.keystore.p12 and /dev/null differ diff --git a/keystore/selfsigned/localhost.truststore.p12 b/keystore/selfsigned/localhost.truststore.p12 deleted file mode 100644 index f22056b917..0000000000 Binary files a/keystore/selfsigned/localhost.truststore.p12 and /dev/null differ diff --git a/onboarding-enabler-nodejs-sample-app/build.gradle b/onboarding-enabler-nodejs-sample-app/build.gradle index 89922d3963..01f060ec1b 100644 --- a/onboarding-enabler-nodejs-sample-app/build.gradle +++ b/onboarding-enabler-nodejs-sample-app/build.gradle @@ -1,45 +1,45 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -plugins { - alias(libs.plugins.gradle.node) -} - -node { - download = true - version = libs.versions.projectNode.get() - npmVersion = libs.versions.projectNpm.get() - distBaseUrl = "https://nodejs.org/dist" - npmInstallCommand = "ci" - workDir = file("${project.rootDir}/tools/nodejs") - npmWorkDir = file("${project.rootDir}/tools/npm") - yarnWorkDir = file("${project.rootDir}/tools/yarn") - nodeProjectDir = file("${project.projectDir}") -} - -build.dependsOn npmInstall - -npmInstall.dependsOn ":onboarding-enabler-nodejs:build" - -tasks.npmSetup { - args.addAll(['--registry', 'https://zowe.jfrog.io/artifactory/api/npm/npm-org/']) -} - -task nodeClean(type: Delete) { - group = 'node' - if (rootProject.cleanNodeModules == 'true') { - delete 'node_modules' - } -} -clean.dependsOn nodeClean - -jar { - enabled false -} +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +plugins { + alias(libs.plugins.gradle.node) +} + +node { + download = true + version = libs.versions.projectNode.get() + npmVersion = libs.versions.projectNpm.get() + distBaseUrl = "https://nodejs.org/dist" + npmInstallCommand = "ci" + workDir = file("${project.projectDir}/tools/nodejs") + npmWorkDir = file("${project.projectDir}/tools/npm") + yarnWorkDir = file("${project.projectDir}/tools/yarn") + nodeProjectDir = file("${project.projectDir}") +} + +build.dependsOn npmInstall + +npmInstall.dependsOn ":onboarding-enabler-nodejs:build" + +tasks.npmSetup { + args.addAll(['--registry', 'https://zowe.jfrog.io/artifactory/api/npm/npm-org/']) +} + +task nodeClean(type: Delete) { + group = 'node' + if (rootProject.cleanNodeModules == 'true') { + delete 'node_modules' + } +} +clean.dependsOn nodeClean + +jar { + enabled false +} diff --git a/onboarding-enabler-nodejs-sample-app/package-lock.json b/onboarding-enabler-nodejs-sample-app/package-lock.json index d4285fa0d2..5e7803a674 100644 --- a/onboarding-enabler-nodejs-sample-app/package-lock.json +++ b/onboarding-enabler-nodejs-sample-app/package-lock.json @@ -23,7 +23,7 @@ "license": "(EPL-2.0 OR Apache-2.0)", "dependencies": { "async": "3.2.6", - "js-yaml": "4.2.0", + "js-yaml": "4.3.0", "lodash": "4.18.1" }, "devDependencies": { diff --git a/onboarding-enabler-nodejs/.npmrc b/onboarding-enabler-nodejs/.npmrc index 521a9f7c07..c06a38e8c8 100644 --- a/onboarding-enabler-nodejs/.npmrc +++ b/onboarding-enabler-nodejs/.npmrc @@ -1 +1,2 @@ legacy-peer-deps=true +registry=https://zowe.jfrog.io/artifactory/api/npm/npm-org/ diff --git a/onboarding-enabler-nodejs/build.gradle b/onboarding-enabler-nodejs/build.gradle index 16c60ce9a0..ffcd6811a7 100644 --- a/onboarding-enabler-nodejs/build.gradle +++ b/onboarding-enabler-nodejs/build.gradle @@ -1,38 +1,38 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -plugins { - alias(libs.plugins.gradle.node) -} - -node { - download = true - version = libs.versions.projectNode.get() - npmVersion = libs.versions.projectNpm.get() - distBaseUrl = "https://nodejs.org/dist" - npmInstallCommand = "ci" - workDir = file("${project.rootDir}/tools/nodejs") - npmWorkDir = file("${project.rootDir}/tools/npm") - nodeProjectDir = file("${project.projectDir}") -} - -tasks.npmSetup { - args.addAll(['--registry', 'https://zowe.jfrog.io/artifactory/api/npm/npm-org/']) -} - -task nodeClean(type: Delete) { - group = 'node' - delete 'node_modules' -} -clean.dependsOn nodeClean -build.dependsOn npmInstall -jar { - enabled false -} +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +plugins { + alias(libs.plugins.gradle.node) +} + +node { + download = true + version = libs.versions.projectNode.get() + npmVersion = libs.versions.projectNpm.get() + distBaseUrl = "https://nodejs.org/dist" + npmInstallCommand = "ci" + workDir = file("${project.projectDir}/tools/nodejs") + npmWorkDir = file("${project.projectDir}/tools/npm") + nodeProjectDir = file("${project.projectDir}") +} + +tasks.npmSetup { + args.addAll(['--registry', 'https://zowe.jfrog.io/artifactory/api/npm/npm-org/']) +} + +task nodeClean(type: Delete) { + group = 'node' + delete 'node_modules' +} +clean.dependsOn nodeClean +build.dependsOn npmInstall +jar { + enabled false +} diff --git a/onboarding-enabler-nodejs/package-lock.json b/onboarding-enabler-nodejs/package-lock.json index 060285bba4..fd5536671a 100644 --- a/onboarding-enabler-nodejs/package-lock.json +++ b/onboarding-enabler-nodejs/package-lock.json @@ -33,18 +33,18 @@ "sinon-chai": "4.0.1" }, "engines": { - "node": ">=24.16.0", - "npm": ">=10.9.8" + "node": ">=24.18.1", + "npm": ">=10.9.9" } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -60,9 +60,9 @@ "license": "MIT" }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", "engines": { @@ -133,13 +133,6 @@ "node": ">=4" } }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.3", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", - "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, "node_modules/@types/expect": { "version": "1.20.4", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@types/expect/-/expect-1.20.4.tgz", @@ -148,13 +141,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.3", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@types/node/-/node-25.0.3.tgz", - "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", + "version": "26.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@types/node/-/node-26.1.2.tgz", + "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~8.3.0" } }, "node_modules/@types/vinyl": { @@ -212,9 +205,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -516,9 +509,9 @@ "license": "MIT" }, "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "version": "1.8.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -785,9 +778,9 @@ "license": "MIT" }, "node_modules/babel-istanbul/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, "license": "MIT", "dependencies": { @@ -1311,9 +1304,9 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.8.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/bare-events/-/bare-events-2.8.2.tgz", - "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "version": "2.9.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/bare-events/-/bare-events-2.9.1.tgz", + "integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -1397,9 +1390,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.18", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "dev": true, "license": "MIT", "dependencies": { @@ -1484,15 +1477,15 @@ } }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.9", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { @@ -1570,9 +1563,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001762", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", - "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", + "version": "1.0.30001806", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", + "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", "dev": true, "funding": [ { @@ -1649,9 +1642,9 @@ "license": "MIT" }, "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "version": "2.1.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", "dev": true, "license": "MIT", "engines": { @@ -1935,9 +1928,9 @@ } }, "node_modules/coveralls/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, "license": "MIT", "dependencies": { @@ -2111,9 +2104,9 @@ } }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "5.2.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -2187,9 +2180,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "version": "1.5.398", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/electron-to-chromium/-/electron-to-chromium-1.5.398.tgz", + "integrity": "sha512-AsvhAxopJGh6museTDMIjn6JpDYOfgu4RLlygomt87MUwBUqTfd/1EiPtx10/LZE8xpTvkP2E9Gafq7lkLtodQ==", "dev": true, "license": "ISC" }, @@ -2231,9 +2224,9 @@ } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "dev": true, "license": "MIT", "dependencies": { @@ -2609,9 +2602,9 @@ } }, "node_modules/eslint/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, "license": "MIT", "dependencies": { @@ -2667,9 +2660,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3263,7 +3256,7 @@ "version": "7.2.3", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -4065,9 +4058,9 @@ } }, "node_modules/gulp-eslint/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, "license": "MIT", "dependencies": { @@ -4455,9 +4448,9 @@ } }, "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "version": "4.7.9", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4571,9 +4564,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, "license": "MIT", "dependencies": { @@ -4835,13 +4828,13 @@ } }, "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "version": "2.16.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -5150,7 +5143,7 @@ }, "node_modules/istanbul-threshold-checker/node_modules/lodash": { "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/lodash/-/lodash-4.17.23.tgz", "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, "license": "MIT" @@ -5176,7 +5169,7 @@ "version": "5.0.15", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob/-/glob-5.0.15.tgz", "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -5191,9 +5184,9 @@ } }, "node_modules/istanbul/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, "license": "MIT", "dependencies": { @@ -5234,7 +5227,7 @@ }, "node_modules/js-yaml": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-4.3.0.tgz", "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", "funding": [ { @@ -5470,7 +5463,7 @@ }, "node_modules/lodash": { "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/lodash/-/lodash-4.18.1.tgz", "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, @@ -5683,9 +5676,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -5755,9 +5748,9 @@ } }, "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -5799,7 +5792,7 @@ "version": "8.1.0", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -5827,9 +5820,9 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "license": "ISC", "dependencies": { @@ -5900,7 +5893,7 @@ "version": "5.0.15", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob/-/glob-5.0.15.tgz", "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -5960,17 +5953,26 @@ "license": "MIT" }, "node_modules/nise": { - "version": "6.1.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/nise/-/nise-6.1.1.tgz", - "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", + "version": "6.1.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/nise/-/nise-6.1.5.tgz", + "integrity": "sha512-SnRDPDBjxZZoU2n0+gzzLtSvo1OZo7j6jnbXsoh3AFxEGhaFU7ZF0TmefuKERq79wxR2U+MPn7ArW+Tl+clC3A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.1", - "@sinonjs/text-encoding": "^0.7.3", + "@sinonjs/fake-timers": "^15.1.1", "just-extend": "^6.2.0", - "path-to-regexp": "^8.1.0" + "path-to-regexp": "^8.3.0" + } + }, + "node_modules/nise/node_modules/@sinonjs/fake-timers": { + "version": "15.4.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" } }, "node_modules/nock": { @@ -6404,9 +6406,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -6624,9 +6626,9 @@ } }, "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "version": "6.5.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/qs/-/qs-6.5.5.tgz", + "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -6871,12 +6873,13 @@ } }, "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "version": "1.22.12", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" @@ -7284,9 +7287,9 @@ "license": "MIT" }, "node_modules/streamx": { - "version": "2.23.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/streamx/-/streamx-2.23.0.tgz", - "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "version": "2.28.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/streamx/-/streamx-2.28.0.tgz", + "integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==", "dev": true, "license": "MIT", "dependencies": { @@ -7523,9 +7526,9 @@ } }, "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "version": "1.2.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7775,9 +7778,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "8.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", "dev": true, "license": "MIT" }, @@ -7815,7 +7818,7 @@ "version": "3.4.0", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "dev": true, "license": "MIT", "bin": { @@ -8107,9 +8110,9 @@ } }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "16.2.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/yargs/-/yargs-16.2.2.tgz", + "integrity": "sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w==", "dev": true, "license": "MIT", "dependencies": { diff --git a/scripts/generate-keystores.sh b/scripts/generate-keystores.sh new file mode 100755 index 0000000000..352435c406 --- /dev/null +++ b/scripts/generate-keystores.sh @@ -0,0 +1,848 @@ +#!/usr/bin/env bash +# +# generate-keystores.sh — Generate all TLS keystores for local development and testing. +# +# This script creates the complete set of PKCS12 keystores, truststores, +# and convenience exports needed to run the Zowe API Mediation Layer locally. +# It requires openssl and keytool to be available on the PATH. +# +# Usage: +# ./scripts/generate-keystores.sh +# +# All generated files are written under keystore/ (relative to the repo root). + +set -euo pipefail + +# ── Prerequisite detection ───────────────────────────────────────────────── +# Find keytool: try JAVA_HOME, then sdkman candidates, then PATH +find_keytool() { + if [ -n "${JAVA_HOME:-}" ] && [ -x "$JAVA_HOME/bin/keytool" ]; then + echo "$JAVA_HOME/bin/keytool" + return + fi + # Check sdkman Java 17 + for sdk_java in "$HOME/.sdkman/candidates/java/"{17.*,21.*,current}; do + if [ -x "$sdk_java/bin/keytool" ]; then + echo "$sdk_java/bin/keytool" + return + fi + done + # Fall back to PATH + if command -v keytool &>/dev/null; then + echo "keytool" + return + fi + echo "" +} + +KEYTOOL="$(find_keytool)" +if [ -z "$KEYTOOL" ]; then + echo "ERROR: keytool not found. Set JAVA_HOME or ensure Java is installed." >&2 + exit 1 +fi + +# Resolve the Java bin directory. When keytool was found on PATH, dirname would yield "." +# and prepending that to PATH would put the working directory on the search path. +if [ "$KEYTOOL" = "keytool" ]; then + JAVA_BIN="$(dirname "$(command -v keytool)")" +else + JAVA_BIN="$(dirname "$KEYTOOL")" + export PATH="$JAVA_BIN:$PATH" +fi + +if ! command -v openssl &>/dev/null; then + echo "ERROR: openssl not found. Please install openssl." >&2 + exit 1 +fi + +# Report the JDK via `java -version`: keytool has no -version option and prints its +# entire usage text when given one, which buries the rest of the build output. +JAVA_VERSION="" +if [ -x "$JAVA_BIN/java" ]; then + JAVA_VERSION="$("$JAVA_BIN/java" -version 2>&1 || true)" + JAVA_VERSION="${JAVA_VERSION%%$'\n'*}" +fi +echo "Using keytool: $KEYTOOL${JAVA_VERSION:+ ($JAVA_VERSION)}" +echo "Using openssl: $(openssl version)" + +# Find Java cacerts for importing public CA certificates. KEYTOOL is already resolved, +# so derive the JDK root from it rather than scanning the filesystem. +find_cacerts() { + local java_home="${JAVA_HOME:-$(cd "$JAVA_BIN/.." && pwd)}" + [ -z "$java_home" ] && return + for candidate in "$java_home/lib/security/cacerts" "$java_home/jre/lib/security/cacerts"; do + if [ -f "$candidate" ]; then + echo "$candidate" + return + fi + done +} + +JAVA_CACERTS="$(find_cacerts)" +if [ -n "$JAVA_CACERTS" ]; then + echo "Found Java cacerts: $JAVA_CACERTS" +else + echo "WARNING: Could not find Java cacerts truststore. External TLS connections may fail." +fi + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SCRIPT_PATH="$SCRIPT_DIR/$(basename "${BASH_SOURCE[0]}")" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +KEYSTORE_DIR="$REPO_ROOT/keystore" +# Records which revision of this script produced the tree; see the Gradle task, which +# regenerates when the checksum no longer matches the script it is about to run. +STAMP_FILE="$KEYSTORE_DIR/generation.stamp" + +# ── Passwords ────────────────────────────────────────────────────────────── +PASSWORD="password" +CA_PASSWORD="local_ca_password" + +# ── Shared helpers ───────────────────────────────────────────────────────── +# Generate a self-signed CA. +# +# The extensions come from a config file rather than from `-addext`, for portability: +# LibreSSL (the openssl that ships with macOS) rejects `authorityKeyIdentifier=none` +# outright, and OpenSSL 3 only auto-adds an authorityKeyIdentifier when no extension +# section is supplied — so handing it a section is what keeps the AKI off the CA +# certificate. A self-referential AKI on the root breaks `keytool -gencert` chains. +generate_ca() { + local key_file="$1" # private key to create + local out_pem="$2" # certificate to create + local dn_block="$3" # distinguished name, one "Field = value" per line + + local ca_config + ca_config=$(mktemp) + cat > "$ca_config" << EOF +[req] +prompt = no +default_md = sha256 +distinguished_name = dn +x509_extensions = v3_ca + +[dn] +$dn_block + +[v3_ca] +basicConstraints = critical,CA:TRUE +keyUsage = critical,keyCertSign,cRLSign +subjectKeyIdentifier = hash +EOF + + openssl genrsa -out "$key_file" 2048 + openssl req -x509 -new -nodes -key "$key_file" -sha256 -days 3650 \ + -out "$out_pem" -config "$ca_config" -extensions v3_ca + rm -f "$ca_config" +} + +# Public CA certificates that the generated truststores must trust: OIDC providers and +# the other external endpoints the tests reach. Importing all JDK cacerts (~150 certs) +# bloats the truststore and causes startup timing regressions in CI, so only these are +# pulled in. +# +# Roots are looked up by subject, not by the JDK's alias: alias spelling differs between +# JDK vendors and versions, so an alias list silently imports nothing on a JDK that names +# them differently — leaving a truststore with no public roots and no error to show it. +WANTED_PUBLIC_CAS=( + "DigiCert Global Root CA" + "DigiCert Global Root G2" + "DigiCert Global Root G3" + "ISRG Root X1" + "GTS Root R1" + "GTS Root R2" + "GTS Root R3" + "GTS Root R4" +) + +# "\t" for every entry in the JDK truststore; built on first use. +CACERTS_INDEX="" +build_cacerts_index() { + [ -n "$CACERTS_INDEX" ] && return 0 + CACERTS_INDEX="$(keytool -list -v -keystore "$JAVA_CACERTS" -storepass changeit 2>/dev/null | awk ' + /^Alias name: / { alias = substr($0, 13) } + /^Owner: / { print substr($0, 8) "\t" alias }')" +} + +# Resolve a CA common name to its alias in the JDK truststore. Compares whole RDNs so +# that "GTS Root R1" cannot match "GTS Root R11". +cacerts_alias_for() { + printf '%s\n' "$CACERTS_INDEX" | awk -F'\t' -v want="CN=$1" ' + { + n = split($1, rdns, ", ") + for (i = 1; i <= n; i++) if (rdns[i] == want) { print $2; exit } + }' +} + +import_cacerts() { + local truststore="$1" + if [ -z "$JAVA_CACERTS" ] || [ ! -f "$JAVA_CACERTS" ]; then + echo "WARNING: Java cacerts not found; skipping public CA import into $truststore" + return + fi + build_cacerts_index + echo "Importing required public CA certificates into $truststore" + local ca alias tmpcert imported=0 + for ca in "${WANTED_PUBLIC_CAS[@]}"; do + alias="$(cacerts_alias_for "$ca")" + if [ -z "$alias" ]; then + echo "WARNING: '$ca' not found in $JAVA_CACERTS; TLS connections that rely on it will fail" + continue + fi + tmpcert=$(mktemp) + if keytool -exportcert -keystore "$JAVA_CACERTS" -storepass changeit \ + -alias "$alias" -file "$tmpcert" 2>/dev/null && + keytool -importcert -keystore "$truststore" -storetype pkcs12 \ + -storepass "$PASSWORD" -alias "$ca" -file "$tmpcert" -noprompt 2>/dev/null; then + imported=$((imported + 1)) + else + echo "WARNING: failed to import '$ca' (alias '$alias') into $truststore" + fi + rm -f "$tmpcert" + done + echo " imported $imported of ${#WANTED_PUBLIC_CAS[@]} public CA certificates" +} + +# Trust everything dropped into keystore/extra_ca. This is the supported way to restore +# CAs that used to live inside the committed truststores and cannot be rebuilt from +# public material — corporate/internal roots needed to reach an internal z/OSMF or OIDC +# provider. Drop the PEM in and re-run; nothing internal is committed to the repository. +import_extra_cas() { + local truststore="$1" + local extra_dir="$KEYSTORE_DIR/extra_ca" + # `return 0`, not a bare `return`: under `set -e` a bare one would propagate the + # failed test and abort the whole script when the directory is simply absent. + [ -d "$extra_dir" ] || return 0 + local cert alias + for cert in "$extra_dir"/*.pem "$extra_dir"/*.cer "$extra_dir"/*.crt; do + [ -f "$cert" ] || continue + alias="extra_$(basename "${cert%.*}")" + echo "Importing extra CA $(basename "$cert") into $truststore" + keytool -importcert -keystore "$truststore" -storetype pkcs12 \ + -storepass "$PASSWORD" -alias "$alias" -file "$cert" -noprompt + done +} + +# Every truststore gets the same external trust material. +finalize_truststore() { + import_cacerts "$1" + import_extra_cas "$1" +} + +# ── Clean up previous generated artifacts ────────────────────────────────── +echo "=== Cleaning previously generated keystores ===" +for dir in local_ca localhost selfsigned docker; do + if [ -d "$KEYSTORE_DIR/$dir" ]; then + find "$KEYSTORE_DIR/$dir" -type f \( -name '*.p12' -o -name '*.cer' -o -name '*.key' -o -name '*.pem' -o -name '*.csr' -o -name '*.crt' -o -name '*.srl' \) -delete 2>/dev/null || true + fi +done +# Also clean client_cert generated files (keep openssl.conf) +find "$KEYSTORE_DIR/client_cert" -type f \( -name '*.p12' -o -name '*.cer' -o -name '*.key' -o -name '*.pem' -o -name '*.csr' -o -name '*.crt' -o -name '*.srl' \) -delete 2>/dev/null || true + +mkdir -p "$KEYSTORE_DIR/local_ca" "$KEYSTORE_DIR/localhost" "$KEYSTORE_DIR/selfsigned" "$KEYSTORE_DIR/docker" "$KEYSTORE_DIR/client_cert/ca" + +# ── 1. Local Certificate Authority ──────────────────────────────────────── +echo "" +echo "=== Generating Local Certificate Authority ===" +cd "$KEYSTORE_DIR/local_ca" + +# Generate the CA key and self-signed certificate. The distinguished name reproduces the +# one the committed keystores carried: config/local/gateway-service.yml authorizes the +# x509 registry by certificate common name, and docker/redis/run-redis.sh builds its own +# CA with this exact DN. +generate_ca local_ca.key local_ca.pem "C = CZ +ST = Prague +L = Prague +O = Zowe Sample +OU = API Mediation Layer +CN = Zowe Development Instances Certificate Authority" + +# Create PKCS12 keystore for the CA +openssl pkcs12 -export -out localca.keystore.p12 \ + -in local_ca.pem -inkey local_ca.key \ + -name localca -macalg SHA256 -passout "pass:$CA_PASSWORD" + +# Export public certificate (DER format) +openssl x509 -in local_ca.pem -outform DER -out localca.cer +cp localca.cer zowe-dev-ca.cer + +# Keep PEM copy for signing operations in later steps +cp local_ca.pem localca.pem + +# Export to localhost directory for convenience (used by NGINX AT-TLS) +cp localca.cer "$KEYSTORE_DIR/localhost/localca.cer" +cp localca.cer "$KEYSTORE_DIR/localhost/Zowe_Service_Zowe_Development_Instances_Certificate_Authority_.cer" + +# Second, intentionally unrelated CA. It signs the whole localhost2 pair — keystore and +# truststore — so that localhost2 is a self-consistent PKI that has nothing in common with +# the main one. Both directions are load-bearing in TomcatHttpsTest: +# trustStoreWithDifferentCertificateAuthorityShouldFail — a client trusting only this CA +# must reject a server holding the main CA's certificate, and +# wrongClientCertificateShouldNotFailWhenClientAuthIsWant — the localhost2 certificate +# must be an untrusted client certificate as far as the main truststore is concerned. +# Signing localhost2 with the main CA instead leaves the second test asserting nothing. +echo "" +echo "=== Generating Secondary Certificate Authority (for truststore mismatch tests) ===" +generate_ca local_ca2.key localca2.pem "C = CZ +ST = Prague +L = Prague +O = Zowe Sample +OU = API Mediation Layer +CN = Zowe Development Instances Certificate Authority 2" +openssl x509 -in localca2.pem -outform DER -out localca2.cer + +# ── 2. Localhost keystores ───────────────────────────────────────────────── +echo "" +echo "=== Generating localhost keystores ===" +cd "$KEYSTORE_DIR/localhost" + +# Default SAN block for a certificate that has to answer for the local machine. +# 127.0.0.1 is listed as an IP entry, not a DNS one: a DNS name that happens to look like +# an address is not what a hostname verifier consults when the URL holds an IP literal. +LOCALHOST_SANS="DNS.1 = localhost +DNS.2 = localhost.localdomain +IP.1 = 127.0.0.1" + +generate_localhost_keystore() { + local name="$1" # base name for the intermediate files + local alias="$2" # alias of the key entry in the keystore + local ks_name="$3" # output keystore filename + local ts_name="$4" # output truststore filename + local ca_cert="$5" # CA certificate: signs the key entry, trusted by the truststore + local ca_key="$6" # CA private key (unencrypted, next to the PEM) + local dn_block="$7" # subject, one "Field = value" per line + local san_entries="$8" # SAN block; LOCALHOST_SANS for anything serving localhost + + # Generate server key and CSR + local san_config + san_config=$(mktemp) + cat > "$san_config" << EOF +[req] +default_bits = 2048 +prompt = no +default_md = sha256 +distinguished_name = dn +req_extensions = v3_req + +[dn] +$dn_block + +[v3_req] +keyUsage = digitalSignature, nonRepudiation, keyEncipherment +extendedKeyUsage = clientAuth, serverAuth +subjectAltName = @alt_names + +[alt_names] +$san_entries +EOF + + # Generate private key + openssl genrsa -out "${name}.key" 2048 + + # Generate CSR + openssl req -new -key "${name}.key" -out "${name}.csr" -config "$san_config" + + # Sign with CA + openssl x509 -req -in "${name}.csr" \ + -CA "$ca_cert" -CAkey "$ca_key" \ + -out "${name}.crt" -days 3650 -sha256 \ + -extfile "$san_config" -extensions v3_req -CAcreateserial + + # Create truststore with CA cert + keytool -import -alias localca -file "$ca_cert" \ + -keystore "$ts_name" -storetype pkcs12 -storepass "$PASSWORD" -noprompt + + # Create PKCS12 keystore with server cert + key + openssl pkcs12 -export -out "$ks_name" \ + -in "${name}.crt" -inkey "${name}.key" \ + -name "$alias" -macalg SHA256 -passout "pass:$PASSWORD" + + # Import CA into keystore + keytool -importcert -keystore "$ks_name" -alias localca \ + -file "$ca_cert" -noprompt -storepass "$PASSWORD" -storetype pkcs12 + + # Clean up + rm -f "${name}.key" "${name}.csr" "${name}.crt" "$san_config" +} + +# Subject shared by the service certificates. CN=Zowe Service is what +# config/local/gateway-service.yml lists in apiml.security.x509.registry.allowedUsers, +# which is matched against the client certificate's common name. +ZOWE_SERVICE_DN="C = CZ +ST = Prague +L = Prague +O = Zowe Sample +OU = API Mediation Layer +CN = Zowe Service" + +# --- localhost standard --- +generate_localhost_keystore \ + "localhost" "localhost" \ + "localhost.keystore.p12" "localhost.truststore.p12" \ + "../local_ca/localca.pem" "../local_ca/local_ca.key" \ + "$ZOWE_SERVICE_DN" "$LOCALHOST_SANS" + +# Export convenience files +keytool -exportcert -keystore localhost.keystore.p12 -alias localhost \ + -storepass "$PASSWORD" -storetype pkcs12 -rfc -file localhost.pem +openssl pkcs12 -in localhost.keystore.p12 -nocerts -nodes \ + -passin "pass:$PASSWORD" -out localhost.keystore.key +# Export certificate in PEM format (OpenTelemetry collector requires PEM) +openssl pkcs12 -in localhost.keystore.p12 -passin "pass:$PASSWORD" -nokeys 2>/dev/null \ + | openssl x509 -outform PEM -out localhost.keystore.cer 2>/dev/null || true + +# --- localhost2: signed by the secondary CA, and its truststore trusts only that CA --- +generate_localhost_keystore \ + "localhost2" "localhost" \ + "localhost2.keystore.p12" "localhost2.truststore.p12" \ + "../local_ca/localca2.pem" "../local_ca/local_ca2.key" \ + "C = CZ +ST = Prague +L = Prague +O = Zowe Sample +OU = API Mediation Layer +CN = Zowe Service 2" "$LOCALHOST_SANS" + +# --- nonlocalhost --- +# Intentionally does NOT match "localhost". This keystore exists to prove that strict +# hostname verification rejects a service whose certificate is for another host, so a +# SAN entry for localhost here silently disables the tests that depend on it. +generate_localhost_keystore \ + "nonlocalhost.local" "nonlocalhost" \ + "nonlocalhost.keystore.p12" "does-not-matter.p12" \ + "../local_ca/localca.pem" "../local_ca/local_ca.key" \ + "C = CZ +ST = Czechia +L = Prague +O = Broadcom +OU = MSD +CN = nonlocalhost.local" \ + "DNS.1 = nonlocalhost.local" +rm -f does-not-matter.p12 + +# --- localhost-multi --- +# Serves the multi-instance local setup, where config/local-multi addresses the second +# instance as https://localhost2:10021 — so the certificate has to answer for localhost2 +# and localhost3 as well, not just localhost. +generate_localhost_keystore \ + "localhost-multi" "localhost-multi" \ + "localhost-multi.keystore.p12" "localhost-multi.truststore.p12" \ + "../local_ca/localca.pem" "../local_ca/local_ca.key" \ + "$ZOWE_SERVICE_DN" \ + "$LOCALHOST_SANS +DNS.3 = localhost2 +DNS.4 = localhost3" + +# Trusted CAs chain for NGINX proxy +cat ../local_ca/localca.cer > trusted_CAs.cer + +for ts in localhost.truststore.p12 localhost2.truststore.p12 localhost-multi.truststore.p12; do + finalize_truststore "$ts" +done + +# Import mockserver certificate for zaas-client tests +# mockserver-netty presents this cert during TLS negotiation +MOCKSERVER_TMP=$(mktemp) +cat > "$MOCKSERVER_TMP" << 'MOCKSERVER_CERT' +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIEPhwe6TANBgkqhkiG9w0BAQsFADBiMRswGQYDVQQDDBJ3 +d3cubW9ja3NlcnZlci5jb20xEzARBgNVBAoMCk1vY2tTZXJ2ZXIxDzANBgNVBAcM +BkxvbmRvbjEQMA4GA1UECAwHRW5nbGFuZDELMAkGA1UEBhMCVUswIBcNMTYwNjIw +MTYzNDE0WhgPMjExNzA1MjcxNjM0MTRaMGIxGzAZBgNVBAMMEnd3dy5tb2Nrc2Vy +dmVyLmNvbTETMBEGA1UECgwKTW9ja1NlcnZlcjEPMA0GA1UEBwwGTG9uZG9uMRAw +DgYDVQQIDAdFbmdsYW5kMQswCQYDVQQGEwJVSzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAPGORrdkwTY1H1dvQPYaA+RpD+pSbsvHTtUSU6H7NQS2qu1p +sE6TEG2fE+Vb0QIXkeH+jjKzcfzHGCpIU/0qQCu4RVycrIW4CCdXjl+T3L4C0I3R +mIMciTig5qcAvY9P5bQAdWDkU36YGrCjGaX3QlndGxD9M974JdpVK4cqFyc6N4gA +Onys3uS8MMmSHTjTFAgR/WFeJiciQnal+Zy4ZF2x66CdjN+hP8ch2yH/CBwrSBc0 +ZeH2flbYGgkh3PwKEqATqhVa+mft4dCrvqBwGhBTnzEGWK/qrl9xB4mTs4GQ/Z5E +8rXzlvpKzVJbfDHfqVzgFw4fQFGV0XMLTKyvOX0CAwEAAaNkMGIwHQYDVR0OBBYE +FH3W3sL4XRDM/VnRayaSamVLISndMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQD +AgG2MCMGA1UdJQQcMBoGCCsGAQUFBwMBBggrBgEFBQcDAgYEVR0lADANBgkqhkiG +9w0BAQsFAAOCAQEAecfgKuMxCBe/NxVqoc4kzacf9rjgz2houvXdZU2UDBY3hCs4 +MBbM7U9Oi/3nAoU1zsA8Rg2nBwc76T8kSsfG1TK3iJkfGIOVjcwOoIjy3Z8zLM2V +YjYbOUyAQdO/s2uShAmzzjh9SV2NKtcNNdoE9e6udvwDV8s3NGMTUpY5d7BHYQqV +sqaPGlsKi8dN+gdLcRbtQo29bY8EYR5QJm7QJFDI1njODEnrUjjMvWw2yjFlje59 +j/7LBRe2wfNmjXFYm5GqWft10UJ7Ypb3XYoGwcDac+IUvrgmgTHD+E3klV3SUi8i +Gm5MBedhPkXrLWmwuoMJd7tzARRHHT6PBH/ZGw== +-----END CERTIFICATE----- +MOCKSERVER_CERT + +keytool -importcert -keystore localhost.truststore.p12 \ + -storetype pkcs12 -storepass "$PASSWORD" \ + -alias "www.mockserver.com" -file "$MOCKSERVER_TMP" -noprompt +rm -f "$MOCKSERVER_TMP" + +# ── 3. Self-signed keystores ─────────────────────────────────────────────── +echo "" +echo "=== Generating self-signed keystores ===" +cd "$KEYSTORE_DIR/selfsigned" + +generate_selfsigned_keystore() { + local name="$1" # base name for the intermediate files + local alias="$2" # alias of the key entry in the keystore + local ks_name="$3" + local ts_name="$4" + local subject="$5" # subject in openssl -subj form + + # Generate self-signed cert (no CA) + openssl req -x509 -newkey rsa:2048 -nodes -keyout "${name}.key" \ + -out "${name}.crt" -days 3650 -sha256 \ + -subj "$subject" \ + -addext "subjectAltName=DNS:localhost,DNS:localhost.localdomain,IP:127.0.0.1" \ + -addext "keyUsage=digitalSignature,nonRepudiation,keyEncipherment" \ + -addext "extendedKeyUsage=clientAuth,serverAuth" + + # Create keystore + openssl pkcs12 -export -out "$ks_name" \ + -in "${name}.crt" -inkey "${name}.key" \ + -name "$alias" -macalg SHA256 -passout "pass:$PASSWORD" + + # Create truststore with self-signed cert + keytool -import -alias localca -file "${name}.crt" \ + -keystore "$ts_name" -storetype pkcs12 -storepass "$PASSWORD" -noprompt + + rm -f "${name}.key" "${name}.crt" +} + +# Standard self-signed +generate_selfsigned_keystore "localhost" "localhost" \ + "localhost.keystore.p12" "localhost.truststore.p12" \ + "/C=CZ/ST=Prague/L=Prague/O=Zowe Sample/OU=API Mediation Layer/CN=Zowe Service" + +# Untrusted self-signed (different CA, not trusted by any API ML service) +generate_selfsigned_keystore "localhost-untrusted" "localhost" \ + "localhost-untrusted.keystore.p12" "does-not-matter.p12" \ + "/C=CZ/ST=Brno/L=Brno/O=Zowe Sample/OU=API Mediation Layer/CN=Zowe Self-Signed Untrusted Service" +rm -f does-not-matter.p12 + +# Create an untrusted truststore from a different self-signed CA +generate_ca untrusted_ca.key untrusted_ca.crt "C = CZ +ST = Czechia +L = Prague +O = Untrusted +OU = IT +CN = Untrusted CA" +keytool -import -alias localca -file untrusted_ca.crt \ + -keystore "localhost-untrusted.truststore.p12" \ + -storetype pkcs12 -storepass "$PASSWORD" -noprompt +rm -f untrusted_ca.key untrusted_ca.crt + +# ── 4. Docker keystores ──────────────────────────────────────────────────── +echo "" +echo "=== Generating Docker keystores ===" +cd "$KEYSTORE_DIR/docker" + +# Re-generate local CA PEM files for signing (needed by docker generator) +openssl pkcs12 -in ../local_ca/localca.keystore.p12 -nocerts -nodes \ + -passin "pass:$CA_PASSWORD" -out local_ca.key +keytool -exportcert -keystore ../local_ca/localca.keystore.p12 -alias localca \ + -storepass "$CA_PASSWORD" -rfc -file local_ca.pem + +# Generate all-services cert with extended SANs for Docker service names +san_config=$(mktemp) +cat > "$san_config" << 'SANEOF' +[req] +default_bits = 2048 +prompt = no +default_md = sha256 +distinguished_name = dn + +[v3_req] +extendedKeyUsage = clientAuth, serverAuth +subjectAltName = @alt_names + +[dn] +C = CZ +ST = Czechia +L = Prague +O = Broadcom +OU = MSD +CN = Zowe Component + +[alt_names] +DNS.1 = localhost +DNS.2 = 127.0.0.1 +DNS.3 = zaas-service +DNS.4 = zaas-service-2 +DNS.5 = api-catalog-services +DNS.6 = api-catalog-services-2 +DNS.7 = caching-service +DNS.8 = caching-service-2 +DNS.9 = caching-service-3 +DNS.10 = discovery-service +DNS.11 = discovery-service-2 +DNS.12 = discoverable-client +DNS.13 = discoverable-client-1 +DNS.14 = discoverable-client-2 +DNS.15 = discoverable-client-3 +DNS.16 = discoverable-client-4 +DNS.17 = discoverable-client-unknown +DNS.18 = mock-services +DNS.19 = mock-services-2 +DNS.20 = mock-services-unknown +DNS.21 = reverse-proxy +DNS.22 = gateway-service +DNS.23 = gateway-service-2 +DNS.24 = central-gateway-service +DNS.25 = central-gateway-service-2 +DNS.26 = apiml +DNS.27 = apiml-2 +DNS.28 = apiml-3 +DNS.29 = nodejs-sample-app +DNS.30 = python-sample-app +SANEOF + +# Generate key and CSR +openssl genrsa -out all-services.key 2048 +openssl req -new -key all-services.key -out all-services.csr -config "$san_config" + +# Sign with local CA +openssl x509 -req -in all-services.csr \ + -CA local_ca.pem -CAkey local_ca.key \ + -out all-services.crt -days 3650 -sha256 \ + -extfile "$san_config" -extensions v3_req -CAcreateserial + +# Full chain: server cert + CA cert +cat all-services.crt local_ca.pem > all-services-chain.crt + +# Create keystore with server cert + key +openssl pkcs12 -export -out all-services.keystore.p12 \ + -in all-services-chain.crt -inkey all-services.key \ + -name localhost -macalg SHA256 -passout "pass:$PASSWORD" + +# Import CA into keystore +keytool -importcert -keystore all-services.keystore.p12 -alias "zowe development instances certificate authority" \ + -file local_ca.pem -noprompt -storepass "$PASSWORD" -storetype pkcs12 + +# server-only.p12 — the all-services certificate without the CA in its own chain, +# used by the Docker services that present a leaf and let the truststore supply the CA. +openssl pkcs12 -export -out server-only.p12 \ + -in all-services.crt -inkey all-services.key \ + -name localhost -macalg SHA256 \ + -passout "pass:$PASSWORD" + +# The CA still goes in as a trusted entry, same alias as all-services.keystore.p12 +keytool -importcert -keystore server-only.p12 -alias "zowe development instances certificate authority" \ + -file local_ca.pem -noprompt -storepass "$PASSWORD" -storetype pkcs12 + +# Create truststore +keytool -import -alias "zowe development instances certificate authority" \ + -file local_ca.pem -keystore all-services.truststore.p12 \ + -storetype pkcs12 -storepass "$PASSWORD" -noprompt + +finalize_truststore all-services.truststore.p12 + +# Convenience exports +cp all-services.crt all-services.keystore.cer +cp all-services.key all-services.keystore.key +cp all-services.crt all-services.cer +cat all-services.key > all-services.pem +cat all-services.crt >> all-services.pem + +# client-cert.p12 — used by integration tests as a client keystore. Its key entry keeps +# the "CN=zowe component, O=OMP" subject that test assertions match on. +echo "" +echo "--- Generating client-cert keystore ---" + +# Generate key and CSR +openssl genrsa -out client-cert.key 2048 +cat > client-cert-san.cnf </dev/null \ + | openssl x509 -pubkey -noout 2>/dev/null \ + | openssl pkey -pubin -outform DER 2>/dev/null \ + | openssl base64 -A > "$REPO_ROOT/common-service-core/src/test/resources/jwt-public-key.pub" + +# ── 7. Sanity checks ─────────────────────────────────────────────────────── +# Assert the properties tests depend on, so a change to the generation logic fails +# here instead of surfacing as an unrelated TLS test failure much later. +echo "" +echo "=== Verifying generated keystores ===" + +assert_san_absent() { + local ks="$1" host="$2" + if keytool -list -v -keystore "$ks" -storepass "$PASSWORD" 2>/dev/null \ + | grep -q "DNSName: $host"; then + echo "ERROR: $ks must NOT carry a SAN entry for '$host'" >&2 + exit 1 + fi +} + +assert_san_present() { + local ks="$1" host="$2" + if ! keytool -list -v -keystore "$ks" -storepass "$PASSWORD" 2>/dev/null \ + | grep -q "DNSName: $host"; then + echo "ERROR: $ks is missing a SAN entry for '$host'" >&2 + exit 1 + fi +} + +assert_subject_cn() { + local ks="$1" cn="$2" + if ! keytool -list -v -keystore "$ks" -storepass "$PASSWORD" 2>/dev/null \ + | grep -q "^Owner: CN=$cn,"; then + echo "ERROR: $ks is missing a certificate with common name '$cn'" >&2 + exit 1 + fi +} + +assert_issuer_cn() { + local ks="$1" cn="$2" + if ! keytool -list -v -keystore "$ks" -storepass "$PASSWORD" 2>/dev/null \ + | grep -q "^Issuer: CN=$cn,"; then + echo "ERROR: $ks must be signed by '$cn'" >&2 + exit 1 + fi +} + +# Must not match localhost: backs the strict hostname verification tests +assert_san_absent "$KEYSTORE_DIR/localhost/nonlocalhost.keystore.p12" localhost +# Must match: normal service certificates +assert_san_present "$KEYSTORE_DIR/localhost/localhost.keystore.p12" localhost +assert_san_present "$KEYSTORE_DIR/selfsigned/localhost.keystore.p12" localhost +assert_san_present "$KEYSTORE_DIR/docker/all-services.keystore.p12" gateway-service +assert_san_present "$KEYSTORE_DIR/docker/all-services.keystore.p12" discovery-service +# config/local-multi reaches the second instance as https://localhost2:10021 +assert_san_present "$KEYSTORE_DIR/localhost/localhost-multi.keystore.p12" localhost2 +assert_san_present "$KEYSTORE_DIR/localhost/localhost-multi.keystore.p12" localhost3 +# apiml.security.x509.registry.allowedUsers in config/local matches on this common name +assert_subject_cn "$KEYSTORE_DIR/localhost/localhost.keystore.p12" "Zowe Service" +# localhost2 belongs to the second CA — both TomcatHttpsTest cases that use it rely on it +# being foreign to the main PKI +assert_issuer_cn "$KEYSTORE_DIR/localhost/localhost2.keystore.p12" \ + "Zowe Development Instances Certificate Authority 2" + +echo "All checks passed." + +# ── Done ─────────────────────────────────────────────────────────────────── +# Fix permissions: OpenSSL creates .key files with 0600, which the OpenTelemetry +# collector container (Register job) runs as a non-root user and cannot read. +# Scope this to the one key that is actually mounted rather than every private key. +chmod 644 "$KEYSTORE_DIR/localhost/localhost.keystore.key" + +# Stamp the tree with the checksum of the script that produced it. +if command -v sha256sum &>/dev/null; then + sha256sum "$SCRIPT_PATH" | cut -d' ' -f1 > "$STAMP_FILE" +else + shasum -a 256 "$SCRIPT_PATH" | cut -d' ' -f1 > "$STAMP_FILE" +fi + +echo "" +echo "=== Keystore generation complete ===" +echo "All keystores generated under: $KEYSTORE_DIR" +echo "Test resources copied to: zaas-client/src/test/resources/" +echo "" +echo "Generated keystores:" +find "$KEYSTORE_DIR" -type f \( -name '*.p12' -o -name '*.cer' -o -name '*.key' -o -name '*.pem' \) | sort | while read -r f; do + echo " ${f#"$REPO_ROOT"/}" +done diff --git a/zaas-client/src/test/resources/localhost.keystore.p12 b/zaas-client/src/test/resources/localhost.keystore.p12 deleted file mode 100644 index 89c794c32f..0000000000 Binary files a/zaas-client/src/test/resources/localhost.keystore.p12 and /dev/null differ diff --git a/zaas-client/src/test/resources/localhost.truststore.p12 b/zaas-client/src/test/resources/localhost.truststore.p12 deleted file mode 100644 index 88376e4437..0000000000 Binary files a/zaas-client/src/test/resources/localhost.truststore.p12 and /dev/null differ diff --git a/zowe-cli-id-federation-plugin/build.gradle b/zowe-cli-id-federation-plugin/build.gradle index d4719eb732..1bbf21db59 100644 --- a/zowe-cli-id-federation-plugin/build.gradle +++ b/zowe-cli-id-federation-plugin/build.gradle @@ -8,9 +8,9 @@ node { npmVersion = libs.versions.projectNpm.get() distBaseUrl = "https://nodejs.org/dist" npmInstallCommand = "ci" - workDir = file("${project.rootDir}/tools/nodejs") - npmWorkDir = file("${project.rootDir}/tools/npm") - yarnWorkDir = file("${project.rootDir}/tools/yarn") + workDir = file("${project.projectDir}/tools/nodejs") + npmWorkDir = file("${project.projectDir}/tools/npm") + yarnWorkDir = file("${project.projectDir}/tools/yarn") nodeProjectDir = file("${project.projectDir}") }