From 6156d5736303c434544b4543e6cdd95cfc4d3c9b Mon Sep 17 00:00:00 2001 From: Tero Saarni Date: Fri, 27 May 2022 19:22:28 +0300 Subject: [PATCH 1/2] Update expired test certificates Some of the certificates in test resources had unintentionally expired. They could cause test errors if used in tests that expects valid certificates. * Reformatted ssl.txt file into a shell script ssl.sh which can be executed to regenerate certificates and keystores. * Updated all test certificates with 30 year expiration period (was 3 years). Signed-off-by: Tero Saarni --- .../tls/client-cert-other-ca-chain.pem | 61 +++--- .../resources/tls/client-cert-other-ca.pem | 28 +-- .../tls/client-cert-root-ca-chain.pem | 61 +++--- .../resources/tls/client-cert-root-ca.pem | 28 +-- src/test/resources/tls/client-cert.pem | 38 ++-- src/test/resources/tls/client-csr.pem | 26 +-- src/test/resources/tls/client-key.pem | 52 +++--- .../tls/client-keystore-other-ca.jks | Bin 2803 -> 3377 bytes .../tls/client-keystore-other-ca.p12 | Bin 3154 -> 3170 bytes .../resources/tls/client-keystore-root-ca.jks | Bin 2800 -> 3377 bytes .../resources/tls/client-keystore-root-ca.p12 | Bin 3154 -> 3170 bytes src/test/resources/tls/client-keystore.jks | Bin 2065 -> 2068 bytes src/test/resources/tls/client-keystore.p12 | Bin 2423 -> 2561 bytes src/test/resources/tls/client-self-signed.crt | Bin 709 -> 711 bytes .../tls/client-truststore-root-ca.jks | Bin 833 -> 846 bytes .../tls/client-truststore-root-ca.p12 | Bin 1066 -> 1143 bytes src/test/resources/tls/client-truststore.jks | Bin 782 -> 1079 bytes src/test/resources/tls/client-truststore.p12 | Bin 1018 -> 1079 bytes src/test/resources/tls/host1-cert.pem | 38 ++-- src/test/resources/tls/host1-key.pem | 52 +++--- src/test/resources/tls/host1.crt | Bin 707 -> 708 bytes src/test/resources/tls/host2-cert.pem | 38 ++-- src/test/resources/tls/host2-key.pem | 52 +++--- src/test/resources/tls/host2.crt | Bin 715 -> 717 bytes src/test/resources/tls/host3-cert.pem | 39 ++-- src/test/resources/tls/host3-key.pem | 52 +++--- src/test/resources/tls/host3.crt | Bin 719 -> 721 bytes src/test/resources/tls/host4-cert.pem | 42 +++-- src/test/resources/tls/host4-key.pem | 52 +++--- src/test/resources/tls/host4.crt | Bin 776 -> 778 bytes src/test/resources/tls/host5-cert.pem | 39 ++-- src/test/resources/tls/host5-key.pem | 52 +++--- src/test/resources/tls/host5.crt | Bin 713 -> 726 bytes src/test/resources/tls/host5.p12 | Bin 2386 -> 2402 bytes src/test/resources/tls/host5.pem | 31 +-- src/test/resources/tls/int-ca/01.pem | 104 +++++------ src/test/resources/tls/int-ca/02.pem | 102 +++++----- .../resources/tls/int-ca/ca-cert-root-ca.pem | 30 +-- src/test/resources/tls/int-ca/ca-cert.pem | 34 ++-- src/test/resources/tls/int-ca/ca-csr.pem | 24 +-- src/test/resources/tls/int-ca/ca-key.pem | 56 +++--- src/test/resources/tls/int-ca/index.txt | 4 +- src/test/resources/tls/int-ca/index.txt.old | 2 +- src/test/resources/tls/localhost.crt | Bin 715 -> 717 bytes .../resources/tls/mim-server-keystore.jks | Bin 2079 -> 2081 bytes .../resources/tls/multiple-alias-password.jks | Bin 7582 -> 7581 bytes src/test/resources/tls/multiple.jks | Bin 8283 -> 7791 bytes src/test/resources/tls/openssl.cnf | 12 +- src/test/resources/tls/other-ca/01.pem | 104 +++++------ src/test/resources/tls/other-ca/ca-cert.pem | 33 ++-- src/test/resources/tls/other-ca/ca-key.pem | 56 +++--- src/test/resources/tls/other-ca/index.txt | 2 +- src/test/resources/tls/root-ca/01.pem | 104 +++++------ src/test/resources/tls/root-ca/02.pem | 104 +++++------ src/test/resources/tls/root-ca/03.pem | 102 +++++----- src/test/resources/tls/root-ca/ca-cert.pem | 33 ++-- src/test/resources/tls/root-ca/ca-key.pem | 56 +++--- src/test/resources/tls/root-ca/crl.pem | 18 +- src/test/resources/tls/root-ca/index.txt | 6 +- src/test/resources/tls/root-ca/index.txt.old | 6 +- .../resources/tls/server-cert-ca-chain.pem | 60 +++--- src/test/resources/tls/server-cert-ec.pem | 16 +- src/test/resources/tls/server-cert-int-ca.pem | 30 +-- .../resources/tls/server-cert-other-ca.pem | 30 +-- .../resources/tls/server-cert-root-ca.pem | 30 +-- src/test/resources/tls/server-cert.pem | 38 ++-- src/test/resources/tls/server-csr.pem | 26 +-- .../resources/tls/server-key-ec-pkcs1.pem | 2 +- src/test/resources/tls/server-key-ec.pem | 4 +- src/test/resources/tls/server-key-pkcs1.pem | 50 ++--- src/test/resources/tls/server-key.pem | 52 +++--- src/test/resources/tls/server-keystore-ec.jks | Bin 868 -> 527 bytes src/test/resources/tls/server-keystore-ec.p12 | Bin 868 -> 1021 bytes .../resources/tls/server-keystore-root-ca.jks | Bin 2057 -> 2059 bytes .../resources/tls/server-keystore-root-ca.p12 | Bin 2378 -> 2378 bytes src/test/resources/tls/server-keystore.jks | Bin 2071 -> 2073 bytes src/test/resources/tls/server-keystore.p12 | Bin 2423 -> 2561 bytes .../server-truststore-other-ca-fallback.jks | Bin 832 -> 1143 bytes .../server-truststore-root-ca-fallback.jks | Bin 830 -> 1143 bytes .../tls/server-truststore-root-ca-host2.jks | Bin 1634 -> 2039 bytes .../tls/server-truststore-root-ca-host3.jks | Bin 1634 -> 2039 bytes src/test/resources/tls/server-truststore.jks | Bin 776 -> 778 bytes src/test/resources/tls/server-truststore.p12 | Bin 1010 -> 1079 bytes src/test/resources/tls/sni-keystore.jks | Bin 12319 -> 12346 bytes src/test/resources/tls/sni-keystore.p12 | Bin 13497 -> 13996 bytes .../resources/tls/sni-truststore-host1.jks | Bin 774 -> 1079 bytes .../resources/tls/sni-truststore-host2.jks | Bin 782 -> 1079 bytes .../resources/tls/sni-truststore-host3.jks | Bin 786 -> 1095 bytes .../resources/tls/sni-truststore-host4.jks | Bin 843 -> 1143 bytes .../resources/tls/sni-truststore-host5.jks | Bin 780 -> 1095 bytes src/test/resources/tls/{ssl.txt => ssl.sh} | 176 ++++++++++-------- 91 files changed, 1165 insertions(+), 1122 deletions(-) rename src/test/resources/tls/{ssl.txt => ssl.sh} (67%) mode change 100644 => 100755 diff --git a/src/test/resources/tls/client-cert-other-ca-chain.pem b/src/test/resources/tls/client-cert-other-ca-chain.pem index 0470959fa02..9e42d2c20ab 100644 --- a/src/test/resources/tls/client-cert-other-ca-chain.pem +++ b/src/test/resources/tls/client-cert-other-ca-chain.pem @@ -1,34 +1,35 @@ -----BEGIN CERTIFICATE----- -MIICmDCCAYACAQIwDQYJKoZIhvcNAQELBQAwEzERMA8GA1UEAwwIT3RoZXIgQ0Ew -HhcNMTgwNTI2MTEzNjUyWhcNMjgwNTIzMTEzNjUyWjARMQ8wDQYDVQQDEwZjbGll -bnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVmCecLdUZU917hweV -z4JqvZ9vZEi1rH+BG98HYfRR/h3QaobxPImZu3hzKHZ+MPbm94HunLPAVA9yZhvZ -MToNfOuD4TUPBPloBuNzwBfZk2O4CaXeG4ailVWUfm5t/l+RD/55zYKuhw1/Vl9l -cOryF2XAmPQ2F1gwEKK7wt1Ak8zw8/yeYgBv1/F+ibCMvR6FVj9ABBEfTM+oOs4o -y51otUv0h63GqYgXMJyLX7q+AGWdC3srwwLQROtkzi7y00g/YryXUoIqdXEI7CrN -L35rZXcZ5LfGRwFX9evX11PpT3OShYlsJBcFE9KMatRoIWd6xUKlxTk0yLjoOUE2 -tsMJAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAFxse/X+Els3PWMTHrC5LXfFTCL3 -Hq2/ffnz9gXzp6476voCgpT8imOOnv/svesQPb2xfl0DWMh4D1jZU2vJIIqaZfkm -9K0eMT6lzFcB9601tcikXtzf7xKbZXGow3PyUDVtrYCmgkA9UT+8BMd3v0rvInuC -r1F1u9DCvUcN4fMUPLoFN2i9VsnqixWdBV75fnECA4HA7XjYXpbsI5uwIQtrr+kj -xIhzpfkHZLqzDq9770Za+WBkpxfkq4b1EQmCNqJfSI5kpkhvJHbXkwMrN2pUrWKZ -0xmt/ERlNaRCWEbRS6WcY2kyN/6TnvL7hjPOpIafmdPB0Izp65rM+0pYmPQ= +MIICmjCCAYICAQIwDQYJKoZIhvcNAQELBQAwEzERMA8GA1UEAwwIT3RoZXIgQ0Ew +IBcNMjIwNTI3MTcwNjExWhgPMjA1MjA1MTkxNzA2MTFaMBExDzANBgNVBAMTBmNs +aWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMhVf8Oz1GRt+Wju ++k0WkrVVf9noLaZRjLnt/WrwT2dzrr1AZN50wcJ8vJZtP41Jpswci/UwFec+o542 +yU2SLMTxAqbuPVuY55WvAPTRzo5SdIQaOqHdSwbkgagIkFOSD795xqkefFZ1m/R7 +aNwcTUxFGWFCDhYt98GRdstxGiNhVYO4JstlLY/9eDZx9MVfT5xShHNnre7dQMW0 +x4EXRR/r04KJgFr6qlcLzw+REj9Wz3Xlh8MQJqPe0JnKDd8o3z63rkOaBeEVCX4F +gAcvirDkKCg+1g8iLvXBD5tNn3F1JhQ+Nx8B8Hi01f8JUZMGOXOIL6qn9+Ct4Zev +Ko8zBV0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAnPaERwr1oqICKb+rGcbN5Vua +FsEFq/To4T1Jdn7K3Buyc56paR5K7MBNb90BXkoRiYxR6utgU5d27T1cgmgjc7u3 +41/xl9vXwhrgLP4SAD3bRRULqnpdQ/imiqXobo8eKou0thqx1zFKBWiYaxiEx8BV +HWbPa7+J/IeyoOHmm9CCMzStdgc6/6GLI/Jr7qDUycVy8kJW8u+PrHE9NTwf8s7B +aK5aTgJnTvbfmpPgcTmdR8gT7YabNYCtj1rMb9PcaI7jguIcyfVNsJBPdrbyZGE2 +QR/mS7NlF0sAjNkIJEHCOn0YW0SX+fEYMl8dObvqNq2fVzF4zahPpyUOPJSMEA== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIIC/DCCAeSgAwIBAgIJAJDFe23gf0pwMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV -BAMMCE90aGVyIENBMB4XDTE4MDUyNjExMzY1MloXDTE4MDYyNTExMzY1MlowEzER -MA8GA1UEAwwIT3RoZXIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQDu83z3Z2yKLNbhrqG6Zjl8QHdDVH1bSXi9zl4mDhJP5Ha31WYMm0WtFUbrhArS -dy/ZAj7Zx1o3yDA6l0yELVtsqriHs9y6rq4cZB8aqZ423pzSfUrKUh1xijsVNBGZ -NVRUTkpRA28q+1q27+fuOuNuGXnTXWIC8VvARGqE39bPALWK94GEIudBFh+E50kr -MdBPaLdhR7hnkGqEpIm0MUqvBj0JC9pT8pnYZSzpWUTzHrts/e0oUYg/n2xdtF/v -JNciyPw3awiXUrSepj1pnEY/DJH8GVmtmaGnptDwnec41Er65tcRqD3I6P/kh5QM -zMVchTMRHGwAXldzKNAmiu2pAgMBAAGjUzBRMB0GA1UdDgQWBBT6372kBOogJIix -pBzyuAy6Baht5TAfBgNVHSMEGDAWgBT6372kBOogJIixpBzyuAy6Baht5TAPBgNV -HRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA+LsUAQq7BujladIOFZEjR -qEVXdqTXARU5p3Vzw6ydfgtruk4Zb/pyYK43X44O6KBHQoa2jJaSE7su6jrarrxi -ZhyySPjIvK9nyAPzEFlUXxcGMTVGE+lanXWEGsDe6ub+68EGzLpO3U9w0io4gKUE -U6N/VIctsO5es5qLYTu1O3COKnu+CUquqvX8m27Ko6EXg/+P14Gne5Dl839Psqh4 -ceHhegH3i/UgYqB02ZpohuIwClTo+W2aR1ENdBM+l2eOtcXCQ/ABjFRHcNOS50r/ -GJUB+J9fn/NT0m9EqkID1ccdjNT1QjBEv1aDlclioRozjjeMZPRlUPMC47sFZGS/ +MIIDCTCCAfGgAwIBAgIUXcKRK63PeoPunOPyPKq6xo3CxyEwDQYJKoZIhvcNAQEL +BQAwEzERMA8GA1UEAwwIT3RoZXIgQ0EwIBcNMjIwNTI3MTcwNjEwWhgPMjA1MjA1 +MTkxNzA2MTBaMBMxETAPBgNVBAMMCE90aGVyIENBMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAs29di8fcwaZkUSORRvuDOYUnqnfksEFP8gUzVVWTFxEo +YdeXkB4uUL81DOKD5Yti5F0gjMioapNfN/0cQc1GcI5tE04mTgdaDaJSbwkhW5ge +9FeYwlmQuYRf2Kl6oIPYv7/+4JCcXF9BioKVJw2nH2jWM5IhvKj2s8Z19T1QPK16 +gFR+E7JhFsPRC6TvcxunKkHHkYR/QEKGXRcv/hhJGfMuJXj9qO0XSIP+LyD6uJf1 +ylyhrYEyBJif0r7EWds4qvvOHy6D7ItQIQk3A3iU8QcG/k/vZ+xGNczhJprrRvcC +OdCqjCUX8XurJS6L96CVc8B6HNMgzeyUuH1fJJVclQIDAQABo1MwUTAdBgNVHQ4E +FgQU9W8gOHNTlHu9nYNsSjf8iMBF3pswHwYDVR0jBBgwFoAU9W8gOHNTlHu9nYNs +Sjf8iMBF3pswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAnxEZ +5ib0otUZQgKHlSIucXPvzWG4tVCSiN1z8rUPuzkK5V9IRo//nsioD3R9Hhwuv+Ak ++ZDkV4m/FQMt0ZmepUnnBANTC4P3cS9v7Rvm4rBtMJ3HJ4SEHgs+x0dmKLJguVgk +ncMgJZ52qJmjBcZrDtV48GQpH2EbJCLCltJ1r0UsA9+QhnUHDh1ysJ8QgMUL6fRh +NU81T5/sm1l8h+K8ZoSdGMUvKqvJlW/cZ7+7Rs6Y+RqRJ/FEA30N8q8yr0jDMmak +V8DBhrSBaLFGvNRhCTj6PJYLmdUHt55mrteGMz+nWWHlTdjGlL1gvfw+7aMBM/b8 +ZpSG1toE9ADK8cV4Mg== -----END CERTIFICATE----- diff --git a/src/test/resources/tls/client-cert-other-ca.pem b/src/test/resources/tls/client-cert-other-ca.pem index 19229ac79e2..a39327dfb6f 100644 --- a/src/test/resources/tls/client-cert-other-ca.pem +++ b/src/test/resources/tls/client-cert-other-ca.pem @@ -1,16 +1,16 @@ -----BEGIN CERTIFICATE----- -MIICmDCCAYACAQIwDQYJKoZIhvcNAQELBQAwEzERMA8GA1UEAwwIT3RoZXIgQ0Ew -HhcNMTgwNTI2MTEzNjUyWhcNMjgwNTIzMTEzNjUyWjARMQ8wDQYDVQQDEwZjbGll -bnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVmCecLdUZU917hweV -z4JqvZ9vZEi1rH+BG98HYfRR/h3QaobxPImZu3hzKHZ+MPbm94HunLPAVA9yZhvZ -MToNfOuD4TUPBPloBuNzwBfZk2O4CaXeG4ailVWUfm5t/l+RD/55zYKuhw1/Vl9l -cOryF2XAmPQ2F1gwEKK7wt1Ak8zw8/yeYgBv1/F+ibCMvR6FVj9ABBEfTM+oOs4o -y51otUv0h63GqYgXMJyLX7q+AGWdC3srwwLQROtkzi7y00g/YryXUoIqdXEI7CrN -L35rZXcZ5LfGRwFX9evX11PpT3OShYlsJBcFE9KMatRoIWd6xUKlxTk0yLjoOUE2 -tsMJAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAFxse/X+Els3PWMTHrC5LXfFTCL3 -Hq2/ffnz9gXzp6476voCgpT8imOOnv/svesQPb2xfl0DWMh4D1jZU2vJIIqaZfkm -9K0eMT6lzFcB9601tcikXtzf7xKbZXGow3PyUDVtrYCmgkA9UT+8BMd3v0rvInuC -r1F1u9DCvUcN4fMUPLoFN2i9VsnqixWdBV75fnECA4HA7XjYXpbsI5uwIQtrr+kj -xIhzpfkHZLqzDq9770Za+WBkpxfkq4b1EQmCNqJfSI5kpkhvJHbXkwMrN2pUrWKZ -0xmt/ERlNaRCWEbRS6WcY2kyN/6TnvL7hjPOpIafmdPB0Izp65rM+0pYmPQ= +MIICmjCCAYICAQIwDQYJKoZIhvcNAQELBQAwEzERMA8GA1UEAwwIT3RoZXIgQ0Ew +IBcNMjIwNTI3MTcwNjExWhgPMjA1MjA1MTkxNzA2MTFaMBExDzANBgNVBAMTBmNs +aWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMhVf8Oz1GRt+Wju ++k0WkrVVf9noLaZRjLnt/WrwT2dzrr1AZN50wcJ8vJZtP41Jpswci/UwFec+o542 +yU2SLMTxAqbuPVuY55WvAPTRzo5SdIQaOqHdSwbkgagIkFOSD795xqkefFZ1m/R7 +aNwcTUxFGWFCDhYt98GRdstxGiNhVYO4JstlLY/9eDZx9MVfT5xShHNnre7dQMW0 +x4EXRR/r04KJgFr6qlcLzw+REj9Wz3Xlh8MQJqPe0JnKDd8o3z63rkOaBeEVCX4F +gAcvirDkKCg+1g8iLvXBD5tNn3F1JhQ+Nx8B8Hi01f8JUZMGOXOIL6qn9+Ct4Zev +Ko8zBV0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAnPaERwr1oqICKb+rGcbN5Vua +FsEFq/To4T1Jdn7K3Buyc56paR5K7MBNb90BXkoRiYxR6utgU5d27T1cgmgjc7u3 +41/xl9vXwhrgLP4SAD3bRRULqnpdQ/imiqXobo8eKou0thqx1zFKBWiYaxiEx8BV +HWbPa7+J/IeyoOHmm9CCMzStdgc6/6GLI/Jr7qDUycVy8kJW8u+PrHE9NTwf8s7B +aK5aTgJnTvbfmpPgcTmdR8gT7YabNYCtj1rMb9PcaI7jguIcyfVNsJBPdrbyZGE2 +QR/mS7NlF0sAjNkIJEHCOn0YW0SX+fEYMl8dObvqNq2fVzF4zahPpyUOPJSMEA== -----END CERTIFICATE----- diff --git a/src/test/resources/tls/client-cert-root-ca-chain.pem b/src/test/resources/tls/client-cert-root-ca-chain.pem index b9900c1a056..ba555dc317c 100644 --- a/src/test/resources/tls/client-cert-root-ca-chain.pem +++ b/src/test/resources/tls/client-cert-root-ca-chain.pem @@ -1,34 +1,35 @@ -----BEGIN CERTIFICATE----- -MIIClzCCAX8CAQMwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHUm9vdCBDQTAe -Fw0xODA1MjYxMTM2NTJaFw0yODA1MjMxMTM2NTJaMBExDzANBgNVBAMTBmNsaWVu -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANWYJ5wt1RlT3XuHB5XP -gmq9n29kSLWsf4Eb3wdh9FH+HdBqhvE8iZm7eHModn4w9ub3ge6cs8BUD3JmG9kx -Og1864PhNQ8E+WgG43PAF9mTY7gJpd4bhqKVVZR+bm3+X5EP/nnNgq6HDX9WX2Vw -6vIXZcCY9DYXWDAQorvC3UCTzPDz/J5iAG/X8X6JsIy9HoVWP0AEER9Mz6g6zijL -nWi1S/SHrcapiBcwnItfur4AZZ0LeyvDAtBE62TOLvLTSD9ivJdSgip1cQjsKs0v -fmtldxnkt8ZHAVf169fXU+lPc5KFiWwkFwUT0oxq1GghZ3rFQqXFOTTIuOg5QTa2 -wwkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAPjmNIKpEVAAJAsL3WwZtMcxHgHV5 -vNf8wF/6iI5a/B6dELDAuykFV4kDht1/8cIudjHSvaG3cIgTOE+2HNwjinVyZ+gz -KTvncmmwD7j/6rBJBLHTsUp5i2LFlKeoepRmyiO59iQxKe2l2cQmDIOZEEh39WdF -9Unnl3S00DTYsGUwRVMzHvRJxN1D1ZiyHeFbLOtE5qtU6zg1Gf4+miusYA1mRgND -V59KOEzmu3opKxwOArEJai9WzcnTdtdUb9EyRu9Q9FapAf5mUnifGM2RaiCeFR+L -7famHrcgSyLyHe4G/G+HdsIu4Qw7MuC7jI5SzWT9qgH5wJrtqnTpWbXjzg== +MIICmTCCAYECAQMwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHUm9vdCBDQTAg +Fw0yMjA1MjcxNzA2MTBaGA8yMDUyMDUxOTE3MDYxMFowETEPMA0GA1UEAxMGY2xp +ZW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyFV/w7PUZG35aO76 +TRaStVV/2egtplGMue39avBPZ3OuvUBk3nTBwny8lm0/jUmmzByL9TAV5z6jnjbJ +TZIsxPECpu49W5jnla8A9NHOjlJ0hBo6od1LBuSBqAiQU5IPv3nGqR58VnWb9Hto +3BxNTEUZYUIOFi33wZF2y3EaI2FVg7gmy2Utj/14NnH0xV9PnFKEc2et7t1AxbTH +gRdFH+vTgomAWvqqVwvPD5ESP1bPdeWHwxAmo97QmcoN3yjfPreuQ5oF4RUJfgWA +By+KsOQoKD7WDyIu9cEPm02fcXUmFD43HwHweLTV/wlRkwY5c4gvqqf34K3hl68q +jzMFXQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBHdw9mxwSGWLmyqfkgF/NU24Gw +oOxc86aQH0eK0xlzWc8qmnu3yRD++5aTgWqVgw9onFJPNNcyg5PDwkwuEPlhWqeJ +fzdvm/gmfYWHiN4MiXAKmq6BtgjChgFtsY16gBfoKD2I6rt68sDLMoBe3QXCCFtV +sefjghLTA6SuTp2R7p1+o2NG2fGviaWcFa7MD93xikIqHyOTeCWvWrotiNUA+k6k +EEYUuKHtdAPFKXzYP25seQ1cy+k4CUv3qvLDxF5d60TXwOqDoxgyDD0uZ+yEZhWi +dfppIQdwdAC8V/cg+d8X9zSkZqnEvXVb0/OBDC2uUYg6yW5bD1u8GHEQlv+D -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -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 +8RQtEBN3//e05KA= -----END CERTIFICATE----- diff --git a/src/test/resources/tls/client-cert-root-ca.pem b/src/test/resources/tls/client-cert-root-ca.pem index f4cd592185c..90f8f1ca5ee 100644 --- a/src/test/resources/tls/client-cert-root-ca.pem +++ b/src/test/resources/tls/client-cert-root-ca.pem @@ -1,16 +1,16 @@ -----BEGIN CERTIFICATE----- -MIIClzCCAX8CAQMwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHUm9vdCBDQTAe -Fw0xODA1MjYxMTM2NTJaFw0yODA1MjMxMTM2NTJaMBExDzANBgNVBAMTBmNsaWVu -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANWYJ5wt1RlT3XuHB5XP -gmq9n29kSLWsf4Eb3wdh9FH+HdBqhvE8iZm7eHModn4w9ub3ge6cs8BUD3JmG9kx -Og1864PhNQ8E+WgG43PAF9mTY7gJpd4bhqKVVZR+bm3+X5EP/nnNgq6HDX9WX2Vw -6vIXZcCY9DYXWDAQorvC3UCTzPDz/J5iAG/X8X6JsIy9HoVWP0AEER9Mz6g6zijL -nWi1S/SHrcapiBcwnItfur4AZZ0LeyvDAtBE62TOLvLTSD9ivJdSgip1cQjsKs0v -fmtldxnkt8ZHAVf169fXU+lPc5KFiWwkFwUT0oxq1GghZ3rFQqXFOTTIuOg5QTa2 -wwkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAPjmNIKpEVAAJAsL3WwZtMcxHgHV5 -vNf8wF/6iI5a/B6dELDAuykFV4kDht1/8cIudjHSvaG3cIgTOE+2HNwjinVyZ+gz -KTvncmmwD7j/6rBJBLHTsUp5i2LFlKeoepRmyiO59iQxKe2l2cQmDIOZEEh39WdF -9Unnl3S00DTYsGUwRVMzHvRJxN1D1ZiyHeFbLOtE5qtU6zg1Gf4+miusYA1mRgND -V59KOEzmu3opKxwOArEJai9WzcnTdtdUb9EyRu9Q9FapAf5mUnifGM2RaiCeFR+L -7famHrcgSyLyHe4G/G+HdsIu4Qw7MuC7jI5SzWT9qgH5wJrtqnTpWbXjzg== +MIICmTCCAYECAQMwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHUm9vdCBDQTAg +Fw0yMjA1MjcxNzA2MTBaGA8yMDUyMDUxOTE3MDYxMFowETEPMA0GA1UEAxMGY2xp +ZW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyFV/w7PUZG35aO76 +TRaStVV/2egtplGMue39avBPZ3OuvUBk3nTBwny8lm0/jUmmzByL9TAV5z6jnjbJ +TZIsxPECpu49W5jnla8A9NHOjlJ0hBo6od1LBuSBqAiQU5IPv3nGqR58VnWb9Hto +3BxNTEUZYUIOFi33wZF2y3EaI2FVg7gmy2Utj/14NnH0xV9PnFKEc2et7t1AxbTH +gRdFH+vTgomAWvqqVwvPD5ESP1bPdeWHwxAmo97QmcoN3yjfPreuQ5oF4RUJfgWA +By+KsOQoKD7WDyIu9cEPm02fcXUmFD43HwHweLTV/wlRkwY5c4gvqqf34K3hl68q +jzMFXQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBHdw9mxwSGWLmyqfkgF/NU24Gw +oOxc86aQH0eK0xlzWc8qmnu3yRD++5aTgWqVgw9onFJPNNcyg5PDwkwuEPlhWqeJ +fzdvm/gmfYWHiN4MiXAKmq6BtgjChgFtsY16gBfoKD2I6rt68sDLMoBe3QXCCFtV +sefjghLTA6SuTp2R7p1+o2NG2fGviaWcFa7MD93xikIqHyOTeCWvWrotiNUA+k6k +EEYUuKHtdAPFKXzYP25seQ1cy+k4CUv3qvLDxF5d60TXwOqDoxgyDD0uZ+yEZhWi +dfppIQdwdAC8V/cg+d8X9zSkZqnEvXVb0/OBDC2uUYg6yW5bD1u8GHEQlv+D -----END CERTIFICATE----- diff --git a/src/test/resources/tls/client-cert.pem b/src/test/resources/tls/client-cert.pem index b23f18d2fce..57c30fd1cc3 100644 --- a/src/test/resources/tls/client-cert.pem +++ b/src/test/resources/tls/client-cert.pem @@ -1,22 +1,24 @@ Bag Attributes friendlyName: test-store - localKeyID: 54 69 6D 65 20 31 35 32 37 33 33 34 36 31 31 35 34 32 -subject=/CN=client -issuer=/CN=client + localKeyID: 54 69 6D 65 20 31 36 35 33 36 37 31 31 36 39 34 32 33 +subject=CN = client + +issuer=CN = client + -----BEGIN CERTIFICATE----- -MIICwTCCAamgAwIBAgIEBeVm4jANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDEwZj -bGllbnQwHhcNMTgwNTI2MTEzNjUxWhcNMjEwNTI1MTEzNjUxWjARMQ8wDQYDVQQD -EwZjbGllbnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVmCecLdUZ -U917hweVz4JqvZ9vZEi1rH+BG98HYfRR/h3QaobxPImZu3hzKHZ+MPbm94HunLPA -VA9yZhvZMToNfOuD4TUPBPloBuNzwBfZk2O4CaXeG4ailVWUfm5t/l+RD/55zYKu -hw1/Vl9lcOryF2XAmPQ2F1gwEKK7wt1Ak8zw8/yeYgBv1/F+ibCMvR6FVj9ABBEf -TM+oOs4oy51otUv0h63GqYgXMJyLX7q+AGWdC3srwwLQROtkzi7y00g/YryXUoIq -dXEI7CrNL35rZXcZ5LfGRwFX9evX11PpT3OShYlsJBcFE9KMatRoIWd6xUKlxTk0 -yLjoOUE2tsMJAgMBAAGjITAfMB0GA1UdDgQWBBQ6xJBQsJCJdj/u0iTLYYD2qQsB -DDANBgkqhkiG9w0BAQsFAAOCAQEAfoquV375+eAGmfnlLxB30v9VhsFckrxFVpYs -XXC6h2G8MtXLpIEpgJo+4SZ4YjNwf/8m9J5j/duU8RukYanyzJdgkFFqKDBYCX7U -SD1nQP7729KnQgxtbR/+i3zkNgo7FATdkLq+HOxklNOEE24Ldenya39bsG779B9n -Sskcbq++7rMM+onDYBv6PbUKCm6nfqPspq809CLxSaUJg9+9ykut6hiyke/i7GEP -XIZHrM+mEvG00ES/zBIdV6TE0AIBP7q2MN7ylT509Ko9sUBMOZdEzikYp5GaRdiv -zG9q6rqK5COK614BwJFOD1DKV1BoDFsgugvfvm/mrc3QfIUPDA== +MIICwzCCAaugAwIBAgIEfKqa5zANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDEwZj +bGllbnQwIBcNMjIwNTI3MTcwNjA4WhgPMjA1MjA1MTkxNzA2MDhaMBExDzANBgNV +BAMTBmNsaWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMhVf8Oz +1GRt+Wju+k0WkrVVf9noLaZRjLnt/WrwT2dzrr1AZN50wcJ8vJZtP41Jpswci/Uw +Fec+o542yU2SLMTxAqbuPVuY55WvAPTRzo5SdIQaOqHdSwbkgagIkFOSD795xqke +fFZ1m/R7aNwcTUxFGWFCDhYt98GRdstxGiNhVYO4JstlLY/9eDZx9MVfT5xShHNn +re7dQMW0x4EXRR/r04KJgFr6qlcLzw+REj9Wz3Xlh8MQJqPe0JnKDd8o3z63rkOa +BeEVCX4FgAcvirDkKCg+1g8iLvXBD5tNn3F1JhQ+Nx8B8Hi01f8JUZMGOXOIL6qn +9+Ct4ZevKo8zBV0CAwEAAaMhMB8wHQYDVR0OBBYEFHWaqoMijJh75d030md6qPt2 +u+RkMA0GCSqGSIb3DQEBCwUAA4IBAQCleDwVyvRRE/S5cS9oaJmztLZlpiig8ePt +au3SfBE0d8l9kEw6AyZ3Tx4glbCtkmnCMGqMtsb2pIXjKp8JBPtPyDYpH6G4Ih24 +DB1u35bRbVCnuByYnsXmr/ITKTWki05LGsyDbErDANYXKbWVbDdkSwpcv4IrOFBQ +XNxkaTxuJfYgMzPW5dwvdxgJg88jnxVGN6zIHnCBrSXLsaiTrBihyqq2gA23gNii +0twiSci2RGwFYA9s9UpG4J/q+eJrEV/2kE25RRu6nxsjuqRsAKtEyMlZY0cjmVgh +jy8niPAr7eW7kk7NDUCU6kfD3TJiUkCsKeJqXRVe+fRNpZ6wsbVw -----END CERTIFICATE----- diff --git a/src/test/resources/tls/client-csr.pem b/src/test/resources/tls/client-csr.pem index 37d4d67ae77..c373ec011c4 100644 --- a/src/test/resources/tls/client-csr.pem +++ b/src/test/resources/tls/client-csr.pem @@ -1,16 +1,16 @@ -----BEGIN NEW CERTIFICATE REQUEST----- MIIChjCCAW4CAQAwETEPMA0GA1UEAxMGY2xpZW50MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA1ZgnnC3VGVPde4cHlc+Car2fb2RItax/gRvfB2H0Uf4d -0GqG8TyJmbt4cyh2fjD25veB7pyzwFQPcmYb2TE6DXzrg+E1DwT5aAbjc8AX2ZNj -uAml3huGopVVlH5ubf5fkQ/+ec2CrocNf1ZfZXDq8hdlwJj0NhdYMBCiu8LdQJPM -8PP8nmIAb9fxfomwjL0ehVY/QAQRH0zPqDrOKMudaLVL9IetxqmIFzCci1+6vgBl -nQt7K8MC0ETrZM4u8tNIP2K8l1KCKnVxCOwqzS9+a2V3GeS3xkcBV/Xr19dT6U9z -koWJbCQXBRPSjGrUaCFnesVCpcU5NMi46DlBNrbDCQIDAQABoDAwLgYJKoZIhvcN -AQkOMSEwHzAdBgNVHQ4EFgQUOsSQULCQiXY/7tIky2GA9qkLAQwwDQYJKoZIhvcN -AQELBQADggEBAHlLbcTh2779pkD4+t5fX434xfhOta2I3xUbW1ajCawa4cdEGJHH -cfkrvK8iSoclpmezkLdCc/Cvxgm+4uxuWAQnGuZtI9QMyn5/zbSBMddh0vmO5tQW -s7cIA+LK/U2S3OAwa9hzc7V0ydRyQ69WPvpIjagxWY5G1t1a4cqTz0ZuCkq223NS -g7cpvyPaiI9M5wKM+ssg9gzpNlaaTF560ibBjUARmETJsH6QZduVDm/heGhtekFs -9jrHEgQx+7U5F0hHEywhrEA7tOdseWAzBw2ubSxuQ1La7aXIK7c0kLhiCp1z1dQz -l7b9MlTsYOH1rTCwIudp6Jx5JjquPlVC9t0= +AAOCAQ8AMIIBCgKCAQEAyFV/w7PUZG35aO76TRaStVV/2egtplGMue39avBPZ3Ou +vUBk3nTBwny8lm0/jUmmzByL9TAV5z6jnjbJTZIsxPECpu49W5jnla8A9NHOjlJ0 +hBo6od1LBuSBqAiQU5IPv3nGqR58VnWb9Hto3BxNTEUZYUIOFi33wZF2y3EaI2FV +g7gmy2Utj/14NnH0xV9PnFKEc2et7t1AxbTHgRdFH+vTgomAWvqqVwvPD5ESP1bP +deWHwxAmo97QmcoN3yjfPreuQ5oF4RUJfgWABy+KsOQoKD7WDyIu9cEPm02fcXUm +FD43HwHweLTV/wlRkwY5c4gvqqf34K3hl68qjzMFXQIDAQABoDAwLgYJKoZIhvcN +AQkOMSEwHzAdBgNVHQ4EFgQUdZqqgyKMmHvl3TfSZ3qo+3a75GQwDQYJKoZIhvcN +AQELBQADggEBAByDhXki7r8BRJSbmSf6YVPa34fmHkfMpyKL1XkbNJTNTcxB4M+I +84Jm8ueoN2z6YlMvHgcs/wp+RkXXOCrPqZRJr+PCp3Fyu6Y+wy8wCgdnryjbV/2a +8cwgGzH6tNyImoPwnZzrLZF+BpXI8ZznzUpS2ORjTg5OMMbJdKfdJRsTuzaJmRFk +SnfswtQRgz26zSJAlR5Up0V7klGPdDHCN2h+kcWOspeJpAxzKr20At3qZ4GtpWMy +KqsX22eRleDV9ZHPWPhl4lOWjBDCv7e+6jkau9PKeSSPjCffTUrxW7UscTzSEz5G +/NJ/0WmnZrTN9r4YXtLM1YIXuZI71AoIHa0= -----END NEW CERTIFICATE REQUEST----- diff --git a/src/test/resources/tls/client-key.pem b/src/test/resources/tls/client-key.pem index 0401deb14f2..09bdf7aca41 100644 --- a/src/test/resources/tls/client-key.pem +++ b/src/test/resources/tls/client-key.pem @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDVmCecLdUZU917 -hweVz4JqvZ9vZEi1rH+BG98HYfRR/h3QaobxPImZu3hzKHZ+MPbm94HunLPAVA9y -ZhvZMToNfOuD4TUPBPloBuNzwBfZk2O4CaXeG4ailVWUfm5t/l+RD/55zYKuhw1/ -Vl9lcOryF2XAmPQ2F1gwEKK7wt1Ak8zw8/yeYgBv1/F+ibCMvR6FVj9ABBEfTM+o -Os4oy51otUv0h63GqYgXMJyLX7q+AGWdC3srwwLQROtkzi7y00g/YryXUoIqdXEI -7CrNL35rZXcZ5LfGRwFX9evX11PpT3OShYlsJBcFE9KMatRoIWd6xUKlxTk0yLjo -OUE2tsMJAgMBAAECggEAdewZAjqzidYpU0eLQoRcBj5GRaNiGRrxEgCnM1Y7IwFe -yG/nrEu11DASIdHXCXhS99Tx4SCWhLpkBM6m1VQ+LrAm/ppZRr+CSpJzBLaq9C5R -QYviDSu5Ow2jP+ZFZWiorlfcMLbrTRu2sfSnmkOrEpkkTh6jxTFCONcWYP8GU93D -YCA3hSH0li7CueS+GYJ1JB2Cd7buu+tOhl36AhBD96miExlgNn0YGpTJJ3I0Hb+O -lKIIQy+KK8f9TXrSeZC3OYlTtJaIr9ejspTXxIYN11EIit5MFEwnnkCglcsePjsx -qeOFRumJ5Nj5H8qyCNZ5MtzwbLkyktJzlumvnyr+AQKBgQDv/QfGKZJFeoCEWpoj -f+078JxSYyPVNXxbbr2NuN/V79hJBol87ukycz2CZkDCubIKfubc50eXDmhWCp4p -aJgl6BMhnovftYrIrGWJLwqXnwFwsKJSrJJqHlHDJDRGfUSQEWNclNeaB3Mr8W46 -Zcaadeikstvka9xKA1LOCG3oIQKBgQDj2FFOxZK27KhY/9Oz1dUsPtAYYbLOor/P -Rbne3jICQStH3dnUEmWKIKrdYV1u2saw5djn3ujwB0xEXydRvRgiSF0qxYjbm9CG -TJaiHhTsQDjWkYMZaxk3gc7Yfh8DHF0wlvWpu1wMXNsCJ6jxqW2e+jSRioZICPK6 -McWWmArd6QKBgDWjoHEyKXdOAhuTBJCarzOOe+IONpwY8EqfXc6nW6A9k2H/DAvY -elbEWyMiJ6deSeT+qCsHpoCkv707ck5fCmKulFgXT7wYn4Rqw+b9lKh+6Zt+X0mL -OM5vKGctWGHI7eIlgMfYnLfYom1X8QMsbE9puy3UrEFJulrwkzlpuOcBAoGAVRNV -sNsXIFSXu7uyueizU3UU0LXSRVQB2QxJDg3bkHnzBj+xcX15Cq2N/2G2uIjaPf1l -E5dpVQ70jGcXUG8SDuMEXs8pfg7dOvhoGpqu51RHpN7qm9ggr1g5+x6Ex+2UYmtL -yZfbFAasBE74x1ujQgRdEqct4sHsmFezVrro+9kCgYEAgl70mKk9yK/f7515OaO0 -Y39tgVzpAG6RN1NKnY6NR5VNNemZx5jhKfk5byaYxX4XBjygD0sQ5KTpaZmoQIIX -FxuwhLRRMn6vtsEf1HexJAtRd82aL5wKS62l0AXG/CVLAygn4aSSqLrgTyFFVUR3 -cASPpPIdZaKZG6q4Hmcpl58= +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDIVX/Ds9Rkbflo +7vpNFpK1VX/Z6C2mUYy57f1q8E9nc669QGTedMHCfLyWbT+NSabMHIv1MBXnPqOe +NslNkizE8QKm7j1bmOeVrwD00c6OUnSEGjqh3UsG5IGoCJBTkg+/ecapHnxWdZv0 +e2jcHE1MRRlhQg4WLffBkXbLcRojYVWDuCbLZS2P/Xg2cfTFX0+cUoRzZ63u3UDF +tMeBF0Uf69OCiYBa+qpXC88PkRI/Vs915YfDECaj3tCZyg3fKN8+t65DmgXhFQl+ +BYAHL4qw5CgoPtYPIi71wQ+bTZ9xdSYUPjcfAfB4tNX/CVGTBjlziC+qp/fgreGX +ryqPMwVdAgMBAAECggEBAKrie6SVHgQ45voCd9IQAj7Z2sAm0+G+SFtFTdjNef4V +6KUYa7JyR+E9g6SRNhewDq6nXx9b0CM8BFduBlK78KJhr1BzgjVC/bBp4lfzK82t +OiSBNyhhWqFbg9mwzGPtAK/lEXerQIaDte9a4bx4C9uWSarzrI5w0Zj1Gy84oAIy +fjdl2mAFYBWO9NTgvOKkKGXkWor0fxi/OrD/aMxXifv8EvUS7SpFVgok8ah1aKx8 +UrW7xUXnhm6h4WTHeYFlsrHFaxUrypJVJbPPO1E+3ACvoKiplpRZKL2XIVPduV3T +0OQ81+WCy73DlWZ84xlwPgBbc+meOPiyFlK3gi72JgUCgYEA9NXV9J9tOS+UU6WP +8pDZ8JasQiTSVlqzH0Mv07kwFxroK8KVYMYQyDdNdgJtk5+h/CkMIam9aaZT38TD +QbBZHzIdZH6RXhpo3aWA9MqM6E42s+8lPvPsM0+7ZWV+3W+vTCQE7xjiPX3XN+ib +xh86XDxcSmmlnKEONs4E2eOzT08CgYEA0Xgpq/OGRqwvaeOaEDiJcSpO8T3gr6OF +sqIhVXNbevR8snuwikHKlPpW4yPdn0QZ0Cm/B+TQBf+Y8b63bUMwUb+kNS2b0aKr +v/Ofj8Em6svgVpkLrCdATx4gKCgHMoh0ohC6sYa0W5blkjVbCELleEr2HUEuvv3x +ELBHMNPVFZMCgYAPPgDD6ejy1nN1gakkgMAQqlCvDXvKxHrCR3yCwdSsm5A4qTSD +gdEppce8wQnxVs7O0/9dWSPhn+k41RcSz9e8iXIq/3YtVZeRtOwCUVnUXIorSYgY +EzdxOlWASoFLZ9iR9OwZtoLfMSZk5KZN/0Oy2k8kks8soRoxb0H+Dp7rIQKBgQC4 +uxVdHP5Nc2q5Is1rAsFLePl3zY9KtpahTFTDbGHAFL+oFGdD9vO24PQhiy7XV5LA +PyDG0GcY8yoqAHz5sih5393sPBXQEnsPZMZSXBB7P2PQW1as80zGuZW4dFyslyTt +DH3pNBf5MiGyCLYImh6PMOTONf8I1yFzC1MtX5PrWwKBgHT2Zn7ScAfKb5g20WrP +SGcKQVjeWucvBrVGlRNkaOX+QxX+QymTjLpkBPUUozr52uz5dxf2iMQ6++QEFD7F +RZQgQ6MTXUkamyYrf0ziJjEOrTS6B89zmxEtLXQuDKNu0JwmpiWWb3ZAuYqvCLfw +vZXdUVOZ3QGOxwWTf9PnoJfR -----END PRIVATE KEY----- diff --git a/src/test/resources/tls/client-keystore-other-ca.jks b/src/test/resources/tls/client-keystore-other-ca.jks index 89547a57b056f5e86a80ba8415bbf1dc9bf8de39..72c6bdf2bb92ea8fd992ec3acfdc177350a35732 100644 GIT binary patch literal 3377 zcma)6XE+-SyUq}VSe2qwYO9?z#Hu|?YgFw~qpCKg_7M?<&4t=bY<(uk-7iAJ6?<&pn=>Hxf%H1_FYSSlBWpR5(^E_LvSx1uVkC#woBc z(jR&ViG?)$F9}jXfrXU*q49qvkCOI(QZO1Is0a&D{zKkIKKUmBp+lM@W&S;3ND&Hn zsG|Yy9l2;|=>9OJpke+q!=@&E5J->_1mr@(D5?MZBM1rsAUP?awy|132QURtn1b<# z_e7r;Oe^!Jm4^kda{c_W>zdN+4lHmLP0`Nx z#x#8uC2_X)xL-3S`RW@831@TdmYN>3=$O11@cO$kB^&x7S-Q7vH6xD|;l)nT2o3H` z3>b;ljj!%9$SYe59`vg`1IabuW zq9o?TUW99J{)B;#>qOOxltPqPFl)MbmPhhDl3}`zN*q(T%0%nHH#W~K%1DypTGvn@ zje!oIQOZrm#l&;+bnE&mqc3qIYP5$v@2PPe*iXdYIb z#B)8kUt`wl6zAtZA1XQ*Jbqtw-h2DKyl`gX3#FWp4l2Q6Cttbvz2>+uZfukCol%mZ z0?>M%eO?Vl{8Ez6jI!`MHoB@Hz!5^tpFN^zwsED!`xT-)xXaV>j{C0pSa@5E_|*z( zyEuz|R{;ci?ci^_rn&eB`Fb2xl6)z6XKKRiFNjAiEsarPS>Vw1Gg14! zZh7mw^IpAeQz`~Laj$m#^BpZa=Brkx9PA^r<#akDrciPXcTM)aD`Z^_)>lAm>nSC_ z?M|jO+iv5drTU&Pc+V`Lq^2+VCLOx!2c_#Z(PyR<011`I>T!t(j3O9$7heN0^%K9K zS0G<;$x*Q=luY%sA_tgTgj;;t>wfOq?9xjY*^Fm`0#{JI~komynJp1ZylFg;`DjN=AR$?ka%>*G~Ydadxi|tUOV`Tmq{rj zhHs70a7rVBRT+%&R|VFp^r;=11z#Q?LLn#Y=kettN)Dc()5fxa_UEH?<`X}eWG`i1 z%lPSN9i47%@9KLvEjDQ^8E_l9$4huHV;bT!E(??!6+Hvgha@IId84cgAB1q7_fbVw zgy2VP+51@HYhqACgou>TC>J!3WcTAM14+Cqm#UdR*W?7E2Rvyb@D1c?T865tdfm<4 z?7z+`{D8l|lB%^Vg`WTHQ>wqJs zZ>MvfNEquXws|{V-VmGm+V=CDmy+?FE8*4^tMJ0IfUr6*R|40Hcv(miF&prW>qM_zWlHs*7o<^;KpPV_T0XsH4PFOa@Kve3_~cfOdk~yANS;~k zT(naCO<4>N5@+e>f2S(oI-D};^K(?yJ|8bRz(g4IN%d#ySsKF^Y$d44l;Wp5cBd`A0jX}v7@a8FXG|62mpdUYO;s|Guf*<_~EpYc{f$^c2WTl5-D zy?f{ad&sq%Mfx}^ovpNn`{&WE>-E>d-cJwh+q5xUI<#w<>cM0<1~^57E-Er$t$GHk zUWqZ(wdgxlQp>`|K0T%53!xruUJT&c+EGK3=7a>vAwrY7mJ(HJW?(4t_6Im8-;wW9 zFG>r^`%hg$;V2da9N+_R06hDHV*iDn0B?W;lKWrNRTP}!ijlLs0~ZP-g~mvuP|_$_ zj3g3E#q^Jfin0hx1wvveFF-)RpLP7N0{p+~y6nu7xMrbx;QB40_%ETztoYDp6aSyO z-lVtmeUbU<)=JYUqX=73cLbI)BFq5#KKsp6pjB0gbU=;YwNL=<>D`cXyoqZ$CCW>x@QEOyk+gnv!m_uHg@JRNA7 zNL=#+*NZ=8CR>-oYTG≪ExK{D)Y^)}{pe-?tI0no{P-PSVd#)s=>|(JkeGF$<~i>UwQv z^b;cESf{V#)rcX{pU8D}@1$$(4Ab+$gWGOh4QkfKKOMYCRNWZY$k%(YP6a>4ZAHd; zWcSlPbUq(ukx^LBzV^IX;EDFPh2ah8~Qvn!Og5LQhq6 zqGf(uw3PP1UGl*crSrFm18h&gnB3^uhZO-`g`F=ka7{5%FffXr84zxlqtvud(Y2>nwTAp}s+4XTKjg?Cra3c(-M zNEx@a4Zi=XzISAzS%nw0la)(;LXAt11!TZ0o`?$;UiHxYokfmV?)B0H3sxwdj$94R z3;mtn!mCLb8AeCV5^lFA?LU^r?UyJ-GmB;gGPKr;t*kFUENGofzrOBl4BNk=*rh|> zt-qqvL!6oa=-K$QQP9Utr@z-)YBVWLnIyq6yQ&p@T*($tUKjcLZ^5cZ?KU(dIae~4CsSMJ9e#hM*bYCE`&c2nX^~ao@g+*viORw! zD*y~&je?kauiL3{?^KOH|L(3!``Q3=6TP4stvgMSexyUkzD8ZD-eddf(;MC6v%Csq3wqMQ8(yFCD5<78^b}sa2SvN>3 zqgp9*Nizf1bmgej5`=zySHrN>9Tr1dRTiufpAaW<^h3_BPUq(v{?$(!!?F-~Nnb#2 z@Ut*qU&fTpw{N86OS6S{@DMH`vrh)8F|ZIwKP7kY7bj$Wf9p-xc>8+J`htQ=Hw-rw zucoWz+Bc5iKJCM}mkPQ=8U>7V&ZIjUdrtE*;)%A$ulX|KhuCA(mjLuEhl)GlcWx*@ zCGWjldd_(u-%DebG{+igcIB2RQc+Bp*`*{bJr{u1U4AE|7Zs$R*Dy_PWxds6lF;jH z!kgf7`1Nzzsd9!G3U^;Vn+ za^=mSEtHjG(-;@jI7HrFs`A~co0^*XTWMEL#kB4cdO>nBiWIRJ7#HMb;&hMS-uF>- zS`0>?%&eJJD%AE6rsWLub)GEj!)$GxWeNSvHzS8^H>A6-nWW9UAgG-rdu|=`gVAp~ zvHKqQhU#Qw?6sa&n(tZ@U7U7WB76p=qbS1ucarwHR1SMp3Uj+FXT7&b<-#lC+gQH` zX&QWd*@2JAKUjK1s^?>rmw-90`!*d4)ebVyDSMMo+xM1^P`h+WykSt0vUHEk4;&!A z-=NxH79OPDo2Toe~0$veQ|fx?@`og8od0Ro}M)r*8O(qYtK0C-J7JGtiKqg zKjW$KF3=xO`KHf>Yba0NZcW!`Zex*(NNyyQ5+Xtm2C+i`6mZ;x&dqJz5zn(RdDTke lzKIwXadiqf*A2Psh8Rx5g9(>eI&cSwItgJ60s~`<{sYdsF!cZc literal 2803 zcma)+c{CJy8^>oe*~VaEj6Hd~5}Khgl%)`w#MMm5Hp1AlX6Jj3P^h zYkZ~@U2$ak~=l=m1E2mvaBgn&RU0E7Zrc)9C8)z%t~K!}BC zUOsx5hSRgSFv)FZSpsd%+s#qcYkqyF(nV9ErCMde{T4CVJ!k-xj;1Tw@ko4VFVG0K z4g1=BHrd5a1r;bNDRmaRd#D16o_(BIy5?>-Cqq#-Fu4(AH*arL%k0Lz4L6Cu9`TPlA#sPd{WZw zl36L2fO?I0EYX$;Hqv}!tH_GV{->#@Dh{c-ue@N!DL7^wsnU0xfG zwBPiPj8iztGkT#In)m!Ry1;ul7tEfKvz`pnWj=5?PP zMjt^;_rrhEat7b>B#Cb56Yj zQQidzCPZeZV#omStLxOXk;A67aGdtuCwKeN4)B!MnI&(xo?)5=I=$nmaLqIB%26%m zQK8%$kLWJCsSnu@~r+xZ+keRBof#i%_3%XYQ+CD?u$$8&+>5)fRU&;rmNt7nh zwJYsQGU8TPv7@pFQ@TwpTE~Z8P^iLxCHfQi%|rp#M!_j2Vzw^u>;xS!gc1Jig|-eO~20>Ro?RD~E(a-rIiZ4k~*aJX>WR0||s zo!_#Qpml*n*>;C8S40|MuQCIM%U>VmHMn<4~lm315^57{?Ic?X2i9N;L748Ndax-;B{w#O& zCyb<9WqBoS#$R4G@~uZ|Pot7Xl5^{R^2If6HPeozA~5aJ;dS0^Pmvu}f|0BZ zvV8FF@i*S-{mXv*P~}begtZHInr%fx`jcgfkQ0Ve3opDJ^pu1{9OR2ELlE5O@X0$p z&o^KGntWWNs;(=uDz&J~B2dxUY)yJHb>~*y@MY74%qqucyvO)EL1USdxB3~|h@U3O zWu<~eYjW%|7fk_WqA9=|ARq`0gYqcG8pm$IfIvPj02+Z2Lc^ipOAs(Ww^@K2`I@Z$ z8MHJKhS5M{Rn;*VHFd12H4>)!BUSrviWb7aIemV7LO`87-O1hoobGaeZ_P1WFa-z) zaO%7u3J?ew&io};c^E~Q2&EoK@27Y)-ScrauBnKKl$bnl<%{{A)PP6qx>kG^Bg9`J zC>;HDb}MoAME^Z*nEty}`kydEIB1YT9>D1oOEOx#lz-MGVJpOTFlXQ%Q?rDgS zj7fjl$(IT}d2Ti5zffr}%Hxpe+?%9^=KyjZU+A%R(15{`^GlVDA!A*~#=93Oih+LI z%Zh!+!>^KqQPXuVjDVJ#OCuwM1vCGYn0QZlBo|^Z(c`t-A=lrSdZkRw6P@+*nrGB& z+j&4>AOQGxg*f7K6aoTlJwrG5gl%xzP6+A8&y<6iCURTSwC3M;SYNqV59p^BcR`di zc7oIG{Qc#oB|+_`C*gKrtIiO()fnMwmux~ddFRL%nlwhIwAT{2MZ?x~me`L^t_kOm z{mR(Qe$QoYpqiZG?0LH{;jjLMfHzfsBE+CL`EK)A$g;j8ndxlZn?xV_Z;jc>7PFH2(YWev3s zBrYsv_kP1$Wqtwtg(;W=3y94DX1V~(0TsjpxWf$f`VfKl{fBJ-FS8tk)m5>7G5fEe z|1WA+Sz%kQo(W2CKGF*tTr|T@2kR4mw>cNm^wR!_fUwzgP~ET#f6iH&h~ZK+?_lup zF_6w!hc&Jfee$kJw6cxo!+L7iUqKBWT^G#lRza@=ZUWCSfZwT5j%)s7&L+^FYo;41T)LCgHOJ`52ic-stEeS!KN4*;wh?31$giCX$d)4Au~_V4W8j zE#C5eadvO1724ZiI$`EJsHkzH6hbJDAX1edui95<-@J0F=9KSk#n9(Gc>2Rlc8+&< zaUn8lKWQZLLFkfr&&T-=UN_{JvN^aQhzV9*Z#OWAIQ9Jlr9b_WWFJH(3%lXa5PZC+C;| diff --git a/src/test/resources/tls/client-keystore-other-ca.p12 b/src/test/resources/tls/client-keystore-other-ca.p12 index 67af2b80adb11edbf9302a4b42cb735bf5a23df6..1044cd3f54dcc9360f99c30d24a46ea62a4df456 100644 GIT binary patch delta 3066 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 diff --git a/src/test/resources/tls/client-keystore-root-ca.jks b/src/test/resources/tls/client-keystore-root-ca.jks index 3badd2933dec1b52cc79d787bc087bb97b5df610..964dee429acd357f95e974e0c01d445d518e6dc8 100644 GIT binary patch literal 3377 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 diff --git a/src/test/resources/tls/client-keystore-root-ca.p12 b/src/test/resources/tls/client-keystore-root-ca.p12 index f930f27e9c27e56d28f7e03a6d487a54c1679cd3..962e5fb27fbb847de7cdc97f06295acdcd4610d8 100644 GIT binary patch delta 3066 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 IkOBe-0ABFl`~Uy| delta 3066 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 I;sOE)0ER2)hyVZp diff --git a/src/test/resources/tls/client-keystore.jks b/src/test/resources/tls/client-keystore.jks index 6be7d5cf5d0f353e70abe6957b2b73a0f55ea0f5..4062b2585798997c5b361174843ac9179215ac5b 100644 GIT binary patch delta 1965 zcmV;e2U7Tv5R?#*AAf-cdx_lu00jatf&~6B4h9M<1_1;CDgqG!0R;dAf&}Wz8bvkK z-WtY#$H843S&C2|98v3;RjhsDEZx=A!$}>{Y4|D&`l-C=mj$ZX^ zNT$CLPMK6hmQa5mm!l9Jj`ddeBLL<;PZvGeJ?~ywO!6{Lr+-_TJ+D&&vRC`<7gWSw z8{?8TGP}P7?=f}&!O;A|3DR;!1iG^;T>VAS@l;mBx#nrqvFSaovR6<@qfD1m+CQ{(Q5gl!ogwBiIf5q&1JmAWs9 z?Xkbr5>563`G4H^AycvZ9*k5!3+)L1{g4|%Db=BK0gixSS+rUd0(uh~Tb zp1!d1F)b8jo})h_!>~^>AFHMYjsKRXD(HTEGbpYRMq#-0u&GVzqW5J<&C$oma`ueC zG#WSs9tpB|AhA9XPxOrD9SkHx*?<$bmLFY5;`>TZ$$tlR?A~GQJ2&S;D6)479YL7V zy^W|zJ!7b3Msfeb#?Llr6uONOL0qYq0h`Gv!yG9o2Tw17^>Fa0qP}cL5Sg(J3L=bz zoQ%s@ZSrdL%SL;D#kYuSPJC5UUymHg3C2ElrdSMw&JQVGU&w%FZ76Dza}lz-4ZC9~nqQ_MjrQ2P+zW=Vex>^BQN#w!#z=a)D zOn<&5GN!ZWt$W7t1~8{-PBJ`7fw#x1>my$EN2ZSuoe>S`P47$T;Wgi2SWB z`r2!UR=QSG2dm|*7;fh)ZM+@c$-K>Atrp0H-Qma;7vl6w79u)i+J7g}SdsNbFA$vdy_v9MAQD;=$@CFChTdmJ z!_o`SLo*TrSi*)6EO^3io-&@|UT6M-QR=q!M5TB_gSHV@j=Go$?w{7R`6s0)3edvie zziw&kL`3$=V5lt*-g9z$!G*FH)q2*lPhl0;(b-^p+0vaLV-TFd{`S^lS21GIdml5koiKp|> z3k;%H-;6gO;RX59aB*FUc@uzDxj;ZkTr4g2#!E@cqpZUVE0=@H41j_)^*8T)F`RMb zf#Zq6-i_>UMY^>W02`A4000311z0XMFgXAK0>?0d0>dzZ0jr<`0s#U71bnKR=aWkX zBOo9b4Kgw?H8M9bH!wCZI9eDFGB7nVFf}nbF*h(aFgTNp1vP)jRe!^?)MRb>Xzuz= z7Lv79f7$3QrcsQ!?fq)-PiJ$ky+CB%biu-Wyq0Z0jY+1=9E@b-Ae}Kfv5(hdXfLi*h zR}0S%krF>v&voU8!w@E;-q4xK4c{o=KDVwzng!t%34R5D2QP}S&LNQUg z@#F1k?b3V^GD~V8q9-iO2Yuw7b&%sY&T>}3S7T}D>zV4T-;=7 zJZ>fSATu-8<=iiK7zu;VBcByUH>}7WaDlBQ%dx1FtQeunsPN%fGGbCdtSRDZT@_yW^i8Fnu(7ppdal-{Kecl#CoDy2$J2alCVuO<#|@*5 delta 1977 zcmV;q2S)gm5Rnj&AAe(Y=G;wC2L3QO~$VNLM5mgC%}}!B4P)Gb@>V4K5*`DKpcBFl!Nt ziS-Krp-6ON9DmWlfQx|*=!9N;Iew-$6rE1d{^p(8|37@wo-J-GeR59jU};&C8^ns; z;Aa&}U0Si}ZfAFk?o@>6nZaFvc*WETD#n(U&pt{B*&Fs23qVl=vD8|)ac6z9;8ms* zk7BnDx{apB<}pm_r(c`w(cI^nXnWBDxQW2ez%xs_y?-dVC-AW(QUbCjKEONZY^_}R!8`IgL zkVJGyGyf!h)f;P)JXo)OxIzYHY}Ym4G5QXZOn*OXJ7{hc1OSABW(yxm>xJx2p zpJzaba`k)e!Vk^Ry%|p&pvyBrV9XA{DcWH%1$_|=tJ5=yq5S^b5J{c~#ROXX$e=CH zdw)Em0N0e7Y02o;RxsK2_yMoE@Ucb!BzZ zMFsw6o)qnrML#zzUj&3|y5;d&jU;!L&~UXLeq9fVyL0AHd!D~AlP0eE^8CfldHk1y zb*A$mvIXSKp(@y4z-f|c?7=<#;Zcx^R3Oq8y@GC3*&t=H4%4V z2!DRJPiu6sds9SSRtUA20+d{|Kr|L4RAXIObxC${8UXB5{&yG9AqdF?kC2F^wSNud zIs?uM*&HD+v3Rgxl~z$@%fptV&SwnDRA-B_c{@rUqxSUQ8&3n3o8<+Fn3Xg&(?&m1 z0zyQo$e6M?+z~F1r?#yCT#vO>koevD$Y3mAW*$=UzD*%Gx^Q$%1JQAbqyDi@u^fM| zxY*bnCl?S^h~t#PoD}H@_3nBmUVpdbNo(YvKuDT`e_5${cAA(&cO(wuC6{dG3N6s= zo<`ej_MCKo&}Z#+m9bvmzmfMKUd6cUPLVlQ&!_Wx;y-+sGC%7#ZnfEAQ|fMDfd!WX zo{X+qk$2O1_clT|*k!8NzyZ0VaqAdz{Iv9ql6i=F|MA1D8h_`=r+1dh&^B34ikPxu zxe6-`$O74z-;K|^_!9sC00966SS~d%IRF3x#V~>b!7zdWsh|S_0RjR91?6VqlS~C8 z9v&ABF*qBXthi9hpon`h!-%N zi(k6F0A-yEdn>~N&_wHG&MxxPNIzn{mr{Z%b#VynD$Or`Yh`yC9R>qc9S#H* z1Qa^NkWjFYiFQBk(j?1afcB{i0Sqt=1_>&LNQUC^W z^30ciV31L2C@@$Fe$+@kXF&e@+tQ~(3~g;6{)>F%HVQiw1l^Fjz8vgil+%P0ZVPqk z@@s!vux|VGA7@I*9B!|^?z0T~iNjzU`aQJ@3T~%#c-@VF9t?C%E zk?-Q{VGmq}N374L67jUqM8C`u9ap5p&;kKeKf1Os-tv_`bo8n{u|P~YmqgAf7^jh% zMcA**Z))ngisU1T>s|rCkxma#%2!Zm3|k<&3*WwP=B>@pe1#7T)&>vc-!(Mh8!*J> L2-{p&EpSLyI47ZJ diff --git a/src/test/resources/tls/client-keystore.p12 b/src/test/resources/tls/client-keystore.p12 index 87b29bffcbcc0d255675d7de338267854de6cbf5..19dee07425b364e5498034c5867b592e91b45074 100644 GIT binary patch literal 2561 zcma)+cRUmhAIF^=IU`qhC`2-{-6hT$nQ_j@WtVZraYB@=pOMapqICSS3N0&Sk3({t zy$+dW{z67pX2#s@6Y%1=LboK9xwxdNHVkn0+o!yMs0HdP5?5= z&}VL}?JV|9r8t0+=(&V2xu@73uOj49tPFMk@V%vLmHH zi0D(CxGDBmvsb;W`Na{q!0UpPWM<}zFlNAcBs+xV--*mnFcb0|1WJg)0*F8mKoSJ& z4rdH(4JAL8JHd^z=#P5?B7=I78WFHoeo9lQ>!P;dR)uMM1VeJb*_eX2-MlbGwQN02 zTd-5P`YsnPH2`{czP#y_?6sr`{ldHj-KSx2;;Xr=@Ja&# z7*-WuRAXr#_~ybV8=gDrKv-#`sN}Vw(RI0}0Y)m6q`Brib|(&#^V#BD$YfPk+r}le%(Fi^35h*w;Zb`$=#7cz}WL1LZ?V zGoAZ_09f?o6eh9j)zqIj*sIL*3bZ ztM8nZ_42bQj6l|8H<_@p5?7De1;C`fk?pfFG~5zT8VD=OLS^$ zm2KujQbQN^moI<4?8s}e4+-7)^S(ipoZ)^jpWL|5gcr-Kz&P3MGlI9F8tVj>8Mit4e z15Q1Ne8-+?7m3$t)K@;!EL<1o(@C{z%Nfc83Rbl5LyP9!NMmQc>l$jD< z_bMgYxgePkrpX#pF%$$(Ky^s&d4zdW7Y-eQ?1p;yVQ%v`Z1aou6LxOVR!a&bWHaha z*W}gO3K;4iHZhdxCe@pT9rs9%;r(DI|9K}z*28xB_eH5!td~&Jgyo!O%}LR$AY)Wj zH65*Xf|avLde1BuFk^3G>9X~@CAVf4w3dgSnijnA8aR(rn4dRhlB0JPeQ;^ zIy>f1IiB*(kyYeoO)oxNQ9In1kYp|&lCUJuj$2fmx+iJ`rE{XLV!-2xp@-LqZAe7711b^BIfcX zc_bM)_1km;l1T>k9ZTKJ0H)*B@;3qeueugf{G6}&3Z*z^0^t*DApolOP3ZqmUEhNo zp7d=YbYp$%dE;CiO2WuMle1bdrNtM{G_lG)R=wJsCr>WMVfp41`z0=baQXN`J@-W) z%%*!JXc%V}{_XqODvweL-0FzTX?UlO_AHn%PBlQA=Ajd1QY5!M{Xux$4DQE>3G2SY z)NV}b+(%AvbBOCDS%;!!?clJ}g0Jj}9Ufg_@5T4l?s!K75K{JcS2n~{=(D?lO(@WM z-N#~!D8u_*E9oUXY(UHbUu;{d2y~>du-q>^p(jGM8u#aI-CAp1Z}8^l+NHe?PqFVXU>2e~;^?>~v~H zRJqwD&L30L#q-%ZFspf`b*EyBr|xM<)v*B4?uWP$3&(D!O54Q66a<56@6tgp53v6-bVO zP7S#!uec6ba>onOyqlwPzU<^L3V}5!%4L~0xS9q7}%AhOT3qorp`;VR>ZC3}mW zysYQB#Y?pccOnM9reS;)e#)>UEcl-9Zw-x8>aUOSiO@(9QLKn`v=p&2)$d8fv}o6V z(y(kab3+ZXmb6B8whw<~t(wsOECJ7YM*Uv3zyl0&n9IdE&W?Ti{<@-VZOE$A{2MCZ zoM&n-Te^RRXIs+!FQ2h}a?<>hUvI|L;b(yc__d4=yJLFNf1KeY%|H1V!BM6;`2Nysb?=!L~h%q~K|Ec$F7siKvr zClm%=!;3~v>NQ|+SSz1`q0~)|6$;a%2BYpD7dY*hu*fS&AtV$6mO2S!<^?l>5PZ_X wu&*?PHACOI;pF;+dwzyhF9;zg)iWv8>5A^G#1Urm-}!u|Zx}EG0a2O%0Bgdfng9R* delta 2388 zcmV-a39I&j6!#K;FoFql0s#Xsf(a}J2`Yw2hW8Bt2LYgh2^|E22^lbg2^BDc1#t!m zDuzgg_YDCD0ic2fVg!N(UNC|MS}=kIRt5_yhDe6@4FL=a0Ro_c1p6?81otp01_~;M zNQUo4+ zVIQ}!^2L^^Fbd*1g|)~Tg#9rw_@4~?bk;RUC_wo)#0(*5Hcz)5CL;))5_%m4yb}|b zhXZGtV9qIjHvd~5gpyCMN|@R{KBtM#dV!6ygbwF1W$dRs2mAiv9^C)l;dDP$AKSe% zy%tlZP zl2kH(Q^kaRY=;=|%(mYimjg+iDN^-K z-n5v2^t-C^T61!CK_N2P}S3>4U16uRA&RH@v z&hdBx6BAb_4wo^}40aEW9=R(ueLRfno`|4_u`ZzOm0XH7M7-l1{cPmRiVHo(6LB7A z$)sOMxL7vLH+rtw2J~DLQ}(A>KjxpYpLjTTa(1F$4At|DtTEYsEA-Mc5U^C-LHJaE ztn&e8vwDHbo-rX>2lrR zDHFad@;N3`&ovsX+*+m@m~if_0ITwU^YM)a=M546DPJ;nz9qIQpPx7NWj}}r%U0!c zzA@=xRGj-#0ZC;O#a-%tE0>c;<6RA%)H@fpp-~fy7;O-Y>(Si9_**J+3T(w>7gPHV zSnK9&JTY8_s&8GOT(rr7zAGJmb9`y8y5nZXMU#NP9L0djudZ~XZBUe!J-z6ET1S0+ z#gZ28f^p}jPjWJycWNrWjvmZaLpYA04HMc7&j)p~)c~34{ctpsbtoe1t?Q7HFqK1- zG!DWT{Q4L>*U+lXQJ>!Bu$8?wt5X1mYm$0Zv*O&;&Qd9?tMpfYpMeF~tFky2e3~8^c|d@pZ8U67Z#Rt>!pIe~GvoF3 z{`=!-D4H33)xAhCB}qnl`E;_GGGGGnL?Dzd_p+EFi^pJe+|MHaK}VFOSJSqtKQeFc zJuB+00&>qRwr8}0lW_Tu9+i=E*`i5&z9>Xiw45mR3`WUNDVohNzMBZ!w(yQk{N0^QycBWpLNhKkOBsYxVltoBE6L0z2` zbsuv3s7@!$UNYa{$j3;@N4u0KKl^=k>#UWNk_A40H8M9dGc-0aF*P(YFoFY|1_>&L zNQU6{wE_N9n`WT=sqER}NGuP~AV0|3KNfPw=^(0l9#HREiWsr@jU@M$6C(iQ%66;HpK zfu_-afhC{XH$U)xisj2A_eSFRE(%Y9;JD#@Gm;_7l;Z6klXU zP^y+3uGe;uV7f}|biNPY9SM>os_#{?aAaJ6mZp#d$<_4`A$6;zC8GN$)@znC(O;0( z?L=dHJ~ZTp!L`3yE@lX^dLxJ|Yf()eUoVfmM*gh58{R--O+;vAg+Pf#2!$y~M>5db z8e0-yG2A>GV_->Lk+aWejP1I{)R5cDVRl>sdE+8F07QIaZ?jt@-JAlWq+Sd^=kFYU zOB_WHVHRZsjO_OaC=Am`x*C@an8y;Ww!H7YCe1tL8mY0&-JyG>@Co6TDY^Q3XQ{%v ze(qFdO<`+ay*yQ(a!QJIRF+L>ah2NRX^3)9kpCT%(y_Zsb8(oJ9&9M~EF zX!~`wvq}*i6C#)=V4nu-)b)^6fdt!bnrY5TCSye>QF`&K%AGIfzP=8w3hJGI*Cy8)pQz>Up3O|0v`bT?Va4kN_~Su%$2Pem%)>SYWnC?? ze9C20MD3BJZ{{2Sb+&1Bi_mS|m+F)KRd@O~k=~6j!BI|Dsd<-nNOrMvUblxYEWud! zY^^SMK8?~*E>o5_ew!(Z4%?+aObqI(YDlalhJNly*%ku@6=0`C3#RQbJ}@CL2?hl# z4g&%j1povTmDE@h2>H$ES#A9C1Tk345CY2$1QZV{FuK!GM3%yP#*Fp;X8&pQ3n~Hw G0fwN14QG=8 diff --git a/src/test/resources/tls/client-self-signed.crt b/src/test/resources/tls/client-self-signed.crt index 631a62c7b0ec0ed78864c518f15941fbe1612d41..a37192126475fba0918d8360ebb0fdd2e6ebf1e3 100644 GIT binary patch delta 625 zcmV-%0*?K~1;+&wFoFWZFoFTApaTK{0s;hls+#AK6C)rX7Y#BpFf}qaF*h(aFgRKm z4>B+{GB7nUIWaddHZVAmR5gFdRe!^?)MRb>Xzuz=7Lv79f7$3QrcsQ!?fq)-PiJ$k zy+CB%biu-Wyq0Z0jY+1=9E@b z-Ae}Kfv5(hdXfLi*hR}0S%krF>v&voU8!w@E;-q4xK z4c{o=KDVwzng!t%34R5D2QP}S=9E00E;RFdr}-1_Mg@#F1k?b3V^G}7WaDlBQ%dx1FtQeunsP@GI@*yOK`L4M3FYN5kDRVp2e?DdK8f6<+!D LO{Jc&u>!SlfU6ro delta 638 zcmV-^0)hR<1;qsuFoFWXFoFT8paTK{0s;gDH8M3ZF*7zbF_Bg^f7O^LoGsNEQ{8)q2bIr)YQ3LtWJtBFe}Nm{2VwM4{vFV2 zhVeX!nY(y%D0Y4@_U8A2?wqs0R1b1y8`&{B4Sef^;WZBg`Dg~?bHEqblVi9ErQREc zqLo#Yer|34Uy%>~dCh{ZhYf#LUuAIW@)u>mnDjOmSTGQxyTaW-f0NAc^ZcG-0B_gv zeu=P*y&i>DKR^T#A571vI?gD|ooKa7^oOm+sfZUaoQq$&z5r#N3wtZW0?+~ z(?~yJyq8jfDs^!P>?+MKersiS8RWOdM*&y$>(|#)=}&W#g^6q=7X=g2jB3o5RffS_lDtJ$mMmRx zx`$!BGS$nZfhmBRKH(;KVl!}m|0eXFWBuEd@f)OJsq)O1e_)VNYA7&R34YW_J!e4v z``gl|LJVzfAO4GcGErTTd;2X^dDzR$sBI4zV5RO z`ia9}8~Q!93JPwgexvNBuQc=`@kyl#gWtW%ORee{vXSrN>|qaFhDWT=rV{bA&_ut? z5*=5h#Lxl(KtH;+Fy8W&K6Lb|J+VMcIhRDvDHx}bnnl>J%x`Myx{Bl@itAnhz>!W5 YP|8v#0s#U76lMg2e5t8H z6oq$rt2mEcvSF38?U6?$ARreFGBPkVGB+_dFg7qYS{M&9Ff}qTH8D9cH!wCZHj#-o zf7G{abp`^vKcjc0Xvj8vao~P-F9#%>&OIf3Kh4oO#Nd>%YVMprzSC8(S~xI>dZ;8m zhYD1iz^{TYQ}Zs?A^rIAKf4;;@bQKNYmz9IjElK%ub4#N;bpg;KQvc(M# zN<6pMdWm*iE_6#Ot%k~W`;X7v6D#l0f9zZV&M9)(mIzXOozeV_URi!;e+qe^oUFtY zwh0*Bm9<}zP>5*6eZg0FPXl&tE#+}I7G~$wCb4#*$yXq;Zr<@$`U|ax+jIZt@V}wD zgHx-~CvDA)x84&r24NfOgj}E_6pdzysnHf*Aoi1tcJioLQ^!J5e5CMSbzHf2{A z*Oa}9i$=;~El)*|QLM(PB_HdXUT4;uS=wxr|^x9`8r>RlnvLAa&oxBcW##oL(Ydh2q%V7els(e?vC! z>~Pgm=Li|QGdZg$fgZ6_nORRSr!9B9vqM=eaYpDAn+x;8RDj{D-LH#Z2C@$u;n8Bl zrq2fhGwA%B{CZ_6DlQJT?6@0<*4^RiH_^u(W3T|S2g!Fsk z{0EUzBp)6Z4KX+{H8M6aF*7zbFj^N4F*q!U$M zH}Z5E%?>S*r;b2W*jtL3Ih-k}we**~eOW#mbie?kh@=_oSV2{-5Q7~Y-0hGD34=gC z%d59@fbaaGPlEHEQCBcW)rps-FID%CaTfXU$<7KyqF^$D-SWNzxa=ba*30RRD`Q!r65 z9R>qc9S#H*1Qc!j9~H_)@;}8(E!>zYxQZ1AbD=OF1_M;)<^edhAi}_uhdg)jAu_ z0TZcVBnLLfgR^vmvMKcp8rVTW?bV`K=4gV(kFU9QMu4~!qc&XDP- z#+Md3WT9vy{4F#PrgC6yLHWcFkDQsfuU@MBrWeg`@*Xrd`u!e%kI7~pV}rm?jH5G< zKE1O9==Y^O++65DgZIj|vIpY=kt$S=w%a?3pt$=ucveXfs;j&_4Wta+L3TC*Jsra! ztMSf(Eli0oM15%^=0ca)OZctH%Oe7M5BK%~+QiDCr;`(n#u_rI3-crrB)sH{f7l$J lMO(7plB_P#kR)ps00C2#`;M|1gw##;y5Kh{r|?X+!@xjOL4N=M diff --git a/src/test/resources/tls/client-truststore-root-ca.p12 b/src/test/resources/tls/client-truststore-root-ca.p12 index 34e0bc7cf787d2a7e8a497ba55269e4cb622eae5..de59302b2933189506d3291073f8ffb89b3b09c4 100644 GIT binary patch literal 1143 zcmV--1c>`Ef&_B{0Ru3C1S|##Duzgg_YDCD0ic2e9Rz{|88Ctb6)=JX5e5k=hDe6@ z4FLxRpn?PfFoFaA0s#Opf&=#k2`Yw2hW8Bt2LUi<1_>&LNQU+thDZTr0|Wso1P}{~!NhK(&i=71zlg~r3}k?U1AqrjJ1O_-%nV|`{qI8ip$h%7 zIhGjt3SP?JY;3-{!woZYOT4(G=8(xJD)#bT3H5*c_?u+MsBQj~t5@J4M2HSrq5S_+ zH&#lLkJbhR&|G`gId6kTP;u1rsF^`sqTN5OjgT%hm$wpgW9oW7#!`SBQ`ClKqC%0K z-6bzOiDau`lx=FC`9%+~x+y@XO)nX(NS0g7H*o7|7@G}iXV`d=Q*0!^*I1pGo$sM3 zI>AQQhqPGvH>*XpHre zxLSB#cSeWr>)y*4L?goMEaIi7o9@QO@QcD0YiHkdR3Ne|B7@E>qrf!PQ1$qN_NYm# z4yIRYq7v#^sqFa_9apm$g|8Xl1=jgyz8#e9YhFswL63m{i+GnBR2eA4NG2yK6Q-4q z(DKF#e}G3>#ZqfV(QCL!WaysHaxA;h>NNVHhD1y-oMvD=6wg>>ym4wJDqL4PiCB$a zi^IwhPYsYi;tBUrjGeh*AQhjT5oXkUQtS`tL#`6@Wf4J+%@Z?fEJnQT$k6lqOE|C(%dC#VXKu-()g4JrTw&BA4)i$}^K39pH z`!Wyui}GiF`I=1m2spyhQ+u>6I@Pd|Tn(aHacaP4Z520cj+f88aMy|03bc^89f};S z8RfsbsU*)OPm}G<@+oE!{oCB6iTaB3sBP5^AY1cjU=M^=?XtK Ji~<7zhM+W85HSD% literal 1066 zcmV+_1l9X6f&?Z40Ru3C1K$P-Duzgg_YDCD0ic2d&;)`5%rJrj$S{Hf#0Ci}hDe6@ z4FLxRpn?OnFoFZI0s#Opf&;1s2`Yw2hW8Bt2LUiC1_~;MNQU$@Oi?(Ic(m!u zwO5T$p%O|da*nArEYxj#*`az$kDY-u@aBp|^orlhI?7wA0OV}Lh8 zJ+vCh4Di2bRSC>#b!s$PDl`xVxfv*d$8`ZMV`^(-}iq;tRGxG#gp(*tQVbbC@iY0@>)=J&;n^y1(s5BL-N#<3scEbEiTuzmUEIk) zWC?J8{aRPMzC(w1tii@ceoKr3?7H-f(QVvHzAVDWNNCZWXLMFB4e5%B_9a@{K-ar& z^2JESrHBjg1r*sv4#EBpw3n$DY`L@tn|8nI{FvbFil9k)BGTCN+CxqQB>hk9t7lr9 z14qN|8z6p!FEq%*$CStCR5Z@`#-q{1zPKlO$=1fLS+Ig~aQ;UZBa&>SHy zdl|nT(nuX@8NV{EiUgvlM%)CF`tkXcL!EMFw5GS2mzwP#EBWF=)Bh1wOzK$eJyofU z^5?89;a+Kqp&a#!Y&Xph;Y6@ewU+>UK{)KwAuuM;8y@3}F;5prs)PX1Nb<}2fQHC2 zs!y>K8wWU+VWt=A`q8Q^Vl zs1nd3)Em(1W#>D2_9Y71nRd{;ESiIL&&!qGS>Skx1_WWLFxr^e=4Gox+Nl{x`=iY< z4O0Uveh>}ow!q^{HKKwK4vY~yjOvdBoY4Dow@>4qox;+~XY5m4n~z|Xr^g;H$JUUi zImO*Y)k0Ws?8j66VK%5)Oz4QRZXDgP(kGyEDY$CJ0__4|QgEGSgca?k1t z?f^!DS_Z_e(oD+lCE&7M?e{gE&!V2!&lm}kBWFLJb{@&>;k_sgsx(kI5fu46=;lT kogmkkh93kJ_&GCf(x4#iKwn>_nbA>_&Gt>J0s{etplb>LBme*a diff --git a/src/test/resources/tls/client-truststore.jks b/src/test/resources/tls/client-truststore.jks index 28bead2f0069f7456168b41cc9e35d890db89f9e..93ee79f85399a6d6b6e41a20c78ffb7c68e20ee0 100644 GIT binary patch literal 1079 zcmV-71jzd^f&?=H0Ru3C1MCI~Duzgg_YDCD0ic2d-2{RI*)W0w)i8ns(FO@BhDe6@ z4FLxRpn?O!FoFZV0s#Opf&;e(2`Yw2hW8Bt2LUi<1_>&LNQU+thDZTr0|Wso1Q4bZS}eM%z*F02Aq|j9kcohT13;-B7B$fjHH6u~f)EfyHH_kr zD}I_hRk@t=#w+#k{xWg!+8_5Q*|!y}~0^ zakqx;*n3v%%K?T;q{l)au<8$xp7+#cT3TE7Q5(=OBts|Lasu7+N)g_82DnAVvX{J4 zmSOG%%2)RYr&z2?v5LLb|9>C4Wa!kzsW9n0z3?EXK+-EXFBXyjr2h7OgV&bzV_0^M zzeyzlqt*WIKQ61wsyloPCX}Ou$D4otMxuY@@I!nEI3RqiBXOCgkrTvKQ>N91FYopy z<&+ZaEFr?`=$z_!Nh6BJ>AC{*eYD*qyAF@4FaRV6*B@k<{bo+}L7mfFZTHg&)04CstMJt?AjS z%+wc}A(mM-@1c8n{SODIBvQ`8`3+|uVUH#b+Cf9!_lO!XDosV5c}W;kyQl(c0?XD6 z4c1##LiFBf0CMwW>!aS6znr#5OjxfcV$XXI&*{*s+v+JNLy|e*~YxN_0gG*2-#wvjc}0@ve4+?+|Y7@RJ;Wd z+@-jD{_#muaoF+k@1y@Zj8xmu4=;m8@PjM!CL^Kev-VCe4@|eq6cc4^%Zhvm2mQ>> z5O`8j;xpm|dwdW>m1kD0*M~bpt!zLkuZ-)%c`3I02(%Y`$po{oaET@%a03vM{%V7y znb~t9Fz154XUam`{SYxamSgP{7c4^!C!_slr#0N_x?1Ps?4U#hT?tvZnuZJTP8b`C z2RbeOQfgY2A1ro@H|>-CM_UL@0<&H(vp6kj0v%4Yqu0L5r5PK6b}4rX4g&{;&G-KUdAADp(u`W4FUrJhM-Yp<)i=r literal 782 zcmezO_TO6u1_mY|W(3n*C8@TQWaJl@7|4n9 z8d?~b8krdy8k?C|Mv3zp83MVcP%aK#O^iy&#xt@qFgG#sGXPz{#ni;e$go_*WY0V1 zWX_bjOZ|G~QXw1Xv>5E0!4NH@nzP`fd@ZBootkIHX=+S218nA=TB7_^#FxRnrq}a_ zn>T~_%gK6cwZfI1w!D72A~t#d8P=~!zrw6E4LT&&KV6%ZfIW3&?YnLbKFc!u3 zyxW)T62Rx0^+@tL(~N_fN2Hx^zN&R|yZS35;pe&i<|&VgPMlil^VGt%o#p6>GgCO7 z`1`7vm>C%u7b_ab8^{7fT$YbTj78)_R5DwS=N6^e6Q@SSy5+r?zPSQOK<_w8(0o;;nmJ=Gv8eSg&Hi5Ux9UKxFnx@OPo z$}@jL_DbU|Qmnpa)@9aB&gyrq)SZsa+&U#Zz*J1~kx@J|N1oA{yRC||3sZiIpXk^q z|6eOHWBPsntMWHH6}O*~I{4#Z^}i@P{@*_L%bDIDYPmG2?QZSGbxbC@K2Z@1KW@A| z%WjjblU4(dhQphf1u>6oLS+-3D%Z~0&bR6M*FSFI^F1e>STA|}nq=D1sQbRQ24&xs zRy^Bzb??PS0})MAucxQ4-n#5E{pNxb9+ML8vM0_yr6qB_%T43|pY6X-wto5e^Rjoh k!VA5NKSf%i+N<+4`B@!9xc_ErU0~c`Bk}9@kF(N80sON;3IG5A diff --git a/src/test/resources/tls/client-truststore.p12 b/src/test/resources/tls/client-truststore.p12 index 97bae6368eda9e21f2fc0675f5f10a085a853772..8abf4701f4c9d24419a9c06f28f32f64e9908c4d 100644 GIT binary patch literal 1079 zcmV-71jzd^f&?=H0Ru3C1MCI~Duzgg_YDCD0ic2d-2{RI*)W0w)i8ns(FO@BhDe6@ z4FLxRpn?O!FoFZV0s#Opf&;e(2`Yw2hW8Bt2LUi<1_>&LNQULK7@{mcRaClCSwATSID2r7n1hW8Bu2?YQ! z9R>+thDZTr0|Wso1Q6>JhuVozPr>z)uDuF4Z=`^N13(L|B`yZPvv^FG{u%4A`41He zRsZj)?=59f`1?nEVgw4V;!8-OVE>qFB-1Lv1$N;Oe1*AsDqRrG4GFKb{85+`z5P%zMe3m?B`?z{96YSx3rzRk!@WIaZf3v%UI$UR~7@b z#RPI=vLWnl?`f-4Q8y;Q!)Eotb&&p{z+k6Sn@ES~5vNy0LG1H^3)*2*n;k?%3k~%N zKG#-|p4ht`Hr0a2CmS%18{uYGXIfrSg9pa}cN;!!`}zT&GbK4Sp%4W!EGodZt6^n< z@P@Mie{jic(T6LIIh$ND%O^kkhMr#CRZ=VSirLLUSj&wM`{VXzA&g7*p(_!%ai*dL zK3T=L7=mTj1K`p)h#vq)2OG9w0IYuaTIqN}a|S0D5nU+zoKaQ~FRzw|mD!PHr16NR zYzp3Z18F1p!Jy$Geh)==Oc}`FD9iHJla*{P( zH6DB^TvEm>Z2-Q|((fi+Hc3`RJbR&^wp>fy!f7h=UJc-szch#^bHHp*>D!jE;AnNa zJG9Juz?MGs^6ec&oE&YTFHIR0f(roVd_BN_~t#^(nFOOYPk~F!93#6n15LG7wZf+aPUVv*Z&#VeCm%2Lb~DhM@Mr<1_#O literal 1018 zcmV{3Apkn7ts$)NiTk=dKM>6QzVK<70M^|np(?* zwKxl?ox!#+UGWkV9J+$o%{vU7Y(?qE4iQJs(*GCdnEu(!y@rtYdR!#lK^Zr`5+Q_n z5agmEonG3=%FJ|Djlp}2N%OkxGfLgeG!#4}PtV_~xfmhq17vESwZ@9W3|&KMTGi`B zyVpNTM?Dv8NM;xJRKlBgkOqvJT0ff`M*P!zA*3wBD}(Q=(Nhx4nMCfYgtqC-%Q5=+P6~Ns_^8y8v#Q6r;`an6JikYnx|_4-9v|Zj)T$(UMRYVcO!>k3)*mz zpuH45u%mN>Mj8Ovg?^EvbeQAC3DdI4Xq5Xt^ zSMXA*eBf{_G?)+;pgM4fZ{oT2?0;LlBrrZOAutIB1uG5%0vZJX1QbqtN10Y^=ieDl o(q4vvhPj zJ*~-<(bhoxK`j@MW@m|D;xM?;V7YHMHk!S%OB%&;d+d}I#JOzPu+JN9s&6M$KEFtg zB_$aIu%ejkbT=7=A#Y5t{(Vu;uS|jm!bMI*(Vv0 z^rTJGds_RfIMXTH!t|9BIx1^r#-v^`;R)L`F1JL{E#gf2X4&q&fYUcdMxqz1;MD*D z$zIG)xAbk{$^a!sRs&Jo?=fG)t->w}7Jxf0j|`J64Tid=`)D%QXV%jHAt{lH2F|a> zAfRnyE(5GtX6J%fe|k#-0|5X5qaiRKFdYU1RUHll76cR{{FGSw>S9v3|EQsg4sz!p z$cs2I4F(A+hDe6@4FLfQ1potr0RaGnISEnSB5ACsH2dPN`ESx>5-Uim?rD%dJ+Vg* zfO)2;?kdKV``ubokF`fTYzt(QLK%9xdV?X?CULJCgE Y_@jeearEI%g~fox^#I9Ihlm*sis-Q#&;S4c delta 627 zcmV-(0*w8{1;YgsFoFWVFoFT6paTK{0s;goHzPxl5+WZS7Y#8uFf}qZF)=eXH8NTk z4Kgt>H8M3ZF*7zbGFp)#6Om{je}-j^>y#kq+af_)XAYEDNsbjkf5~=DrUa8`WR}>6 ze|Upx|36vVdn77c$AAtq?pB+c)#tOm`eNm%B&}DV?@o>OtGO!#=UX#m2Ylnk6{Ex?DrrYd4HNIC})UnJE*+2R4_;S zRY5M!Hhu@rR@ZxoT%&a~`+?%fMK;*E15YlyTP}7K*OOK%U2LaNii9JG$G zvT?K7Vb*KTV_Yk|aslx1c$;XNQ^00%YeyTjmCi|s;#5dI45*gl)!3wVPTsKeIrgS; zs+P59AYuM;R5e=mo*t~E9sw&yu1-Q^mpZS4q+y1a5^d>!Iu~d3`AvyO+ESUF7e>H8 zOO$qarf;l3ZGTLB={wf{XtLOZG&=AT6&DD3hLeaXQ#EB@oQ}kkJ*2uv3*&7g>imfv z0=793hln@^NACyiqt3>2m~FoWSp(X^u`>9zqRK?0tn)Kqai%_K3i7y+3OI)a2(jYR NIn_Oy{1ZU}a73ls8KM9H diff --git a/src/test/resources/tls/host2-cert.pem b/src/test/resources/tls/host2-cert.pem index 6f036024a1d..aabfd40802b 100644 --- a/src/test/resources/tls/host2-cert.pem +++ b/src/test/resources/tls/host2-cert.pem @@ -1,22 +1,24 @@ Bag Attributes friendlyName: test-host2 - localKeyID: 54 69 6D 65 20 31 35 32 37 33 33 34 36 31 36 31 39 31 -subject=/CN=host2.com -issuer=/CN=host2.com + localKeyID: 54 69 6D 65 20 31 36 35 33 36 37 31 31 38 33 36 38 33 +subject=CN = host2.com + +issuer=CN = host2.com + -----BEGIN CERTIFICATE----- -MIICxzCCAa+gAwIBAgIEamRCPDANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDEwlo -b3N0Mi5jb20wHhcNMTgwNTI2MTEzNjUzWhcNMjEwNTI1MTEzNjUzWjAUMRIwEAYD -VQQDEwlob3N0Mi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCc -H/49Ex1L5E5/z4+QNVTw02gxNUS30bawigxleYlnnSnm96/HdJObKspHyC+kwUYS -P7/g33Gt3EFil4DpkqMkvm8Yp+tcBgx1GmT+286UHf6Axlm81pfXp/lRQY8z6PPC -R/H4yvsz4dcOXeclhf+pULq2C296rERAwxl1607/HabJg4W6HRICKUWYjwD9EGmA -J7nIOY7w7IVHfzcuiHji/LUzq/6iwIR2d+KMbf6wsHDGstGM+hC6gj246r6YyRMb -yVqaq6sk/XrOlMq3ierdF3FeRZKFe5ViRVMoPR+uQeZnqrF59RMD4jmpoPJk2Y79 -v5fTIaVG99EVQak3F2InAgMBAAGjITAfMB0GA1UdDgQWBBTVTadPDnnCR7tw5qxy -XA1prlqj+jANBgkqhkiG9w0BAQsFAAOCAQEASvJMmJGHskn6/bdvnv+ZEcxtRrL5 -qCnujw4Nbs0MoLpEdjxc7qS4ndl8Yt/krBYbnJygZtNUURPTIJeFmqQHTPoJvrU7 -Op5ABe73B1MMwGry0+HHK7r8HqCKHgLDdAXtNfB830uKmZDFqZydJE00EAqY8yOC -qg9mE0uqcROVd2G7XCA4kEBM1NohBJ9dVgJk2k9v39j1NmTrCwFu2PVZASVD3Mk7 -hjZfNRSaGj/KUYqa06wDJG/iJPN+YxXIhqZbWzv4azRejE2GhHf+ba65I81+bt5r -+jDaL4YW1m8eWU7QTtIeeQfnQf/gzskc5YL6J4nxChn6TbUc4Eqzz/83vA== +MIICyTCCAbGgAwIBAgIEOkClEjANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDEwlo +b3N0Mi5jb20wIBcNMjIwNTI3MTcwNjEzWhgPMjA1MjA1MTkxNzA2MTNaMBQxEjAQ +BgNVBAMTCWhvc3QyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AK/ZnaewPCkoxha1QStugqMlTw71uvcvCHqTZmvKxDscQc1ZQt1f5/lewiFq8Vov +/n9CZZRCygsQhS/8Y8yleGx5SnrngvSCuv7DHJYhhfSbsgOIERsxNSBqyNAIx56t +KLXgqsjwd0nTB0o3ckTnKkfYFFdbssdS73ZNw4XYnTZglvuurLjJXJd/D/3VWTR3 +yDo3YVcLLwK10uNbS/xTUmhNARTH0PnC5xaJbk808dUYcuxreh/He+t6imaAcFyB +h9PlL+jjzzExJseB5UNp4T8Zu65e6rZLF1PjvOND7p52eEudobLCtczAvOuzeQA9 +XGrOL6dbneecw3OfLlYtaFECAwEAAaMhMB8wHQYDVR0OBBYEFAh5j4jHI1CxY3GS +8MocRdT/LrasMA0GCSqGSIb3DQEBCwUAA4IBAQBOUrB/O9Cz+DxkzPkr0HP5S99e +tkGiU3Zn3hDtuOSnVEOrDYAP6gEuVqm65ZOpOVJ2hXT0giIGR5BNNtCjtCyJpYII +WMmvvW1au9t/kf2/TiqELUKVK1Ya9KczTpGmRk6C/A/OU/6sF94paRFBp4pRicOv +nrW15CrLDpDiQC6iyFIaDblVW6x9tgYacP890t//5agU1PD7Kain4cF9kCRCNODY +rRW7rSsj2/urrVkoIODZSf9S0YY8q7w4HmLjSC+8wolH0Umm32emRQT/tO1nAaIM +ifBuftnys7ktgYTFmN3GwLCyB2n1Ri5n3E4vGUJAFZeh22deX4ucPkZvnKC+ -----END CERTIFICATE----- diff --git a/src/test/resources/tls/host2-key.pem b/src/test/resources/tls/host2-key.pem index 8b5bc78599d..b5977477186 100644 --- a/src/test/resources/tls/host2-key.pem +++ b/src/test/resources/tls/host2-key.pem @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCcH/49Ex1L5E5/ -z4+QNVTw02gxNUS30bawigxleYlnnSnm96/HdJObKspHyC+kwUYSP7/g33Gt3EFi -l4DpkqMkvm8Yp+tcBgx1GmT+286UHf6Axlm81pfXp/lRQY8z6PPCR/H4yvsz4dcO -Xeclhf+pULq2C296rERAwxl1607/HabJg4W6HRICKUWYjwD9EGmAJ7nIOY7w7IVH -fzcuiHji/LUzq/6iwIR2d+KMbf6wsHDGstGM+hC6gj246r6YyRMbyVqaq6sk/XrO -lMq3ierdF3FeRZKFe5ViRVMoPR+uQeZnqrF59RMD4jmpoPJk2Y79v5fTIaVG99EV -Qak3F2InAgMBAAECggEAXMbCTUbrlOrCHz+Xv4mBxW7LrtpJ0LZlyvjuLusPVSxW -9zLfGTbUdFP0Sr3SWiSkYDnT62y84CVQEaeYarTCEBa+bDd1LIVHp9scgzrZwrkk -QSAduZMIPpZKGRhNYfqfyCb6yu7MYmNladsxfeHoMJSRr5aSE6MFGDsYCTPhCMaH -cVrNshMBFGDm6aNYBrERihJ38UHffGFzrVsh30Fu903yBwe9Vg1zmu83hTsW5MQL -Hvdl2/Gj41BsQUAID+CRl/NzlaPp7yirEwb634QTu0VD1ean6YghVbfxUdasoxIX -S/avsMf1s2tqv2j8pShsVmKPqjldjVTPU9N0c5PJYQKBgQDK/NtpaM1jYBmIviK6 -cuTEk1kLuxz/m1mhl5+m3JGFxG1/+yIgjaeAIz4JEIC5rshpUuZCZjNETnkz0qMe -sdyOfdPN24i0F8Gz6XNxOA+KIhnzmxICOl5lYkyQBBSsLd6f10Nw66lVaVdshWCr -K8eegpXlAz3UU2uAz6XvRBDTEQKBgQDE5gjsRF7JaRO4IUaQ+fM3hgGd6lbyP6v1 -ucEbmc9CGaSiiUSFyJ4waQE121QpaCR3J1IvEPTM0sMOB544XY5U53FPSqPWvIxH -jRRf2eUlw9aGCzqtYR1kZAKTePsZLbCin7FvWT6ViwWNKFQM8UTH+iycM3nvDYYQ -hOedN4ZxtwKBgA3PlHIgklDfmf0myqAa7xu81sMokPmHLVsEQPWObkxGqBicEp9a -Y/og67icKdX4YWRhIo+D+pr8J9zxyO1uto3vW7jW5f8y2pgOGy+p28zPMyrS8y+5 -nvCQ9pqZ3Ho2iL4hXFJThmrsRul4TbJ3wRY01lQFm3BV2Kuj9StJW0exAoGAZo1B -XH2HuPOHl8GNFXl52hNryCoDuwy6rbNgBtYngtAEVbuU+vEwoxotzTU9MovRYlYS -kf0M45lqimYhXE4uEb6x35CKoQ93KNUsJXhBx1em5g33M9J/EoicZt7+OXD4rNrr -+YjL9euAqrK0hEEth9KfZYPSIFY022m9kL8YwSUCgYB8kA6Vw10PV0bbh14Yf+qm -A6F9/dz4/4FSLuuGUTGuk3SuHeQnJF2HkGVrtoaChdQ6l8KSTSq4dhp2jnTeXJBJ -UD0jtSB5iZVN0RQP/AcukJKBCd01rngJOii3nmtJ/+z5MP3/bQ3gJxViFR/EIaUY -eaOSab6v88895W/frS2jMA== +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCv2Z2nsDwpKMYW +tUErboKjJU8O9br3Lwh6k2ZrysQ7HEHNWULdX+f5XsIhavFaL/5/QmWUQsoLEIUv +/GPMpXhseUp654L0grr+wxyWIYX0m7IDiBEbMTUgasjQCMeerSi14KrI8HdJ0wdK +N3JE5ypH2BRXW7LHUu92TcOF2J02YJb7rqy4yVyXfw/91Vk0d8g6N2FXCy8CtdLj +W0v8U1JoTQEUx9D5wucWiW5PNPHVGHLsa3ofx3vreopmgHBcgYfT5S/o488xMSbH +geVDaeE/GbuuXuq2SxdT47zjQ+6ednhLnaGywrXMwLzrs3kAPVxqzi+nW53nnMNz +ny5WLWhRAgMBAAECggEAGSZZeuskn4paUlMX//stKeIjHXOdis6qOsWsB0yXphCT +hKf4fSrDRZH818SwwgJNNqwrVPn8ZXq2YbeKGnGr+G+cbFmCDDBKSDdldj9TJjnC +SukB8U6nV3yOPdqTmikPwntgUZ66oM9SopWtfRdGn8HSnu/ZcNJ2twfGJ/Vj/quy +82qYYB+aOJHXna9esDCf8VPfuSf1wQNl5KMwrR4MbyjlmPgJRZHI7+ucDfEjRP64 +U50qJRiMoHFHc8fLtEExOyGoSvkceVVzD+Dyzz48k7peNtu/96KBgJKHyCR5iqRe +gR9k4oHDL8ZA3yIUtGnnon27denVXF3E7WpYy/NbMQKBgQDj+040PC+xi3PlMZZC +KVD9XRGnbRC7SlM6xruC3eacm8q4H/fsEAlE6M80Rykd+136Z2L1CqvPiuS54NzN +f3kGhxvGaDIatzy8btRRl6cPmzQIVVwJUF+Ud+0uZrWgmVSGMMiCcn0tsjzpGXV3 +bLsErYYy+IPonNijnDKH5lnttQKBgQDFdikkJ0bR6HQmvb5wHyK/Huu9i7RJ59Kh +8X7Wk1RjEEocHOO3a9AgCuqZCVoZcGlmBR2Om35xYe0UsUAfoCESs+v6Z9QpQKC/ +Fo3gJARDubiw8CHbivFaMFScc8EWWp+GSfoFY4qq/ojxzMDyWYIRexfPIqq3jbSa +VT7eXVvRrQKBgQDMaB4OJ4h7n5UiAfu/BlxfTnrtqpQ92L4XDOhCxcJm2ChCPieD +uD0XU8W0EbmD8ESqptfK7O5u/xFkt4BBn/FbMPhuRC3oVjJWoOgs39Qh4f4dGquS +jkWkUIKP//cJL3DhgAvHKe+icRS7yt/PW+WypAKW4MskXLzAtON5hcdLoQKBgBZp +GLY/tuvv4+7ZrhlvjzP9wGecyXNx2hgDHpAf3H35xU93f+i7Vb2tP37q7szgUzX+ +8qHSyAD6SjwE+fAc7mP/A5NB4XRlH1lQp/1+WPWOyIVcW5tdI5NG1POEt69fzaci +Ejw2VfCePtCimmtm+ToerE8X8iQu8wZpEl+OXPNpAoGACCHRXsbAVjdTsQ7L/Zqs +5Te27aC3dQLVO8bsC9SJhwjdui6qoZvmYYwU+3bNOM70TV9AkI14IVYJbFPDDq9Z +8xLKjSOUj6k82+Vdiv6pKuDg6VnHHnXzyz+qLUv4HZ/gai2a7ExMzQX80Gqk2dbW +N7PN0DcuOFozB+7JjPdVbM8= -----END PRIVATE KEY----- diff --git a/src/test/resources/tls/host2.crt b/src/test/resources/tls/host2.crt index 348466e746e48bd7f3068626f50e11e936a78a6d..7803b66fb93e3cf7cc5f71f0907037f27a4b4d0a 100644 GIT binary patch delta 639 zcmV-_0)YL?1B+{GB7nUIWaddHZhS_Ie)L&ou{xoDJaGkwLvRxf}>*W^2mCI~+mH zSwh`k=lNd3A!_kjFaCc*Wt2k73lN1b{A0|ecx-t}dgp@lg1Y|09F`%4^qaB+h!Gnx zH6Uup&twnNz(^PH*!ShDo5B9S6i~jQtx(6!-d$LHh*B2`>w3G$y}Fz z5B=3yG}z@-$9wB~ie`Xt zT!DwvA21yT163Uk1QrAo2zif)$0Ja&V{wx3${a=1 z|1P$yFbxI?Duzgg_YDC73k3iJf&l>lPExRcJJ7TEJY>xIE6{WKOW$6$L84Q3XWkI) zxa6l)L#qvd59$FfR;jw>lc_mUc7=5Gf+7Y-kWDtwqqHoErGJ75Sjn%wZCbnAf06ya zPAY^gLX|648uX_#PLZZYPJ;Xo&Qt!Z7v3pp5kaSlQHjH^p0%~)D$5R#;y^B<$Wj^& zxm8=NeYOS~aQ{8h-~Z*P6x8thDX6F6!F`YH8M3ZF*7zbkytr@oFD!@6CF$BPJhpjkTq2B(`Yd@M7Pnlu!;<2d5LG8DdzXD z$8?jMD#}O5FQman55`))zHb<(>s$s5bsA*;+s>37{(#0=yw;c3 zr}rVfF9j3{Hg}NOQ0x3n9 zj{yA;X@DoW$T^Pi?1e{vH!g^H;{3HUtNxb{uC z6C24|nyafM{d&%n%D0K?-4}6QMUsVkm10FxC_NvpLFQ+wv3d0q1L8TUpz>tdj{U!v z(;=ls_t6zWsW%q_VkeW40Th4LO{Y%|dBR7#aOSLXTn%ZiTBG_f4F(A+hDe6@4FLfQ z1potr0RaF?@=TbKhq6if{kLzP|CtfYZAP;Bs44D`4h?S244}G1c063}q_~~gd}80^ ztQH%boS!*m7h zHSm1jONyD0#i^W~Buz9B3YhaFf~pT@6HBUb6P0&iyIdeRkU&h-+93p=T~-2Q+D~ua z*!4DK>k9#H*!5WfB}3fFJBBu2H58f}Kgv;xn$xTUByZv*^L}F$$cCm{TRZq`G+vBN zhJ<(iZLYZ^&3+$sFZ^`X`C;3K{xMwH)9| Iv(NuGyrf?yZU6uP diff --git a/src/test/resources/tls/host3-cert.pem b/src/test/resources/tls/host3-cert.pem index f608a2586b3..c40b07b0d2b 100644 --- a/src/test/resources/tls/host3-cert.pem +++ b/src/test/resources/tls/host3-cert.pem @@ -1,22 +1,25 @@ Bag Attributes friendlyName: test-host3 - localKeyID: 54 69 6D 65 20 31 35 32 37 33 33 34 36 31 36 34 34 31 -subject=/CN=*.host3.com -issuer=/CN=*.host3.com + localKeyID: 54 69 6D 65 20 31 36 35 33 36 37 31 31 38 34 31 32 34 +subject=CN = *.host3.com + +issuer=CN = *.host3.com + -----BEGIN CERTIFICATE----- -MIICyzCCAbOgAwIBAgIEdkGOEDANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAsq -Lmhvc3QzLmNvbTAeFw0xODA1MjYxMTM2NTNaFw0yMTA1MjUxMTM2NTNaMBYxFDAS -BgNVBAMMCyouaG9zdDMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAo5L48OMLW97Tbir1D8QP/jqXC4CCrMCX9bg2F25u2rEpjCspbHu0EifdY3cP -tiZ6BYOZxe5RD2kRC0VByD1r1HnMcrYQciEOMVt5alz96AVu4bugBxpVTbytcpD3 -VAeZl5K5EzjyeNlWbY3JvxKCyTHlpz6mUNl7IhwyXqPDftv5qTdrqvvxHvAVHIAF -c8ElW+2TI5RC2rkNB7Gv3nlnPL6z6fvRanC54OechkYZCM9fPWwzkdbRU0yRBfm/ -tx4NI/GzfldlWcDtJLKuP9qRUr0VMCZkQ+nzwLXg63kt364RzbrAi003LECeQ4gl -FEWs/OUKPQQX/kt3QJBC1herzQIDAQABoyEwHzAdBgNVHQ4EFgQUm9TKnhE3spwH -C8lID3JNLk6+l80wDQYJKoZIhvcNAQELBQADggEBAEdnsCol3hZ4x3UJ8YI3H3H7 -O0Vym88+v/NszUpsvNQp34XilfWNTaFU7VJB1OMkUhWYK1J5770TsyPHpzYG936Z -XrBEOaIAYUVgjVitlUkUS//1RLfabEszwzSmDAD34VlkMT2tUw2MPsWPX10DrkCd -rNNKXDJosjRg3eRtBqNk4vqJt8T4QFjYgr2L54aRS4eYhXQXjygxPisd57f+GCwq -NpfqMQ/1RB5XsvZmybHmkyQC3VAohCMAAuV8cSn7VgBETwuZsxNaDn14hZn8k3U7 -dLAIH8j3m7Pf7nq6jZ3inNGk/AFs/9R6cPGzzvY1qs3RT/oM77jtqI4EglVEDJo= +MIICzTCCAbWgAwIBAgIET7xa3DANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAsq +Lmhvc3QzLmNvbTAgFw0yMjA1MjcxNzA2MTRaGA8yMDUyMDUxOTE3MDYxNFowFjEU +MBIGA1UEAwwLKi5ob3N0My5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCGTFnvwV5eK+rLJNr10EjXTWbJSdGWmtu0OvHB/cXDITT4eb17rFtVvfaz +69WylciNu0zL1d7N0p0+Sdzanoy9eMUpM929AKeNlMcxqjItWZz3NVD2tpP3ZY63 +db73OZG/wRMz6Ez+h51LFQ7NfUMxM8hn07dqZCNshhNIiVDV2DUaZScjKq2Ib2r7 +2FTTh8mQIMwWtZ/CKryN6TdrZlD8fphnJxHhTXroS9zo4cdfKkfwyjnWkEo0YZ1T +znBfWZVGR/fT7gZpgJ7mRn/RJtzWsKSGSK6/fCKmLMMAG1NLZWHllhwRQUyRJx8N +aVXj9pSfu582RyFhE5hCO8LI2+kLAgMBAAGjITAfMB0GA1UdDgQWBBSBcYb98fDe +JEWmW+JrSEs0Qzl3xDANBgkqhkiG9w0BAQsFAAOCAQEAbtUKXpUTEPM/QUl8vg6w +kIyXOPmbneOIt5JJQEn0I48weRCyLdMxw0YN7B28RM0IztXt68EptPdD10Fj2aoh +tr92eO7IA3Q/EjhiTz4XVbptw6ItxvYrJhxNic/a2FCofmHIOKLESnTBhitCtpUa +kC+ttpAFCLSfB/BNHoDYt4v31eNPqXSXf7wHfN9Nrd8eOofbncVKy9rVB6aliVqo +UFGc4Rgz+crr4N1rza2zuLORfOOHHvlDuhh+dg6aef3KqkS/gTJwxm0FdwDAAm+o +lafWsxA3Us1j5R2YKLS/SkuQ1OpMJkQh1vl1gi/R8s8iIT3ZQM9rfJWpsQhdd9KA +EQ== -----END CERTIFICATE----- diff --git a/src/test/resources/tls/host3-key.pem b/src/test/resources/tls/host3-key.pem index bb1287c178b..14677726cbb 100644 --- a/src/test/resources/tls/host3-key.pem +++ b/src/test/resources/tls/host3-key.pem @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCjkvjw4wtb3tNu -KvUPxA/+OpcLgIKswJf1uDYXbm7asSmMKylse7QSJ91jdw+2JnoFg5nF7lEPaREL -RUHIPWvUecxythByIQ4xW3lqXP3oBW7hu6AHGlVNvK1ykPdUB5mXkrkTOPJ42VZt -jcm/EoLJMeWnPqZQ2XsiHDJeo8N+2/mpN2uq+/Ee8BUcgAVzwSVb7ZMjlELauQ0H -sa/eeWc8vrPp+9FqcLng55yGRhkIz189bDOR1tFTTJEF+b+3Hg0j8bN+V2VZwO0k -sq4/2pFSvRUwJmRD6fPAteDreS3frhHNusCLTTcsQJ5DiCUURaz85Qo9BBf+S3dA -kELWF6vNAgMBAAECggEAeVp3f9chvTXSLECIcPrnVphHKQxdZia4Vl8lGjse2PZo -uYnoAIjB7lpPABT7vgpLqr2YnuSQlNtA/tiR1injTs5R5KS4DMQDUJDpwgRdhv5I -5gWZ0ssxkCuzjnSIWXoN9AqxbdZo5UlwunRfwXbNOtDe7TYok4DVvlem8tmSFxGN -nEly9gYPoFRTq6/qu9VsuZrBrbCx0sxv553KaTkfkBQolZYHSMA9SR6OIMiMm96K -kjKC6lrNJcZfQBO4sSml+1QTZ+7zyp6+E2NdiZVoDFjyJcYj5naFANqCVOlrLM8a -4rodwX2osV/OpdBXPIJ3+99/PSLS3MIOv41rJBD64QKBgQDzvfsZFNqt9GoLMdX+ -gWIWpV3+mT6TOGRANXJWeAqIfib6NNxGvq2kyo3gf/g+ujhuwJ82vdE5UC2xC66J -smD427bd5Oc8CYqEliV39u2Jq9yQZ5ikV87S5JuoJKb0n0mUC0bbf9JrG6dDdDOG -T2Wjqk8Rd1xpm/ZOn5U6C89m9QKBgQCrzOGgwwltt68qUvBLYqVbDaZ2HD9lTW79 -po2UYuGrL7uq5H25/ZdcHlFQaDkXB0w9TvC2JLZ3K4XrmH4ZvADMtlM9c045J0HD -B0Eb6WONQ2QNOkfkfcVsi5bel4JgTsU3AFGoYZBSAwBqedQrdNRjHSAlbaWIcfcq -rH1O0fq6eQKBgFKTi41MxmVmx8JxKNmnhc68SaLm0g9YbIZgVRM8af0iGBxuai5B -jVymDvj/AeBmgJXtBkOqfUaYhlJT7dbSqw3EiiiU005AwT/4CkuhSYp5wijeIBWV -dgl2z9FgUXvQt0HDrEbTADuvS7SLmqUnIv0WxuDY+mMBJqouYIUg2Sw9AoGAMXwR -HVowVA8NgFZlaoFeeayj3u9h/07fgmY/75bPw5w7JQ0tfa4is+DzsQJkN1Ldzeb4 -BK7sc8TwjRzebZEudciqj0+wH1xEX+WuBlkiWKUpo3m/DXyAqjRG35SqdA0cVyxb -WPHJPSYqL4Ep8N508puID9/WR0f0VrFaYqKu4pkCgYB0UzlqB1Z2xbJQEzx/XmG1 -lEjMQ9KmUyJ+KpbNTy+QGhcuUeXQTecREPn/TShMIA7nvw1XkFEr/Uy61OpZcrgh -EtgyTprrLBRyM6z0FwUfMaNA7ESgC7U9uGWT8dhNNmUErtBLMJWv4EMMR7zl37Sd -CY3tfx5DKab/yGvWxiatsg== +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCGTFnvwV5eK+rL +JNr10EjXTWbJSdGWmtu0OvHB/cXDITT4eb17rFtVvfaz69WylciNu0zL1d7N0p0+ +Sdzanoy9eMUpM929AKeNlMcxqjItWZz3NVD2tpP3ZY63db73OZG/wRMz6Ez+h51L +FQ7NfUMxM8hn07dqZCNshhNIiVDV2DUaZScjKq2Ib2r72FTTh8mQIMwWtZ/CKryN +6TdrZlD8fphnJxHhTXroS9zo4cdfKkfwyjnWkEo0YZ1TznBfWZVGR/fT7gZpgJ7m +Rn/RJtzWsKSGSK6/fCKmLMMAG1NLZWHllhwRQUyRJx8NaVXj9pSfu582RyFhE5hC +O8LI2+kLAgMBAAECggEAUIG+vFpH7t4W33aViBw3PlIZFvuYl9b3c+COAsPVZLco +YPfh3hyhmBHLrWnn7imaU1R/ogXwjaP/PVLcAXZgWkjmsF92QpH834PbsWscr1D0 +JsGganVi2EDaQCJmux+YvsHIeCp+1WqIoXTbLdY0jG9FaPBjGHU1Qx5QuwAOJFKb +FT5EoTAqDQLugtoMeDLg4mcoHxw9iet0DaGfSOwKQ1pNfOrZ4XFt1nLDq9G+hKCl +6ChrIegvav4kWpb55Cy6lymffR/Yn2GGhX+xl7Sgb1HwAeyjBl6hN29nN4Gl1UFV +H6xoubirHKJAWpdnABd+obiETtX4fazgQuC26pfBKQKBgQDQdl/zz8x/0/e8yPP/ +3XV8hlrtvtxbAXX1kosMXSzBliIF+zz+XY98rRZCFpleiDwHLXzKDeesImwa8cJ+ +nkiHxUpUPD8jTA6hB7xWbh6WOF6sRe8Jqf10amyXe42tb64pN3pOmCSIeAGOGTgU +ATcmgutQu74Z2jY5jb4BRuo29QKBgQCk7GtB3DcD0WflGvRXCCAfA0UAcMBGX832 +XeaSQTssydOzhauldHWzepM1X8qX75YyXreR38uiFTulmsLWJpjj08iZjy1ptGJp +hb/NUUs/eHcnv5znpyVmJRIHNDDFXvnYuSZm3Mfk7LRIdMpMX5673/iv3DeRoeXZ +DcuUYZmf/wKBgQCReorr85CbhKnXLcZaQYrEJF9Am3ncaOCRSHuRXVTmpIeJ9RNT +0KdaMtDdvje6KQj7WVtFBv8uubcH9r/s7TlgxuZgcsr9Lw7mgieFicP+wcgQIZ33 ++JHQtJSkAq2U4+N/ECBiyPp14onzSNZB37dFQQhHhz3bfNVqxOhcq8i4IQKBgAwG +GIPCtFgY6kQvxOSbeQwJxvwTPFFlJrTxf5/mFZRcWozaD/uOFA6zvwvDIhgVpZOi +iCugb04v0htuvwmx4q+pfxSC9cKhHhOnZqZnaN8Fv1oshBn3e6iIx1mzGmMpW3nL +ddtF+WTdRP+LVDxhNEdqOs1Hdt2tOf6rHM6ClxqtAoGBALEw7DMDn+L+4fMJ6lHb +Fx5JTSaie3V2d1v9mhmh+iIGv1w9cVsWLSwNZ/aaRW+5b8Cj9R44dxwDF+2gjg9E +4Dqdr1xnsfv6iOaOPyp0fgJh/RcVVAZ2zw+VpkqUB10VHsvSWbKjbOVEMgGLRt9/ +0W/aWzn6JTWu2VyVxSp9mWxh -----END PRIVATE KEY----- diff --git a/src/test/resources/tls/host3.crt b/src/test/resources/tls/host3.crt index b277b5e3b70c25ad9bb05f3af5fb810d3f5bd901..1f4183bebf5c21426d139cd1202f37b1db094ab3 100644 GIT binary patch delta 640 zcmV-`0)PF_1B+{GB7nUIWaddHZe4jSvr4)Oj+;2US2Ee%Ou+M&`8%!X30s>mYUnNI`P5%#ls;q z_<6m1tXoyR_Ot8NvX#h%KMo0J4?gnXqp5{h>(I(v1u%w1auD^UDrYyq%8&gYVVda(_5kX9mCm#)IRpa)Q zpSzznMFN^FKjJe7+8_kc^i&`J0{Nh_{kS zKuPo?k1%-%l3s_e0k~W7(=9w!eRNc<#spbUzX}VoyF7 zRl04%qAkYuD<&LGiO<^DP^f-k$T*_JN_4@7D?+xF8jvrowvYt~w4Vp?O&);Qw~P1H z<4>t{mw&tmeBVv2-yS-L+nvQq%i7fkrlpBms8CUy;TSXd%Io0WYt5~*xU-Rb!~cL2ZwZ>W{0*0T^dQq5!K9hfMzze-Dx)apzoL?PDs ab%HO^^3Nh6J=s9dYkZZdu?Ssv(tr^vAu8|y delta 638 zcmV-^0)hR}1iS6DS@Y7Y#8uFf}qZF)=eXH8WZl z4Kgt>H8M3ZF*7zbGm%?5f1{H4@Z$?x-qUU>^$)}k{yLWnfP$>Rm-VHE=YaJk^;oQ6gj2+vGQy~;OluU->wnOy1 zOaJvmx7ut=Gs85d3;_4xS!6Lity2w*KE;n;T?4K_ovhPJTry~~G+^E2Z3d%c;`)iV z#P~p1*n+)_=Z29>hnR(Q7mp}0J}VvPxBeI`DmItuF%R`b9#^vVX34SUlOzJ&P$+~W z00QNFaVh&&KmbHf3z@SMS`K}9g_-=5bvtyh2p`Dzo3r2Udb*9B;+)Z>`~htL)Ov97 Yv(EN4s?E_)`V8;5?Wm3ff>lHen*KN&*Z=?k diff --git a/src/test/resources/tls/host4-cert.pem b/src/test/resources/tls/host4-cert.pem index 8c58d89f6ce..e59e1e0e69e 100644 --- a/src/test/resources/tls/host4-cert.pem +++ b/src/test/resources/tls/host4-cert.pem @@ -1,24 +1,26 @@ Bag Attributes friendlyName: test-host4 - localKeyID: 54 69 6D 65 20 31 35 32 37 33 33 34 36 31 36 36 34 39 -subject=/CN=host4.com certificate -issuer=/CN=host4.com certificate + localKeyID: 54 69 6D 65 20 31 36 35 33 36 37 31 31 38 34 35 38 30 +subject=CN = host4.com certificate + +issuer=CN = host4.com certificate + -----BEGIN CERTIFICATE----- -MIIDBDCCAeygAwIBAgIESZDnbzANBgkqhkiG9w0BAQsFADAgMR4wHAYDVQQDExVo -b3N0NC5jb20gY2VydGlmaWNhdGUwHhcNMTgwNTI2MTEzNjUzWhcNMjEwNTI1MTEz -NjUzWjAgMR4wHAYDVQQDExVob3N0NC5jb20gY2VydGlmaWNhdGUwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2eTWKttFVuZ2Ul8NeqRLp1jb0nv+87pbE -ws95IO1NTFISN7P2lPv1R6K5xAe+M8p0UzXHomnyDREra5Jgn1taP9AbsDYRNNnn -vA0qgjKt4gK1sFeceox9kQteRMNGP1QwWXoAb0Tyz8H2zZBQwXe/HjvlkfhsFOYS -Fg97y83TvttmlcABW66k/S29DpO0J1HOV+xZeBEbE0L5We4v6P8xhRqy7b4W5lzy -OSOSiPkRWJqMBicLxJzmHrjdbQonAD6QECSGp1qvCBrq2oa9qpQimvTOlAXncS7I -JW0Fi3BwJNu+xxKBsUmdSMfKtXH56zxMPVqGgAfYru+VX8k5u8HTAgMBAAGjRjBE -MCMGA1UdEQQcMBqCCWhvc3Q0LmNvbYINd3d3Lmhvc3Q0LmNvbTAdBgNVHQ4EFgQU -3Q4cR8JL/0H4gMr1I6de6ufBBr8wDQYJKoZIhvcNAQELBQADggEBACwN/FNmM052 -oazJTS6psSqd6I++vUOd2WJwtQdVBgzFe+9H6ExYCQjlwxGHc1CO6pk7xqqJgIGa -h8shAfGB8FVYj+WaEyPwKW7rdEKLMoNQOAmgkcfBklvTxqFLYNoIamxEQMhbRGMP -5xAdemn08I5fHXuRidDiyakkQud9jKAsZRqkreZ7Jrgavyj+CRnAijkCkr1xbMPU -7SW/Ac4qxBkn6gBWNKrbX9uKheUesxwjH6PHCsyGxhjzACOS/L7NN7kyJRjIDEAu -GBD+dOd3euTMqHFrQTeIe5vKnA/iEch4XIyU7XaOcgigq55UK6VuqJmA56K45u81 -MlJtaCAHPh4= +MIIDBjCCAe6gAwIBAgIEVtjh4DANBgkqhkiG9w0BAQsFADAgMR4wHAYDVQQDExVo +b3N0NC5jb20gY2VydGlmaWNhdGUwIBcNMjIwNTI3MTcwNjE0WhgPMjA1MjA1MTkx +NzA2MTRaMCAxHjAcBgNVBAMTFWhvc3Q0LmNvbSBjZXJ0aWZpY2F0ZTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ4WipqZGV1CAWeT7svIs/Dy/OH4EP+9 +oyDTNha5dyIkdpe4jjU0OJGhno9bjHDkerifjQumZKfEfOJFYH3WiOsTJNDZQ9Zd +CmKrk4z20+XLe7Gt0foEnjrg39CXn9MSIzz1dsZjwIjDoOj2Yw8URAh2q7SZsux3 +++2rlVDGYNbdvwyrNxg1wENNNZbCVTdUDTWnkGLhhKPK/xUOqNY9uW1jVYsStamE +z32J+XRwb9idGOuZvBMLKaykQSwmzgrsKcxoHDtRuPU6yyFtFL/7Ih5ytPbgtWSq +ZTZfHH95NYSBMbtk80e7L2R95nYN9m6KjsEtynaMo8YtqO6LiX9erdMCAwEAAaNG +MEQwHQYDVR0OBBYEFPH7JziBRUvF34NbFOCYHm/BRNuVMCMGA1UdEQQcMBqCCWhv +c3Q0LmNvbYINd3d3Lmhvc3Q0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEATVIx4epC +Sx1o0hDmshmJAgnna2jh8jS1NYiydgYIt0hsVMVtD8cgo7rd9skpFU5Y5i1CTZ48 +hVTvR2Q3vN6tg5Ru1kt0MPbwgzI8O9eL7S6S2WV5Rr0/3quqU9DJ0IM4/tlUH+Fh +Lc63CoxBItgHfHlcRVmEnOBFpFfEHiYgulp/fE/jHzDb5nde/Dii/5g0Wdj+b1m7 +bfCqlncMcQchMN0nMq3PTdn8jKMmY3Q2BkeAgk/fpx0BI7YUZiBHQ3NDngmNDgD+ +++q+4BRgIL2Uhbhvij+6PYdvFkbFJ3cBWB5Fu0xrQedMMnpedJrYBzf/lflpkjSx +smf0gZSv0O4LWg== -----END CERTIFICATE----- diff --git a/src/test/resources/tls/host4-key.pem b/src/test/resources/tls/host4-key.pem index 97114d72148..c1c40f6b177 100644 --- a/src/test/resources/tls/host4-key.pem +++ b/src/test/resources/tls/host4-key.pem @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC2eTWKttFVuZ2U -l8NeqRLp1jb0nv+87pbEws95IO1NTFISN7P2lPv1R6K5xAe+M8p0UzXHomnyDREr -a5Jgn1taP9AbsDYRNNnnvA0qgjKt4gK1sFeceox9kQteRMNGP1QwWXoAb0Tyz8H2 -zZBQwXe/HjvlkfhsFOYSFg97y83TvttmlcABW66k/S29DpO0J1HOV+xZeBEbE0L5 -We4v6P8xhRqy7b4W5lzyOSOSiPkRWJqMBicLxJzmHrjdbQonAD6QECSGp1qvCBrq -2oa9qpQimvTOlAXncS7IJW0Fi3BwJNu+xxKBsUmdSMfKtXH56zxMPVqGgAfYru+V -X8k5u8HTAgMBAAECggEAfWPfehnU0e7CLXj4ZRUUDSIKE6ErJb5iVoV0Is2QpBx9 -DU2/2gNY/J0kYjkmBPr79WG0xCGEYjO+h7LdHI6FLQhKzqwRC1PhJZAhEAP2JWz4 -5bdvDPVdk2/XewkPkzczeCIUZzYPEDfaFun9cLDxw6BYEpJzPnpB+02ziCNtpkIH -CtOTk9ymBSxu68jX3/B3U8W8EUn237o6CPhMlitfRolhrHmrbzmTVxID35wzMo5D -Hz3KFT0qnTVxqz1YFmVWyrkS0mi72gpe8SW0GpAxtt8Jf/llBWf+ZW2NzbSwjgAL -p3f7zLzFNde5YqHxJqXNdfxJkKormCe2Qi8yWMopYQKBgQDxjPIpM+PtTxxfUi3a -RegSHnJ0SzplNXnd1UkxE5eESABBNeQKF++RFVPr8AcSkxfaVj3azhOsOI3lv3fc -QV2mUGO3PeUHMrHSDVZIHvUFp90JxPjkdb+6jiv2//ztlaAgTmGPh7gODsHHOBzh -R7N7yPa9ZMC1PTenHGjp6/WtEQKBgQDBY5GxK5zXYvMpMnvK+WJDei74VMjzjSSD -LS5uY7LIyMLk8vovXdZ3LvFmQswxF4JeU41u7WzRfamR4kVPta8peaOJ+garQsZd -iWlFN9XwfCihaYgvMLbFJez1pdyOsjNpgvbMphQ2H+WInH2iKUMdWNe8MSjRuikL -oGaNT6WQowKBgDECSOvlNFykzXvln5oGzwRGGzDPRqTcScKhkL0dXYOgXDTe60rE -+n10V1eqlrTFFXTeRKSNZV5vBxNTWs1ckdS5wNGgBEUGmx+kRxpQ9aPVIDroNRud -bG48hF0UKUxHLHsBjDfj8IshoV17XBi1RIxcBPv+Yj8jkZQdZof3sRwRAoGAEq3F -UrF9sqgSCHah0lcIELBqfP3jcvK9BhaFF5B1okMR3/8//vc3Uces9U2aX1t/8hBr -5rzz98AFctvCChLoWj8vdpI5tqz6b+pnypG8DkBPxFdnGffAj4Y8PvXIOdgocxZ9 -NAMOjLPD/c/vqowFuX3tSHYPFUK/2Cmj/h4lRbUCgYBGvBMUqA7RBp0rFlmp1GwA -/z0go+7Fq+OC2lXQqBQdKs8iAnAOs3qJdIECzGO847KlbQqylK8PWIWgSJysRgDL -Y2qmuK9WiOulCMsKvkPmwstavN0gnTohgyxtdUhQWkF9RBpYCmcfl7gp7U1KfUZF -jXRht9wfYSYdFr0aAxmLfA== +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCeFoqamRldQgFn +k+7LyLPw8vzh+BD/vaMg0zYWuXciJHaXuI41NDiRoZ6PW4xw5Hq4n40LpmSnxHzi +RWB91ojrEyTQ2UPWXQpiq5OM9tPly3uxrdH6BJ464N/Ql5/TEiM89XbGY8CIw6Do +9mMPFEQIdqu0mbLsd/vtq5VQxmDW3b8MqzcYNcBDTTWWwlU3VA01p5Bi4YSjyv8V +DqjWPbltY1WLErWphM99ifl0cG/YnRjrmbwTCymspEEsJs4K7CnMaBw7Ubj1Ossh +bRS/+yIecrT24LVkqmU2Xxx/eTWEgTG7ZPNHuy9kfeZ2DfZuio7BLcp2jKPGLaju +i4l/Xq3TAgMBAAECggEBAIyqLgZFuAX9F1bckJyPJ118OHuwyR9l0+L/TJ+Hw3OD +0mpJ829v2e3rSzTwFtTU2EWy4kO9eM62zRBg/uy5mfbhf969k9kHzJfjZ1UEw6Mz +HgsJSU8YENr/AOeQIswi1WwGVftNAyIuP91KbvYZ6DdHsJzwLf6u/GGMTT4kZkKI +gdOpSig9exIMuOdonkj9gbA5/C0YXVkSaB6jdQtbNMv6ZW20/aAJfyYJ3ygrZSlG +gwh4crGRGEYRCNJDpvcmKnqBsc1FCQ3ziK9JZ7XYSAYDMziv72u7PhujbxRQAqzv +Y0xLTnqpE2Rqn0NHtLLvfdWeSrtED7GZ/qJ2Hw835hECgYEA2N76EweoHKhnKLpK +FA5NLOaoSNL9J3+cXYe8KpEC/2eq+Vu2nvJkEdUqE1GA5epfNBAGR+GaWNYI0UW3 +08Ajv0WHwS7ZEQtS6RPTdHKch/9UWTAmNAD1dLRE0SM2LzLdLdmS9EYEQvxpo3Me +XhMZveq4+fE3uWk0x21QMP2+pw0CgYEAupxyija/g0drNo6efjWuCWIB5yt/oNsH +H9b4nzxng1XA/lWlzxnIz+wZdcummNhRxUoDhrFQdkRX42Vh2Ju64QB/NjiPocNp +VVTky+8AZsQHaSqWeLvbCW5Qgg+tasIxIIzln/r28odKy8vc+QXTV5bPJGYLfhJM +mP9EIvxtcF8CgYBDxWpgiAQA8J9MGusLWWzEm0/7cfOqZDZ5A/HJW4eUSNElG4P2 +J8kdyX9cihu9vYACxP8xd07EdB5NR3wqr+B75T6HIBy1NtSyAYAS474GwcOaG3HU +znfmAG+A64ADP+Hech96Nmceh8J7UX4r58wjjTZA5SCE0Fut9nsY1DLAAQKBgFN5 +kDMLcnfDBs6M1ZEXahaAZOGHr7vAvlsbynNQje1N+trKbTVLD20S7ACpbIiKm2lp +RlKGFrwQrk/mFfLTFrF3i3AxtO5jf0bQhthCvSc7ISWGC3FOdxis5A6J/MT4wQkS +fdUmajjrFCY9t0cduABCUb6ydwmaHfGCnnQX/sx5AoGBAJ0/222I38DMHHNXQwkl +47LjmrOXRqDZrccxxe+DMQFTcAKskRaadnF58BB46ShU/SkQbnq6Aoy7xyZkIzHQ +6Dg82yKj3HeKDm3aF9XlhPadMtYHJ4g3gwM2pDhYVr44+4n0JhwKYT1KEgE6ygww +NY8OMQsgiM3ewbg2IZ0ZYcef -----END PRIVATE KEY----- diff --git a/src/test/resources/tls/host4.crt b/src/test/resources/tls/host4.crt index 7cda64349484f96a9c0008bd4aa733a016cd2a61..f4d7914ec306aa15ff6b185673ae71a00a52932a 100644 GIT binary patch delta 644 zcmV-~0(B+{GB7nUIWaddHZe4jV?=+R7K)mg8C^mFXOr&B$g}YB{NeZz|GlFi(>4~lcOoQq zm$;5KG&qr=o{w9MaO8TppN$KqWT(V@;zeM6)`;s9B+%JI)?Er>tCNiO)8)&1v8~bi z1fDwJ-_Vzz(-I>*^>)T%z=*@3==Ng|6hsJitF)Q2?05U^tCdj3VAg-#zYME47&X8{ zO*NLnRX0=(HK&kb;e?~g{}m3X);+mxV^xb1wW);9eTn&WaBtY180(q56ALMy@Pjfu zJJ*ZtE|S@0c}BfI-m9up(8|pHPvajj+vay({5Ycjm^4|~{%={kZSbm=cMNd{Au!!1GOf=|+5C*7CS!Cq21kH` zPv55<0VB2)W*|pHb3>j9jSc|*`|7^n6ks5|l!dr&ia)wNhi?`}#V2paTK{0s;g{kmqla6EYqi7Y#8uFf}qZF)=eXH8WZl z4Kgt>H8M3ZF*7zbGm&LPf3|rwinh^Jxt)}k!(OQp>DD&%p8ve=mc+u(c_8ggOi~gz zv-Xtx^+%$)#0S1J%5+mT$D(QS4G}AAl3<@(T0hVmur?7i+2_0sDuObt;sUj>SDbo` zeUS@ZM8ifuR4`e30B=O{&%yT1kWj&QzaBf~k@##B<`NbUd&|w!f4{)mb8xunLS?(|B|1pIcvhBVW=3MeQBa(>u5m=gx1}6)|oaP?5-E9gd z06vfqB!;J2uLv6I+J?QVlp>n+&Xfh`aW2RuZ3T;Pa3tHl#}a|DNu5Z?%C&L%>pV<7 zT84lJ*skxDU&%SU3&GO@0|5X5qed`9lhFYte;oz`RUHll76cUC4jf0qOaDRmfXekF zr(Wvk!3MuD4F(A+hDe6@4FLfQ1potr0RaFk4g6DPGfsA)tjSF-sj(`Z=#Rd=L!H@T zaJ2_j1`Ne}??>oNSP2N_!x4vbP>$-EJI1PsfPtEa%OL^rf$&vWkL8*ZBk(D1>vTek ze=>tmI0>MU$H9_Y)5f7oVA=?3Y(zlFTSQ|I=MWuwY4q@pUmbgqiO}N7sU$+@eT<+i zWg4Wd=6fc%8owz12^qkOIRcWsacslX?Iphf&ML$iC+YxJG^*QQ+lqzd9?RJiG c2%xK;R4b)!sF{H0qPXVoH8N6dXdnkZ9+P$-O#lD@ diff --git a/src/test/resources/tls/host5-cert.pem b/src/test/resources/tls/host5-cert.pem index 342d42b5eda..4d594d88320 100644 --- a/src/test/resources/tls/host5-cert.pem +++ b/src/test/resources/tls/host5-cert.pem @@ -1,22 +1,25 @@ Bag Attributes friendlyName: test-host5 - localKeyID: 54 69 6D 65 20 31 35 32 37 33 33 34 36 31 36 38 36 35 -subject=/CN=host5.com -issuer=/CN=host5.com + localKeyID: 54 69 6D 65 20 31 36 35 33 36 37 31 31 38 35 30 34 32 +subject=CN = host5.com + +issuer=CN = host5.com + -----BEGIN CERTIFICATE----- -MIICxTCCAa2gAwIBAgIJAP5VEJRGZHFRMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV -BAMMCWhvc3Q1LmNvbTAeFw0xODA1MjYxMTM2NTNaFw0yMTA1MjUxMTM2NTNaMBQx -EjAQBgNVBAMMCWhvc3Q1LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAN3AaHFBt5X7WzoJklfDmCEnHsdrIRCL3COdb8d25gdF1Q7kTrfVsWj2W8eF -WI5bcH6wEFpo25EnjoOybRvJBV+qrnaO4+83WzlnXJhQikiOS17PBbMBoPba3t/b -yahVBfb1id9mgupYfuU9s7ppQQg2O6kqbaAu0ajPmMzpGIiinrg71QCrp+ar1Qfp -O9xmjnjmxuw4FyXSvmhxkduFnU4ZDr30BEzsWWRZrZYXreod1/H7dLgn4uPqL5V4 -N2P4a91TGmdpknOd2wFgYKVnzIcHQJavNtwel7TB2EnjMgE0RddirIl11rskbZrH -zj3IxQzK27Kf9eVdmHmJ4w+F4DUCAwEAAaMaMBgwFgYDVR0RBA8wDYILKi5ob3N0 -NS5jb20wDQYJKoZIhvcNAQELBQADggEBAFlgA7j47/1hAiQu1IRSQ1duv6CeeznB -UmIoL3KyVuljo3zfnfNeuxhWm4Q6zuzMoBahkvfKF/vd7FASDxnzygOk0iovrewS -oT7BRcnF8lfV5b/pknOGEjxak2qLYAzgWBTB3SQccBwwlo85NrrNyMBmOUVYs0Jc -jAXV1R1qglsBfdn55xOzxwG1m93Mp9x+FgXaqHl/HM+DGD9otwe4ePqFM5mU08wB -Ieb1Ib3h6+zvxbUk53LTBKeyvNjzmNks4A0IPMo224mf2shqI9AiVKt0nwi2BXjh -RJFYsaqsG432h9CQE3K6JC5oe5Oef1Sz6J68BUzktP+Pv0pQy/AaAN8= +MIIC0jCCAbqgAwIBAgIUZNBuv2KqDXUXCWowEpO9nGZUVqEwDQYJKoZIhvcNAQEL +BQAwFDESMBAGA1UEAwwJaG9zdDUuY29tMCAXDTIyMDUyNzE3MDYxNFoYDzIwNTIw +NTE5MTcwNjE0WjAUMRIwEAYDVQQDDAlob3N0NS5jb20wggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQC9ZNWatmL8RCGxwkAoiHuR8/e6uAbDKWWrQwYbuj1r +pKuaEaJIuzrx7H/y/Gs32Srm3HNU9yDl7TisYtz/v6LR0j2UF3M9oZm6SWWdYMb2 +rkOflTDCvCl+Ga66PgD64m6SSf0iCKon4HgsWlELrX2eKQSAlcJkqmWKo+REdOca +nO5NWZoZ+whmuztTsYV+U4S4vEHunoc/qTa/Pibsykdl4owUdy4RbAXY9aHBoBva +jLVQZLFhF5ycpul5RjW1VVvc2SWNklPHNM8yvLf9zrZhM6gcDWW6uEN4vF/XVjbr +UQWjvm31HidIVyEcfrMgB+94IynmaHIXBuaoO7sDylBHAgMBAAGjGjAYMBYGA1Ud +EQQPMA2CCyouaG9zdDUuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQAWWZBVIZ4PGG7x +mWPrYEzA1sYulN7BJVLYIqlnOIORy9Xorr0V8vEhl0oMXvVoPvRhocCo5t+MLdHI +gEqdmFHuIzz/GRFsl5Q/Brp8U3ik7D1kwvVDlTRBrnR369Pi868ZpfATpwuMOxcs +rV/ShKdiMUV7yV3w4aEBIazZIBNOdsOskKS+hjdnnqimCZPlIs2qezXh415xGnMt +a5e2pFXy2UZ/3I0BKwUXdE7pM3i3yR8Mxnigk8GXrB0rmjT4zfKz4JrQ6BLpopj9 +lKVbRS2+X+UTBUJvDBnRTuSXZS/2apVcYRasxlPtRffwRGFA0cmm1WriyPjOtr7c +Y94/BQXx -----END CERTIFICATE----- diff --git a/src/test/resources/tls/host5-key.pem b/src/test/resources/tls/host5-key.pem index 86884271651..f5571b49363 100644 --- a/src/test/resources/tls/host5-key.pem +++ b/src/test/resources/tls/host5-key.pem @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDdwGhxQbeV+1s6 -CZJXw5ghJx7HayEQi9wjnW/HduYHRdUO5E631bFo9lvHhViOW3B+sBBaaNuRJ46D -sm0byQVfqq52juPvN1s5Z1yYUIpIjktezwWzAaD22t7f28moVQX29YnfZoLqWH7l -PbO6aUEINjupKm2gLtGoz5jM6RiIop64O9UAq6fmq9UH6TvcZo545sbsOBcl0r5o -cZHbhZ1OGQ699ARM7FlkWa2WF63qHdfx+3S4J+Lj6i+VeDdj+GvdUxpnaZJzndsB -YGClZ8yHB0CWrzbcHpe0wdhJ4zIBNEXXYqyJdda7JG2ax849yMUMytuyn/XlXZh5 -ieMPheA1AgMBAAECggEBAIS8UIhCux6m18OUySmJpf1qSk06Pg+GeF5FNgyiiiye -S1tfpBL8cfaPSP7UPd7wsxTSVOeZTpzDndYNLqxsFrBeHZJQE/Y0H4Hr8gwmYa/u -pQT6TMIK3owFFVXQXRRK2IgsD7xOw1x9Xm/gED4sFMZSmEG5aOdyPwOaSC+X85yN -BY9HoYKkPKR51nWm8604AFjWL30YWsxkyqipEMJXiY9owjYL/Eidb+jt/aa0I9xl -gI1KG845uX5mNOHkghqDO9vnMLx+S7aLuha1zGYQsJV6i1wNwtBWtv+u7hpGVsDP -o5pBk2k+Ny1YLKMSYoXWh5tdEbsoZbwDGwPuW9R8ooECgYEA+J7tgeNM/iedJ3Eu -trR/axbcZ3sHQCPayC5jOE+AWUXRKmzYDHB46Dv8nlfjZJX0p5TKpGIiU+WCfi+K -4Krdxl4rrxe5w8xmx/g8GkCJDoNOXpUuhUCqhoY7MuZCnBc9X3EBxXo+fOTDOjsG -d0D6w/OSCu2oirFSId5wLG3zqRUCgYEA5FVShaljfy/g5MLXGCrp0rmvUq0G1zLW -Gw/XsZBnaghHW/Y62kNF5ShZ4lxSdT5oeEQ3/daQKwZDmNWesKXy3pBUW6vI8XZ2 -83y6JTsav8aAwxvhD5dHq4U9tXD2jlzUKRnDwDTC8PU3331w3dC3VlvM04I9T4Ss -AQLP8o704qECgYAoGSnhSxG95BG6rMyF9zKdyQAfSH5w39eHdcPW7yuaOmJz3z4x -M2qsuhASUcaBEJZ2+M5+GL3Enj2fsHdLqQM/3Sxafw8c/ziMhALdkQ8J4i+fnZv1 -LerS649ctDqGBlGFtSo9+WtepV6/Y4m1biuDsyMY1B/czqCaic+5uroTyQKBgBev -OgYfUfDJeJyCEWmyWdq/5A3BYOpFnavk8sy6W9/FyBEj82rce42Pp/Mw/GSo+pEv -ElfEP+QWnEBoODO+ovivI/D2WruhPCl5kJ14CghGgOi8JZZGbOq/wWzmsMyHmIJC -5+kyD96KsSb/jguUMNBGaXKvGcj7zBO2xPc2GPTBAoGANYUEdN+m4BB/oCw9eXzP -j/mXTw79Dx3aTpBP5ibJ4xq2Shzc0L6Rw+2wpfgVcCBsSqXLctH9b4Dsl7iw6s/G -32MT+E1IiIZUpcxd6l17eKVpOeH8/mEa4qehORcxougSg/bHWHWlK+c2r0hbs4Ag -eVngVt3kWHnxkyLbQXQkGvk= +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9ZNWatmL8RCGx +wkAoiHuR8/e6uAbDKWWrQwYbuj1rpKuaEaJIuzrx7H/y/Gs32Srm3HNU9yDl7Tis +Ytz/v6LR0j2UF3M9oZm6SWWdYMb2rkOflTDCvCl+Ga66PgD64m6SSf0iCKon4Hgs +WlELrX2eKQSAlcJkqmWKo+REdOcanO5NWZoZ+whmuztTsYV+U4S4vEHunoc/qTa/ +Pibsykdl4owUdy4RbAXY9aHBoBvajLVQZLFhF5ycpul5RjW1VVvc2SWNklPHNM8y +vLf9zrZhM6gcDWW6uEN4vF/XVjbrUQWjvm31HidIVyEcfrMgB+94IynmaHIXBuao +O7sDylBHAgMBAAECggEBAJItvKxP73CTyYngyxI93VpWejNUjGufjQg1kAZgpb1q +eMROrfoDAMju6AaMititNm6/YgkHQQ4WHXL4T2jZ6XqXEc42l0zPaM6ejd59brPA +5xLJ3LvA7SmV+wVmi+0YTY19q/HTzDlBCJ/7CajAvD8Rm5b/f+2gkwUB4FJyBFnF +xnNHN2IK3cVk6DusS/F4ug2TAYj8+Z92+EpMhH4+KEEoUCd15NgR1o147PfJ68DO +w5Xz17OuIVx+P21jKDoG3a0FQAG8vT/tlZzeBEUQHOkiFTyNDN7M4SDUTg3rYU05 +BF9sPTJQCU4bKS0ynkuod4tN8s2XLRztCXSIscwjwDECgYEA9CxAe/ZVYGJZsHvV +fsn0Jjwr36R0DHx+JVZAVJXmqPikmrXIR4niDQmy1Fudimrg3wt50Re4Cq0pim3S +Dn1mrAEw3njh+9scM40nJvQ+qgaiDFh5GwDmyl6IFTcBsJpLyMOnJfka5gdAONyl +uzxx9n7BpfZyNMrbR4UVlalOex8CgYEAxpFSecMXoCvX2t/vI2/eYIO3AkSBUrE6 +pZ/4UPtT1rVZGoWbZiMtFFHP0cr45hztMAMY30RHGuNE+NW5KrMTbRlfFJerJAx+ +CuulODD4ffTg3JZES7fzt1BCLKTTwwpNOOfCo1kAjJiyqaxsBeGZGrJY8lMtd2mQ +WTtmh7bwrdkCgYBIt/0kbgKTR/cqJlc5AXBjCryOSG3/Yfw3pm5WQqaFYDe1k7no +BFp8Q40szXQnyxjZlJNdAFFhbJzYi0hp5FL1mw0w1JOI7IKDn+AvK8KV5I/SWW8H +6cbSMkEZAF7Sd8FmM07Oclfedf5ccOoyzxepr6qAgNsWeevAaxQ4lEm5RQKBgE2q +1dmuh3Us8Pc5k+4GebLCkjie1v6jN89ErPnv9DENKdcH32qp454JCgKDI6vOMLAQ +5g+eQzmvH3E9F3ouJTENNXV2hYhKIpre5Pb/oJKTz8g4NmpvfzJ6gAe6SOIHC4Fw +lV8TFvXnXCqluHLsdNhOXiAajLQiZEWiyE3ZLnaxAoGBAMiJfWM/a4GXTq+4KiAx +/VAI2L3M5gMMXEujKIOqTuZOnfMC8CgXCez/K+NMVdipkRz/DbAUCzvjbeY5uSRf +mSSdeB9Z6K7p/4TOC1YLYRQKrOo41YzI7/+IOPdLWMwjZY+/9SonayzIKTksdzfA +JgM3IfJ1wNV8t2GOXeKzRwhC -----END PRIVATE KEY----- diff --git a/src/test/resources/tls/host5.crt b/src/test/resources/tls/host5.crt index dc6b5fbc302ac915ff67ab746293a02bbbe939df..5181b36294405c8386f71e7df5a1c837d3598d3c 100644 GIT binary patch delta 601 zcmV-f0;c`R1=a;4FoFWoFoFTPpaTK{0s<6d&~CqCstt7)32HDBlf9f~R92yp7$zVf z7Y#BpFf}qaF*h(aF*I5j4>B+{GB7nUIWaddHZe4jTsVKdWYwCsV*ErQvBE$ohYqN&O-Sswd!hELu?ut$m&;1b~&oWU6I~ zqvS+%=Nf;U?oC;m8T$xkyE{{{g?>|nxV%B`o`*lFHorb5?8--F;*1n`E)i@6*!7{o zpc~qZwNPZSVHcd7rs;V`HMLb++}S0Kl2gYt&oaEX{m!;wGpHO5WxBXSc)VZNRyONV z1*5)g^&TfkS0NmJvmgiWcq1w1XmS?@=BPWn1IhwWN0XERHGdXakX0d`4;XIonPcl< zOu*L0E|lKEB~sWTsb@HYk;~QSuDuoV@gbK=3|{qUKJ;Osz^LZmj4jc~fJ&X1QSKu= z{}~Z%my|ySx_nc3r0hLp!u3OyG(oO(ck9#Q^RF4D@DryCj5`-BtzXiFr(!Whd&yn! z;h_N`tl1zFPJed8tdOL>hBs%PsHO>%Kx-Fi`*lfZ^w4# z2SwEmR5i|J+r!LK?pWGsVZ%tF43sZn9S)Ih<~Dg#zF;lc51Me_3DyxcKk=VFDyB)Pzz)S8l(co_jgLQer4C zaU0AinUvGa0U_q~A-&=2?C-_3BajrNDokP~vcBra%s alb(N6v*@0@1x)0$|Bt^)P|NTd0s!CU1|I$Z diff --git a/src/test/resources/tls/host5.p12 b/src/test/resources/tls/host5.p12 index 954b239774e7c15ede3bd1acabb72d46285e6ebb..f7cc0f85676546200d76e0aa7fd0560295c05cdb 100644 GIT binary patch delta 2298 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 J6ogubdv0d*9hLw9 diff --git a/src/test/resources/tls/mim-server-keystore.jks b/src/test/resources/tls/mim-server-keystore.jks index 2c36900b3b503bdb53498bcfbd51dea3d88ce7ee..360814ae33367e8cf0e289726ca50c2f381ea766 100644 GIT binary patch delta 1984 zcmV;x2S50q5TOu|AAf-cdwQq<00jXsf&~3A4h9M<1_1;CDgqG!0R;dAf&}R=e*Sb@ z;eWG5s*JQxAS3UK4NwQmhHy`|K9fIH;Yw-1_?+y%3vW|eELA^+z*Cn9^=vjbHIjw< z1{}2P`(|>yj!S-;gOq>-%ekp%BgBp!m-l#-l9v+<+XqFa^nX)L8HI6rZxZ$`D@|N9 z>=d*=07Seb%DuUzvl8$^5fB-h-%y+QWev%)co{4pF?5B)x$|4eWUe}3@oBY@WBS#m zMQE>7ear;kHEVq&zv}{O#|>>^dTpCi3+DLH0fHm!WySa&~ z{TIQ53l?hD%ph|$RN?cfk)+7@7WNnSY;nsE!Z1mm`<&chufvM#!=Kd zg1hoVIJ8y;)HzjA-R5vf3elW!*Q3@*<7Zbs3}^>R7k_jFt7^;@*-$DFt3hb2%s^GQ*WO^sS3k8Y}@o$Kd)G7TW zTD2t5&r+=g+QZlhid3X8mGJ-e3)=imnkoPKxC?Wj;Vet-$}O(Dt!uqb^1w2AZI6g> zp*$eL5P!S?X7dXZjMwOKlPSKdu;HfTof6bhFD&stzHczQVwQkUe?1y(8W%w0sA*1c zhYo6175IocIB^D2x$enPszbu}^MEvO-jSkUr=3HPmh!{YQT#?H-Grs)+;Dn8HhE^` z@dKAT#=ckc6gWEKx>>_VX>D{e_k`NKzv?In(ti_#XFb9B6|JBA$a|uxeS~ zCA%izaYy(|XEeoYX=Br0?iqA>o2?f@rtJ=@Dj&bfR0DV z(^*hdoWEOzheAABS0Knld+wU(4TTX3e1hWh7t-#b@(elxqt6t;NKzMJ?hl;v{XJ6V zj(;g%6LlluhuBcB(E|Mi8Ki4zY5p3$#iDZQm13;!rglN_v#x9m$5?3dQh`UoPmg1fX$-WBHmwmpbPMudHXZ{9KFfeAIIAL) zF7hTYjk*6OmQ&mZi2Xu4+U$e3>_PP;w||G83!?x&xRQqr5J2<-?gFy7prrOA<1$9* z&&e;Ko#Bk*=fwE@$(0)mFW7-Bm|ZB$1Q=%7g-UJsKN_2^rLw}g=}(uT)(CK*kEX4` z-%hPnuPke2&Yy|fnsPunEzls)ZwOLv{7C>b^w7c*ZZWhN@Q;v2P{NB%N)HNSD1QX5 zAA}Eh24BfO@>H1S-F#I+uptwvA@Ay$0X%80pRWz{EU7~QRN8L@s_27}l=-MtlB=(L z(CzzNyPOrD>q=IpZHt=|3CQ`*WExUD*v%`Wbfi|>apnQ0v&;4NLtf6Kr^P1&?8U() z3rfA4uCR|#9@r|7BUQsDo&B*RCV!!zMt<<#+Al6?$hW^Jst(h8`R*p$q+ljAgQj&L(=JajL(}r4j2@D^)?arI(>mh zdmee`J%$6VV`Z)!s{jB100966SS~d%IRF3x)i8nr(J+Dmxu63A0RjR9cykS(lS>6E zAs`nGGBPkVGB+_dFg7qWS{M&9Ff}qTH8D9cH!wCZG+L8d1sjvE1t5R2RU8nC=q7lR zow`W?Wi7At!ySMT*;1pcq@Fu?LH|^jC{q1U%}zy+?T<>L=n??X^W-rtgcA}p3bPW< zJCrG>om~RNnTM)Ehw8xhOGXn^=NihX;`O7Ge?vpNfA9q4f8Ve#u-87cCC|P@E>p>o znFOqWdw0BocQL6p6 zkKqx-GLj(~L|G3qqx7c$4x2NtpHWY9eLgx{yAnd}!={RPs3?D&uL1)B00E;RFdr}- z1_MT)9-FG6!JMx5k ztdoX#%pz?0Z!UjmaMcTB!v80gK_9WlaHRDNmxUOPOl88ot*Z?)+|R<-rx`d5E*D9H zD^ z1iJXk&m9R40|rwF8BM12X97@aQ)&QV4vmu>?;eHdF~!Ii?yrJDQ{3;oDdR_rBH=SS S9`aQgc(WkwJN)sbl^Lepxv5V8 delta 1967 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 RY4ZVFdBP9BKjm>f{U7v&ylDUc diff --git a/src/test/resources/tls/multiple.jks b/src/test/resources/tls/multiple.jks index 62913e585ca138374fa19ef762bfc45e16aaea57..414c251a0ac10aea491600e72964d645deb208c7 100644 GIT binary patch literal 7791 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 R{-{pXn5=B4z9Pr~`ES)(K9~Ri literal 8283 zcma*rRZtuZcLreG-Q8Wn;=TcbyA#|Uf-UZgI|O$N?(Xgy+$}i4-JxGQ?f*}2I=wnG z?~&_g4ggG{1qBHW08?PVAu@$Zhd!c0!b9ePDIj6MNqq>-DiY3Isqv zK|>5E!+;T`J%b>n4Fy?0bg0(#Bcf^`9$0FrBh@3wlwe=vOQ9;2NlP!&gnHmYO%#5> zN1k*i?XU7B3J1(>wPNnFri-T#I9Qgv{>*Ux6{~x-8LtyiMngR*2(?rF^vq0|6EGj1d*atEPq#3yH>dKjzK-uz zZt->D3fJwm`c6=-otZG{lCboP0i5klU|dt0!PxzP_`{Q*fY{e^%ldfGQIx=KcQR*; zW8?DTMzctQ464B$l|S2``=v4z(DtMQGx>s$QieFCt;LvdTXqk;Q^#qyonf)(oxVb{ z&!NMylpr)b@bF}@DLEq>)w`dD`v&E)HxkjMrCpEpd49MJ6w6|;FPK0(V7M_bD}mBr z3B~?#HK0>V-{;5j>aiNBl>ol?O>ncJ(Fx_O-+Yx9*J33?@bcsw#AsLA1J$Ng5K$!e z{A5~>PRW^t6@Zg3@>tIdRi8CM)6XsER

r&OOM3bC{*zl`yhLw){{#ozLe^!bASz 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 VcCQQ};mme{#XGvM#c29x0RX9Cw%-5% literal 868 zcmXqLVoqRUWHxAGmSp49YV&CO&dbQoxS)xdi=~N~4JgcH(D)o#rtv0A<28fE%La`X z*tnq@c(@pu7L*&58fda{!GwTjO0$R<^XdpO^)6<1yehmfG+?#aKYf+uOw0_216Vw6 za|tKriPhSjyDrnO5%m1u3eKE57TfuW>SwhcmB+B(T_F;ieX_*jMND+JwRCTk%-7BF zE5&aG1w59Y!sn>(HZ@oM+KE~F&VMrWFi?g&kW<7^OiqNMgdvro7)a`Z$$W+)hExMZ zgd$Nx5f-74%-mE3LsL^DV*@iYQ$rI26N4ru5x63DwgpX0tUw_~CPoH>CdOX~8AcR; zvVr`$t|Z~YT^|0mldtkcT(u4qJk+Ab0rqD@6XSs+5$osk#OR$%OVzo^>1G!gJzd@; z{Dr)Q^ODT?Um7Bn{tdkc>b5y=Zac6*%(?3mLr0axiGt%?+Fko*cqqL;a70mN))@`= zWB%KJl*cVNZu#;~O6u~zt?z|bU7zy7-ecX*))F6s`g>}|znx<)0x4$bVX6Wh1`$s9(rQz*p?+IiNoX{S$3#kPx`akFh%4{(?(?4PvoQo=47Rt`V? zRLSpw8Z&MGZ-}2XmxF)q&c6)JvN6x6IGt~NHB0{8qE6kEPiaA6$~lAJK~bNjyiO{IyY#DdvpI6Re&%o- znPx1(vwFXJtc_rr@(Grs_wrb)LjR{FUfYv4PnczLZs+du?%pV+DRUal>vo;l=s)Ad zPPQEnn&H?T5o%OvNUL1+KEE6n_*YutTq<@uZaAE)+A`4)TW=3|S~ z8vC{9ODw5=o~viO_pj!hrJU{pY00)>Sxxn#2YzK8U%%DB&Op(ClZ{oIkC{n|m4QWM z)}#yD*KJWZmi*Aik}kI4e*Jw`5f+i_c~+_qof24=-*a4-qL*WT;8Tkt6EkDm0sv3) BTlN3| diff --git a/src/test/resources/tls/server-keystore-ec.p12 b/src/test/resources/tls/server-keystore-ec.p12 index d29fac4af3084f0446d768bfe49c0635e91d336f..d5ea6d583080078e670867fc0e14dd69205d8c52 100644 GIT binary patch literal 1021 zcmXqLV*bg*$ZXKWyorrdtIebBJ1-+U604zb;S+x}Jd z?i3~_bpa+u1p^*74v2Y7oU9B6vTU3QZ61uN%q)yrECPzx0?l1zIQAROlzC=R`Iin-iGFb=P&Nxc!rBv?TSIp^N!S&$u&}nSNju+%q2I@ z-TE>&N5gQ7xbC-wU0;rzzEojy-s-;KTbB=a5|ZO|E*W|lD8n7gDPkxlC&Ey|kjhXD zBz3`LK0^^hs(~Uxk*J{vi%>{rZmNQznW?dvxgm%$wJ>O6N`xz7XIs$36a*CVV`5|g zQtk*DMnZx0g8%c*44rFJq(zIoj~mZxYFRfwotVIq^UDk0w#+Y=K~Z&oV<0*V@RYRmW8 z&&t)CXu`ij!s@o{^1lg_m#KYUICthE%ai}s7o^-dsNKI?JMpBV$PtLG}?An#>8-Obzji(XCLD)E1t z4s+m#fUezJs#vSKJi>0*?plzb+bp{G@5!aEu}|DvJsS2f6`ZI@_OE_9U;WwlZF>uN z-u_;uX&I2xy`(&%ti{f5*Giv_A<|q2cFM}z^UnQpUSz#d^e5}On@gr#&#ALLq-Aq! z_1!&FbDmy5x!&_n(S>Pz7U!=B$FyAQwB=(D?hER;D_5S}ow4HCiMr{rE-MbbVB49i{BMU{UW}wsXmtVt#euZ-g${1 z#XVHLKlVSlf8^*vwl9wjF1(!m^uZegI|D@nPBvC;K4vBjKjsM4EMXBzvs`V delta 821 zcmey%{)DaGpouwwiIEvdNwRTjwRyCC=VfGPT+qbK#nQyg1{7v8Xnc+=(|D7m@tQ&7 zWrM~GY}`-{JY0-S3(5^j4K&%fU_wAMrCCIjO9C#$t=e3nE-?N7waV(to6_VInV1<4 z2e5c#*T}rN=ls~ddg`;Oo=s}~91k0hD3z(3C#ic~+Ld^%?)rvhbF^%;yXFcuA8EbJ z6TUjXq~lemz^}%}ogJ-fFP(STxBd3#zkjTwC-X7d)tj0c85@|HSr{4u=_V!-gp=78 zG%>LPg&3I_84Q{je<5TTQQXT0a&Mat<3D#>5!0N)y(conS#sa+`=bVSZ$lH~fmNyB zGA8|tM@YRc7 z%zLxqhj-i&j(qjEiL3@&UY*&iu`zf;vD^iD);CK+dyMm6IyPHR=(J|eo6&lC**j)o zTZ1CM`uPh}*uJ-l#_yEi{_YTaK&9-95sUls#Rhs34h-Lpe+v37l^WH}U0Qp0>$Ai1 z$%$GLTNbghZj>*T^^vXVFix5J`9IsVX>UVc+oT*%5w@(d%K0mLC9O_LYEev;@|2*; zE3J1!>*tJ?QbrB`A#KO?OVwI;D5b>m5In>!3QgNO64Bq#lAna zOEG4TnWM0y36JH0_DR-3yUgD%+Roav%E#L3w&B)&o=0{|$qUvM%s9Sl)7?wAJ9Bf2 z{(q1-wblB4M%Qfpn;TcTuvp(%WTR5L zeWw3~Id6Tx+D-rPID@Zqwbc0?>eep{*UXLMvt)g&_Cfy8j!8xj78mN>nse{M@@#`Q zvr|uAF|adGG~i@o)#hVnl450G5jprT@NBwDyWm5?vn=-I;jfj{Ud?6^ai7feLhJg> XvXzwrC#=#=e&1yFKah!;v26hWK51EE diff --git a/src/test/resources/tls/server-keystore-root-ca.jks b/src/test/resources/tls/server-keystore-root-ca.jks index 0cc230141067285dceb7fab20a1106dcd50055fc..07c0cd12446e84cb20084e6d519ae030cf6aaa24 100644 GIT binary patch delta 1913 zcmV-<2Zs2G5Q`9yAAf-cdxS6m00jXsf&~3A4h9M<1_1;CDgqG!0R;dAf&}Rt@b0c1 zzL}ZhvxFXtEK_8YcPs+_kG3*PPv8HNAbA{->?%_QdgQ!$;;r=9$IZzrN$O=`1x@>v z`07GRq`OBC^TQm1YyYl-AM8K`!NFkwv9qe;WdnM5&i*9F+#wRow=78`&0%MnFnfhGq;&hQU??#f6kFIR2FhV@z5NF z^2V_adzwa9u7AJk1xG9TpTz;l@OB%>-~@m74joS}QoX$$#BLm8T_e^R*K@umu|m~u zYJLO(gCpY582O|oM5XMeUl<~O8w`iU9@h9mJd!jS37l@$vaO$@1lbvH?Y*e;VwD|2 z$p|MY)f9opwgQQo+M|Nmd~ZAwv|Vtg#iN15Xa{!{n12SV%hKsC^mVvHsc0|H99n4H zPjwMsyS*aK8{v!Jij0Gu zUw83jAb`$>kb-Pbkp)#|-$dQXq1fA4{rr3`UP?gF6^b%ZNOd5wR8}@XxCxQl|9~~6 zf>_qv(0^vISk%K?M^rdE)2t6Er08wf)o`;E`2?}*K-bN})g4~+t+SIxt;t+~_#|YH zJU$)0%-4Ux@gh_}fMP9f#O z!)l?iauM_qZnmJaxS?gNKY+f;jm>ffF$q;(j(?uJXhUbn_G}qUXvPAzJbD;Sb2)I@ z*u9vZ?L){6sCIIN2%MpcE54yc?@AMnTDn>8P;WFY*bAbYp+FL-tHlVo$l~(xdhUAM^E8t;1H8 zMSs35Z|vsy@W?qtDnzfd=m0|V@&9Z{_p6XC7^n7yaNbjmr1dDGLe&y#P%Q@t22$A? zLNDGf*r@^r`~QUuSKN>I7DF;}iU3!XJaxMI_6jTxe`N#X#9nhBJU^7>E}^TOED=7U z9O17MRE+NQZJaWx8*!)igI!%ZdDbjw1Ao6hq8aT+f4hJaE}fp)c>b%YGSs0N#EkPb z1OWno;6hZ>@`ItTgEBayuUtQ5lf>m#4Yjmx&$(fns8@tCZAn|{29#=v!pOdDw18BU z9{7Esq@ZCEi03?wWGVPN0defu3EiIwg7I zGU7@^Ygk`BBW5)V6oDF(vS8diYmHgiTf(4L!54O{z(`uPRoU5gh7Dq5Fvb{l zT?(Uc6gZ<`hjKa$!*$SUhll^A;(ybZ`E)f6KwQl|aO`V@Wb{E+2tMD;vCoP+WYNxm zb_tM!^{`3RNLC!Cn5y=~ruWSaqk2DuJQ~HWig+PT3)@um*+%Ji8M;ABS#&f|pv*46 zDa)12HB~r<2fE!%1oNb581h__isHS!Q2ISJOB2( zj&Kzdu>?Sj444px^$2oQlC_l79m!-fQ{1v)qsZNq2l$n4@TL~RAT6ju|GI?Y zaUSIxS|+|y2ULl5YK&=|P2KLpa}f7Ja);GS>Io&3j)QA8RaJuRJ2XJ<9pKBwB~+*8=c zOpM)Z8tB?M-87w)yt2N$!S#fk^nWnNz~(SC7t*+wq0`Ll94YLJJhq(i^=>+}Q6Pkc zMj6FaCb!J@7_*#hRWErk0d!i>71siC=aa$)Gk%{kXyNU0fsDwe@oDw z4?%BVs2VAUoKC*s@JB?f3iH8h{>#;bmd*dnrIYwv_b*c`)H3hb=R|Cn5xNr_b_2=? zf_&+)if4CDS$dy~R5JP`MFFBvVy#;2R2EW)1x;{<8a$e3zfpPQ(4B8#5Ij)=_&uZz delta 1911 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 delta 2191 zcmV;A2ypkx63P;gU4Ki0G57#yV~YX;2mpYB13(#s#H$3t@{JYU!p^{&b%=sC!XLul zz5DAuh*%Nw*)K>~r54;YafJr@K8nr^JNU0B=Tkii~(v$8l{OOZ~$FJgcq&D&D+JOED(8 zySN9f)UWVm=~H5+#vuIcfzIeLeo!e*&M+w?f95XKWNxh~z<(#)6;9CI1TIk{5bpGWaQ%fep4B)9 z@ay5bK}>RS83$z1ggHB+mb-EEGMQlf&?0RD9IYXAz5qL{H5lThyn* z>un6M!IPJNg&ev;YFRo32F_rdi>npcRY7$|7sDeNWdMu7`DDabuc#8Q%HFjQ3r@lO z>Q+i0lf2}hYR7My6KrkR!hzn`9J^dBZ-Y>1R;=1nNM$`7Jh21^6MY1U$&njg+a1pF zD8o1LqxU9$Nu^1a)=zbn45*9JnyQUr8r$hXC`_Yrg3h}*ePz^CrI&?)m`$IJYVn4jJ3V0b^mt@j_jtu`?zHEOUjA2I_n zN5U9m3e_=;k;*__eit4lZaEDFaP}9!wlrCFpt(H?X_@rbM(Ju}T1_UBWcq?2@RFT* zXN2JPV^4;IEKq^3e>=B}cicZqnzS-Ye>_JVWit{8rBEU@K56Lzq;|cQNztf3OrU>q zDhsW6f#?zKE|S$axQ7$;V_xfryh)T;AEP{Nr|foQ%2^0m(-#%u?9X+gVJIjpmUbr@rm9o_v8n5Me>s0ebiKqvQ}F(M^qNxU zF7H!$&kfu$BXx;CCZIB~1Cxp2POShfokcLb!;ksux-!sdiB09}+AN4c;M( z=qojI$!iKee=zT=q=Dyg*ZPT|A8pK z-lfD$Z0wFcf&q5u5S~KWW3$z_F)=@G4gln+oc`!{53923gp*MnEAGQ)e^pVQd*a|g zt;RvCe{utEw2F3v-hGoI-^2lLR;Yw{F&>HjNY2!22n!fR{;(<{la%8OGPK5FIO_2z zu1>PILvQ1aC)#azoXe+(AcpI{=#ZK}f>=Y+fs{XPtu zLUTl=n^~wMStklbuR@(q_>9MbZGDlu_BdLERHT}+-Y37ODdjsN@I>;5e79ObhhV#Y zxGD6e4@cw3Ki2!Nz1Kkt#f?H_nIZxn9kX0elACwOiH{)?iq`%7^@*?VbK6o zi_h}@@CD@wB4AeRzF*-X&2X!P`FKa&@~hFAY03NynybAuv{E~RbEYo8gnHSuu-TEa zBL3PnUlvYLzm59N|G4m$t3vX-)h!=YqBQ!nc(kC}rU8p=xJZz&xEGVl2slTNJrQEl zQ_$dWd diff --git a/src/test/resources/tls/server-keystore.jks b/src/test/resources/tls/server-keystore.jks index 73ea8a83c1a3789426983fa09486a53ccd0e14aa..06efd57d1f8624f0e64679d0a1486e97d65a8066 100644 GIT binary patch delta 1979 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 diff --git a/src/test/resources/tls/server-keystore.p12 b/src/test/resources/tls/server-keystore.p12 index 246a7f9a6be1ca7d07fe7def9f029ac60fe32682..5eb52320719acff6ccaf6fa6428a2f5b4cf3e45c 100644 GIT binary patch literal 2561 zcma)+X*d*&8ir@a%rM!PX_$<`*oCo=r5f2umVA|vYzfJdHA@lm!B+dZ>3SwEHO#e;kRqK}9c6yLTzws3@d2mj6fC_vUe-fk&eWHX}*Pw->|RL*4Ro@RRXhxw4uH zpd@~I&?BVHSw_vPT7==cA*$QWR=Zd{5TVPwGaru*U^(N!UI40lq_88+@mo@&ur{So zqNS-<2wu9%a{ZB*@LQWj?|xTVr)L@=RqRP%J@WUpDabf3Xls2g>=o~3van7W%BsXD zjZ!k+MEdZuUF&$kW;pw?v$+0ZpHT-Nv{a*;yYWIA@I@$S95wMNdA%qO-}lPcl%wO4 z3SXAZOjOp@r{cGAbPkD#!+ndoVj&6nzO|B9ht5fp>=U2Gfj}=gIZ}f^47F6`?Tan! zb2zr#=OU&*S8mte!u14XY#wl4$;`3^w{mnf5PdVYS|!p16^q3l3Uh+%8bxNUOlvH{ zlVSyqd~P0a7CH^C?QVJEti61?e$;dSng%!?>wt@^UVPprgj<>J)vw?T_R_N}zwgF@ zTN~e%;_NRT4;g~?j5&o)U&kC4un`?h@Ol#$D)&KyW|p4*ltw8R3IhyB!btq4$R?dh z5G7e6_jhd~jYi0V4Df(w^~G2Q*8N^ztzcx*(=!z;+=ci{qM#%%ohgF)5K|ze6;CUp zh!E@W)P1JJtm+yU%#gE-lds5PHCRN?9JkmSyk)RsMz-1no;q46RT4Qzby)gHw$;md z@q-CRsg8(CtjKt2Vzh_SI&y{6mM^;@>kz9cVN$by zXM_%Jpo`N|DOcz=C|UBey28wraJ|&v`yrde*(l=<@_cwon#5A49Ho}m2XQV|CHZ*) zMZyhtuibMemb+zYS9i}Q-AXZ-Mf_!0%+a-=S7ZcSI^@n|lf%BvN4?f1nPrqrY0YYz zRoRA2ukKwCwT&Zi8gg)gU@n0sX;0f zP1g@p9@fWVKHLu7{SB|~)m=^A;PRcd_Zj*KHHO7T<3ZF(Ft$D{76a65%f zSOW!MPaE|JS*1i%Wq)^s&FbE{Q`?RyZ9y9GDgSv1Bg}mM;VXR>?etbo?YZ*Y%0<7xLEa>m4B zcQv)sf=NMcLZl}j-g;qfk|b5>K=z#3i9efM7J$Mv66<52hng219CmNxr%VITiGCOQ zB`kSv!87efTC&})NJhqUT<0I{>H0DKwPx4pgZ{a|T(x9%aU4$^^9)= z zFB2p5HGyH^MCt(n0Vk{dZvy;Zb*(g;IBC3j`DI|oc4R(~z>U9FmHz+KbwT;{D~DD4 zqsX7$53q5kH^K=FW<6OA)?kt&D$t9s993-aNdRZqpY2r)C}K~2V@Urk6SJ3fqo%P< zj8We{Chhg@`$Ldl4r0*3?v)oZ zq8a$C^7FmlmMmA@^_ec)=sohddGw2I>XvAmfTE%4j+$fSy!6|~A2)H1F^572BOTQh zMgh<@iy@{K?SsPG-??06od>kHzHIv??G5H~_@v1SCiqC%^H-ZMcF23&Ax`?|DC^W0 z$Q&#>qv1h}MD^dkMHkOs!OT4tsWMXlpP&9~$WR*!1{e+h@zU z1_3_v2&b93#5@&ins>gVOUR6#hUi_jc=+QCgQw$1we%;o#{n3_s7VggmoWC3Gm8ds z#!}~#{NqUiV}UO{+QvGEeXN>-rrp$5It*B+{qnjGdl!ptsL)h&lWG^A#8BN6)h+#E z{Fgi9#g`-ccubn{e7HY3W~N1Uq|ly{OdjKWT!lf!7mv3o{JgxlN@^L*6veuO=+9P6 zcW>K}=Ay;9mxXy5hBI^u??+v#rlQd0CPBVyuvY8c@Mm$&=9K0XaTf6hV?DFGp7$I4 z81++*&bhwJ3b^<)B0CwKl5ZR6df}tW(^v>|l;xPRc-FldqJdbUKY+O@Y!m%!rupD< z?c?vdTC0AT*;eVNa+H-$_JwHORaySg<0=K;?4S}_LkJBp;RBV-H>n2ogH){+ zr)W@J`rZen)!rcCfcal~3v|cO^sf-_s{;bvk{D7Ws*>KdF(il;e0$Fu!tx@qwN@zh z;rTF0wVDz0aQC@N<+*ee^4nhglO67+z3fwVg>`#*t0Z34hG_)dn_B)@B|Sdzw3ER- zYt*YxboO8MKA#y^SQ6OGfh>2U<;neM#6?O?uDdw)JXQz`gF>X)7(hq}0L&AWO2~Ut tSc!Qv3r(3~k4QB~3eBFVD)IK$?vUPlue-pD)HyYU&VH>0F#w6L{{aq&oml_? delta 2388 zcmV-a39I&j6!#K;FoFql0s#Xsf(a}J2`Yw2hW8Bt2LYgh2^|E22^lbg2^BDc1#t!m zDuzgg_YDCD0ic2fVg!N(UNC|MS}=kIRt5_yhDe6@4FL=a0Ro_c1p6?81otp01_~;M zNQUnXf9q~yn-baxcOfSkZ%wCX0s{bl!%zf*1jxk`-1Z9xxGL?1 zmpa)z8H^LQwWB|s)znMH{ku)F@(HbO?+UiamXjPA0N zl4aWmc7php=5iBVQZVij{-6d3Z4tq-C&5-vO8V%O`W<%gNYyS< z`AP8=_R+oI4r&kNB9gR83h5)@b7m8)^_5J~(AcT(o$=L5WfzP?7{h-NpI>JQCd=_OPpmvN z=)R#rO2gk-g8NJ*j_;8Bkpe_mgml~|R8~HJ!|Xab2G(XMBaP-V@wsTfs;N?zVLSOd zr!Ok1M&5*R*xESo9d3!Ou9OyMvStBnb%FBk0d*3~lh5NI$LVb#dRLlRJ2vD^)Vl+o zj>8JtL^iS)YYHB{~c|sGrn|3Z6kZ;Pe#+x^+fsHrt^8m;TC&mfestM&+Eb;~f!+YyoL_Ci>W$5qJ9Y6nng;;dAUn+P{QDYSX&|t&+4`3~tH*PL z(t6L>!1Mmjt$;=ueq<;S zxMG6!Ek0GX2`t$!!T?S2?Yl}z9hC}WX$P?opPx?3}_U!8*VE_?}Plu#RS~>q0 zmJwh_+?L|IF2zg(l!L#ou!^Qx#^VM9__Ekl@g2(gB^TSeOHh+i3Y?Hv9=AJPJoOR# zQ~uDNTH}w2MV}S|>9G>lP{+^@851r189hXT>$CRyL1Vz8_`F0syV>L83m>8kAdf5V z`1N}}`e+mqk$BoMqPN@ksrh=vd$U7Cgz&|ak_A40H8M9dGc-0aFfcJOFoFY|1_>&L zNQU2&^FC{LzaR%eaK9{0I*TuC- zUjOTVr$2{@PD7e#RBT*m{I|Eq=fDndAywh6L7-bi`&XlNed6NQ#`=a(KE)dSPO;Ds zGlUZuQvNnXyz5zCk!~bbxPRv!^8MzYw=e$btg{g)%H=O_{sj84IFId!blCMiVPdL{ zP$IM%`>zV%z6xOMzc26^nNsMjK$MRP95HWyh}MFjT)-o3_Ht_@rPpLUXOhzS-xpqh zkLQvLpBL?h6eJ^#V-EWQ$DpS!ll^6&aR5cv(<+ECsfa)9P zX;qUmfkASTrs3dpx@s&NN#t;Cf|x@9kpgL`rQhCo?zbdL9U2iw2ip#aS?>yyH;^)e zMojlP#I^huPj<4L*(4==+q`wNb$_gXO~KgQ>eRWzA%6{=y&J44UH;b~C6bc~2pg`C zicOn)O4J95=8^HKJhMV6l@#yscxFSnZ#T?qa~NxnbWq#VkNUf54ox|HxUB2 zP(+do;QsO6Y?<0FRJckEsbWA{+Lyh&6}tdZ!%edFHEVUmZB2{DIX&0&9<}O!&L$5A z8F0q(BUi&oWzwt$J$6m-`41_{Qp2 z&i|C`LW#0ak(_K`_ulr^MqriuT^Nhej5bVMw3(t7#|;+&I}hwC1M7@8BB!C-jtMT> zhLG8nd|`92;m_Xi8r3sPmhYi|PX8%i3Z2Xz4UpSnBdH!O0@UZ&!M~0k*O4U_*x-L2mip>6>KigPMnTP!NzC_%A5=U5OPYf zDt@xfT&u4e8}UUT;3Ak%d;o5QPOG+HE?jAp^W7!g#?(6FSYwR|t9T$VJ}@CL2?hl# z4g&%j1povTG!#B`SrP!E9ONgKFvJn8ncXMQ1QbTb0U$gNB`TNEU?0x?bKk@e)NcX< G0fwOZ6>b>- diff --git a/src/test/resources/tls/server-truststore-other-ca-fallback.jks b/src/test/resources/tls/server-truststore-other-ca-fallback.jks index 41074d440363dd768012b558a95fa03193941cdf..8880d67ac946a151a3d8fbacf48f52c999e22aaa 100644 GIT binary patch literal 1143 zcmV--1c>`Ef&_B{0Ru3C1S|##Duzgg_YDCD0ic2e9Rz{|88Ctb6)=JX5e5k=hDe6@ z4FLxRpn?PfFoFaA0s#Opf&=#k2`Yw2hW8Bt2LUi<1_>&LNQU+thDZTr0|Wso1Q1=?IeRzvV^wG!EB~24A z+DPLk=_)oBkrEYzrO73|#*eggO<6N?}S$VgS1Zh>eJWF4dIE-0=!n9r%!>g?$oZ3*-Hqixrs2V-RkgdOK+n1)r=?}QJE(|ZHp?)6}4YWmwl2L zsO|SFE#Bse(VQJ1RR&_@r;1w7J~>H z*p^g>EmGPwi=J-mq_x+S(Px9uFS{)&QV-hiJ2Fs^Wu1!U(tA5k!pB>?x@NxB)3i+H zc+K-w_JgG@OT h7Yq!R`U@pFh-FaVANJXX9H&2!HJ3Uvtl&N4E)C2dt<~~FY)HS z*z&2#vPpOFHHlEL6n~jD-E)q}Jj`?f)-*B{`x-nD4`c4dZX@56@eW*8j`tT7P2VlO z;919#@d>z?`2a)Oyan;Y4q#aNGw-aIsON@IinYb2+q6ZLs|D9;w!K348V7)}xr>aGnrp-M(olLSSUB`uk zk2flz)>D0>$?UrNs99#&s!W=P$f+T-Ib#HPmE={i0`vd^Duvx(agMeU6;DZj{#TCj zbHfqf0u6PVe(Sk1HVK)jhHMH<{{6`vAP~mFW&h)(#40hYI{+ES>&H@r4W?=x@yRi+ zMs_<8Hkl=09xH~SR?~#7V@BGXgoj&~-8z^_8R1t{Qfg@WQKcU7JfcP5mbn_2OT$NX z=i+|kL*)qt-E5MiGk?H^t@BbPr$|OC+8uWD%mU?4dLh(IZe~r$ahzkLU15IX!jmnq z=t6>dzzpIwlDOoZgvg|S2xnpbJJ35Qx*GkTvSvD!O~{{+_-E)Rxc^LlpIR_JFd;Ar z1_dh)0|FWa00b10$VIKy!UyK-l6ORdBwmBVteGnW6j0#=57YNc%-&iUQHC?CIR*AI JBmx5ghM*Nu2ipJu literal 832 zcmezO_TO6u1_mY|W(3ph6%`eF$@#fJe)1ffo%b17BlJuSEEyP>84Q}3{unedK3Txb z#K^?N$uQw)b?$?DuL1*JHcqWJkGAi;jEvl@3`_(j_*{*9v-CnnFT`JeV$z*r)c$E1G z1FPviExOS;t9G<+zO!rHI++xCsg?80?#;PW>vbwfwy?`u)I@NmX-J5lS0Hn~*6*lo z@1MW3dYmU&c{w(T>0|T(m#mii*UmF+?fTx>qV(KROups0r?%k*|BUU4?mN;aWVI~m z++ygpp3Rn%`&RI$nKx2(UPiinmfM~4_pL@?hyDDV*e&tzRjww+t6PrUg5qejkFNog{hJbs+mvp)R< z^Jjs`ka%%6LsK{5mr-*|Tci%$d-d$!>w|1(cKO})FSw*-(Xf;ycyWD5yY7Z}ahqp# zCt7c{F6h&$-pA>+Zq?U6v-3_ZUMSxDzyEsU^6CjsKiB(jT2WE>@L?6>_wKI>NefDD z&dO+eWWW{j;%DwG_dwnfVY}(+eOr$na{j>B6XITQdD3&Q{}NLff6R}c|2g`Ef&_B{0Ru3C1S|##Duzgg_YDCD0ic2e9Rz{|88Ctb6)=JX5e5k=hDe6@ z4FLxRpn?PfFoFaA0s#Opf&=#k2`Yw2hW8Bt2LUi<1_>&LNQUcj#9ClCSwATSID2r7n1hW8Bu2?YQ! z9R>+thDZTr0|Wso1Q0{4Zh=9VVyY#r;K~2sRR@5A1As%L5F*j(CJDBSROmd*Z9#>9 zap=DdxAv>3Q(y~JN(h{Kug1LFl$Hqt?5GqFq)`!=^v8gtg2H-TZOi54!S}kUzJ&U| z2Qq}Ov|c4L_R0m*^R-eczFYXXMPOk7>cBQ&TRWuo>mUr&zQL|)O5rRJ;!+|SN$yeo zJ$fboZ?kt6A9Xpn_2QvBJ>Xnt9FlkGc;C3h{hg4h^4udJ!YLd5>^5UUgK1jL5IFOn z8m5W&Zo>L%B-J81!a|ZeDLIns({l-4SO_AA#V=%8x~j(}=5lg0I1ZnzzPN zhHkLe(>QfSzTRFMJy5N#GY#v8DO56&AR{Di$4f{DY$(ca@xWs>9P;6f8$D%b$$5&b`zp8$C|v>8NR2jqd)F9Mv9 zXm_M>E?qQksLt*B+kSpj%cxRug*ONoaUwJ!*r&I7!JX#Q?q85uz4PHth2+Ihi*4%c zF)@ignHM=flUJNVNRimMZ;eI#5yME`y|z=lO#ukjZ7nXrWy@+e3IRd&a zL$XI**PJ>uzX=?bw++1|bDf92D;N+_D%RDni4BX`^E54;ztsSj|L@SW)#c%K;P>ii z!G{$_kIC_t*Iliu*>yZ~tNi>8$4)NO#9ZAqNpAig#*s>$7rlY6&HW;w%5Dg612Ll) zV%rd7iksC`@o8Xi9rZd-8rDpQq^xOhOg-n9B};=JTTZBSQC>=>lD2t_xNRuE?Rvh^2g)-fM-c;e50SXz+a%4dGgn9mAS9B~zd~uVXx`wEgzZEgnP7scK3%sb;ZCTFB_k-ToX=293;}ASoLX%jZQpqr8M#>*41^2?4EWfXLs^)4*n{%(OB9?P4dldm z4J`~zjm!)Ujm=CAqQG1;BU30BtDYuCC1j%+Ss9p{82K51PT*o{Vq|34JbCla*NYup z%|De$o#oS=xV+CHg~l1@Bb|FZ~8npFx)0QStwbFGn7= zG(A+z{{P~K$Nk!`N?hNHO7y-MnN(zFH)foutA`KEHJcX`B=nQL~{Sgi=J}*WPj9K_s$Hh9bKaA#S0DOLDI@B5(Z)o z*cI@D6bLgi{%2t|UHRHnBfuny3}hzwNel*Mc3tEh@r1 z1y`-!W5c_I=dNR!8I!H-VTIKn&o%1$bn3g*W-32(ntsFk$J&#pm6@vezkg%Ab>!5- z<&%Ybk4YJ=K8q_XEpcl`~Sd9Kl$?oV2ycX5JBHUs0_%eqrP9NKt8AklDFP^#1I IuH>he0IYdbMgRZ+ diff --git a/src/test/resources/tls/server-truststore-root-ca-host2.jks b/src/test/resources/tls/server-truststore-root-ca-host2.jks index 4866853636cac7fc2dbd8a71b18eb394a685f286..6c7ffaa652350506e6f9f0a68a08950a344dec53 100644 GIT binary patch literal 2039 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 U3h#F$etmviwomO=w%)gQ0NW9lXaE2J diff --git a/src/test/resources/tls/server-truststore-root-ca-host3.jks b/src/test/resources/tls/server-truststore-root-ca-host3.jks index 353c6be4d2a7b4603f24de5a4a44a78ef8e242e8..7b861e122b812b03c9a900afe148dd2d794eac0d 100644 GIT binary patch literal 2039 zcmVg0Ru3C2doAODuzgg_YDCD0ic2hodkjhnJ|I}l`w(_kp>AWhDe6@ z4FLxRpn?a2FoFku0s#Opf(Lg72`Yw2hW8Bt2LUi<1_>&LNQU+thDZTr0|Wso1Q4*tqPN2}Pt>6r1Kq0%?o)t*2LPE#xu=arM-P32r%LkKSN--p zcH)+TLkNW7&!m1u2B+bSgG!@pj- zhak?%&FMKiDrvT{IIQ0pD|Drg78{CTVO`O4wNei8;C1q(`z-}S&hmRg=qDVLJBq_< zUlAsK5D6_`YUF(op}+_ds@b0{2VmUDtN3Hf-5Vy1GrcGn)F=Er^9R|+1gAZUK#m&9 zn}R*7feRShb$tAhNnFNuu?XefSc6q^n82|5D|hWjiv}y|el;HbG=QCx9j+*cWGPtsWH3q|j}cO>fDu^f0&TY#F8=TJUh?**wAs!ZRkFLb{es zJByc41;`!W$gU{L3Brq5ZIRc)P+zlavPNv8{4>8nDwd{$QfG?Mx$b{U$6a>(n1S&$ z-HiXouwkpty~>1M`@Z=av(zd`1JSBO70#@|@)BQzyrJNarb*T8=m(zY-mXv_-9iL{ zwoInhSbd<^wB0|iF&6tB2qVlp--~=*iHNvUhnCh!A>B-$Z)f{Lm0wZURNJ37Dam8a za7Zj?5h?0zmQRgDU?sP+w#o8e4BJlH6uR*T)bm64s4W8w@HJ@@ zIW?xu;{Z`OIpDI7sxwusb;aA!)*#R@d0;gb=%WFE3s;?1BcG0?eTP@%U`G{j9FltC zH9MkqBZvQFwBM02?V(q|KlY^kQULr;0G4t!?QiO}wPqar>CO0L2mv_Uz5oHDsK$0@ zKXUx)t{rdKpSDmPcXuQ{y%=+$7S&aMD`os_Wa~A6rgpA@gNOTE*=EIa?xV5oQwG-A!2En{>==<{`?iGt z(jFTAA_yzpx=v>>j|Z_^C9$i)?BP#4<=n~*zn!6@P&BIO80xpVKE^^Wo8_jKEC5{J zn^aWuj5Ej>(gx=FM@*)&fvcj&ZXsAD$}QMI0I@KrL!!03Ys12VSG-*>LS8XMR~=&B zC}m#WV$iR|&fR15M7I&&1@tHzw(QL8@ zSTAa*!HrNQ=Fnku^H%KvNW0Z&iJrEus93fKf%1X6&S1C^N?nLR7nWsbW;QTLT>#ha zorTmjp>VbEx#O|>>r&sp=usn?Zpi(O$}7+A-0&-75BWrtc+Otwv7YV6#@K`NRU)Wo zhWV@LHlk!LakBDoEr!7%N4?JU)-wt+j^$qmGWvHSU}%886Fu21oXe|L`K$oCCA7Jc zR367->5Gd$h};;pe&|;1h+&KM@TdN6BHW;#$u1?GB!gQUq{7R1D;F3_G@O_f{MG5eqV8lPvKT8A0a zp-8F3g36({Ba>Cgh5$N*C*0{V+KiawPq`RnEawsg5$sIL-WSW(A|m0`H9L?wX_WHG zi9~K~=h+z(r6FKtwn0H0oInqYRFV3flv|Ge82f^I+j}Yn5r(-IFqmU?$dq~J0Q4nR zuRg}i8O)X+utC7PUCpwbYBmB?OmX1952v}|2B(u=`R`l#z*L+R>?+I&NYw)H*|P@I zw>&8Fu4yW%XKgX$Qr|6O_k||aK)>JsoNaq&Z3;kncZn3(I}Ib+OSw#y1wE&wNQ)zU zK~=^UcLKYy`TcdWSj@+jKn@(?$SFxqO^`hLEon^@W`Iw>WHbet+nuwof@%$^3tT4_ z;BGHV*Uw2>CnO^)Xhy7UMrLV;oB}k2&m_zWEYb1itE$!U#|p}LKwGf zQ2<5g9vEie$ni!Yz$!MMQ`9dyBTaO10e65hZiloU8-Gbxtp6={XP{KSvVKp&6jTnP3O zQ7#Gn=d3KQ>eYwwD%0l}JEclCqR5kR$dG@`de4g86j1N@Q-oYQHTD{QE*nqR!xJ~l ze_BG`OPw%2Fd;Ar1_dh)0|FWa00b0|LNLTJ^LUAGwV6~<%;r!Fi6-m>6lrA}XqatU V4R1>a9}zsK_xjSF(*gqlhM>sE%~k*a literal 1634 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 literal 1010 zcmVx= zN{I=DpYP{W(RtMy0MlKk0s{cUP=JC1IC{`w>Ui}VC>1kM+1IAS@H9w6lbkq@uZi70 z3I^|`)}#&buWwYcgfdKW=|~&9j_7JIqGZajp#zVGC*P}O@cXr0GZJVF8>8ZgXfe*r zK|8UM`=rIpHQOMxsZYACWXsV6>$*?jysijQ%goK*fCMiDc0rnYUB*7gB;MGqER+T? zUAE+k6x$8L?U29xeAunImeL!SuZkoPkhKxYO@Wsn0M)@NBN=PM#L@o{WPC&naePnf zfr#j#^SOJQ(KA)?I@M@RIOctg55M7(ycCBdx;m)D^xi)6pGy|ui7Dcij!MwAjMgW? z9$0xFviPs0JZjMi?N*?#DJ2^UO5vmZ$G`M#JwZb7 zlB~G>MNk>k6qe&&LG1Kb%VAWL&iGAHpXpCq<`vE)ZFcUhP6E_Ap-tn{i6k*_sM$>+ zIxZt4ML)h|DG+9b-@UwyZG8)Cd%{C;x2PLr@t+u-`W3oU-p+^9iN=wEgH2Gr8}7oG z5PvEDnJNs*ZvlEBidZ<;uNjH)j4yp1D>XkF8*H;X#iWcAlF4@3N)9!tkn%{St;{V_ zNG|BCwfi}7w~f|W$j;lDFRA1t1XXG05S}$bc?uF*;!r;G|Nb3kdv= zQh2LyV4E-pc@reMnHiGtxM8A)>UH4vHPX}*M&js${`SIloUE+YE=Z{+&$;@ZkGUmd z{A~Dd65@DMfZOyH8x4_L{nr>|@4$b65iNdMabNwT%@pUZ(`61!dc?1s;7_P?${`pw zXa%nV{`r)yJx)4{&=e1!b*umbJ|2UC>17{XHmu$S<*|Y8QXfV{~WH|;{c&a<*FBlm1Pi{gT<%@1% zaO=B%bWY!nb^nPy0!a!yebf$v2I0g!!0>173aoRcb^$y{{DnT<@?*+*=As}DS12(e zHi4EZq9lsZD=RNDX^u{(m@qytAutIB1uG5%0vZJX1QgKP*k^v$B(u2*ta1#1N%Qw0 g&Qk;wzYnHymikJ{-Y1C>BjQmvxji9z0s{etpyWT--v9sr diff --git a/src/test/resources/tls/sni-keystore.jks b/src/test/resources/tls/sni-keystore.jks index 9b45763301da30d530af1cacc59b5479888db681..621de8c244b675c73820ae6ddeb5140579aae75a 100644 GIT binary patch literal 12346 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 Mvp39p2?E3a1Fum8AOHXW literal 12319 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 diff --git a/src/test/resources/tls/sni-keystore.p12 b/src/test/resources/tls/sni-keystore.p12 index 63890a666e11620c53f7e7b099ce4b1d43cb1655..f6857e0808f70b87659e0cff1d82a3e162d4d5f9 100644 GIT binary patch literal 13996 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 literal 13497 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 literal 774 zcmezO_TO6u1_mY|W(3n*C8@e;Tue=jj0|n5y|1Szytu987?sX9 zCBm~$)Up0#neQ@|$>}N6ZnW1|G-v&{kGx&2q7`$zfzS9|*z8$XpKspxE9vP9m9^mu z-uv~sT`51st!i?c<(6r)+mTb#y)Dj{h(!I%K5@ZYt!0na&!g?d7bY7rro2mC@~Y&X z+|8G^+p0vqKM`5?JjI7a{I<$r(G4<&FBt6`=Tx=+`hVH%a@;*DpN$JWkL@k|JT*Tr zqd$?w?ag-u*~<2C~4AmgQp+V-eXRY|^qK?^>R}`P!c|)GHjeYyR7e9EiZU0R|#4k`K54eI*wd z$Lz1SJ6f+yN(GjMzItOxncuw)Uo5{ZD_k{gYq~<>zoHP+sBiP+ z)+~`@)OKIz=ae$tYJJm^#J1@|xi786)4%-m?R38tG;^-F+W~v;DP&LNQU+thDZTr0|Wso1Q67dUKc43&cvWv9)tTDTXTSd13=KdwYS?0o65UGu)Hvzbdu#s z;69b!2`MkL{Tt0!C;I41?HS=0Yi)vJP^x*@kKs<64?py)L{>REDkgMix_wHn!x@RN z)Qn*Y=tB9w#am?OtRaQ+K3$g;f>tu2=8mca`^4%(^D;J$d#7Mm+DxPFiba(k8yq^* zem%<350sb;xt4NA~yPi&~fFzBxV;ob1QuzMGFg;C;f^p9sT@F*w^>9n z;1D>9pZbMY5QMX6i{jn+3l9Kz&U_cLaNzEyxoYGsEU@zyvL&ndf!-*GaSR7-w)5Na z@)Qg7?6+d;G$l={s3c$2DP*~iw-B|*uh2-)AR(Y*}9nHO6Jw+o|-X9 zt-5k35#C14oSrxj3D(i26v%rnBtYS*KzO@g$1>m7Ar}`z} zvi*Um8E{Ki#1fr*o>AvF0URRcCWua^SrHGXROp=fG&v?K=mwo!!QM>*^;$aEHv*_> znnMf4ELIJO1Wt*;s;KCi5;5`O?E6p~d&c@A!Jy#Ztss92ZvBfcJvAJMe?cTx9u(vj zPf9P-h|~t`$nkjk)YJ_h-vn6(O>{e^2xCq(90_mOVP+98=c5IJs$g}Xb&9kJHs(+kW?@dSF?z}Qxdw9LyoMGA zrbcFlhQ?;5#!=$DMutGHDU^#tR}-TWvhj?p49rc8{0u-Ba4|J8GBV7O|7R;K>;1&9 z{(S!g(~u9BGYm~#wqM+~p^GQAvNL_I=CkkXkC#lIt#!)%g#MC)ZbJ6^AKWiod&e

v^q+1$EIR)|T{bw)qKUxCa9^_?dy`#!vBb+0$q z>!^72XRGn*e~S*Zl$Af~$^ExsL&3347khpQ>}s;z@oL|Ulfu#`qh_sMt@5|(+>}$> zJ73)uFN|}Y)LK0?$u(HRR(_r1v-DLPE58aeKeAl8;8V)YzQ6mYUshb|_Wh!$<4SY! zBy}ccMh3>kiU#rqvcM3RRA;_Fh#eJheP=cZ`C?1P7lhw-j0C$A&Sb-15)A zf8(oJ%4=@Myc=I58C9L{oV0E;i#HXSC1rmquxr-kHOwmck5oR_C5xVDTNWK{{Uh5X zuE)2nrTky+x}C~r>+%O7`cD{~w$?Df6`HmwM+%F3DfM jTV)=2Z9f0se2-$;pFdviZ@&LNQU+thDZTr0|Wso1Q4{<1)Q@A@NwXl6LHpY>I;B^15iFc`OQDbp> zOnC_9u*HQnrKi}!7DOUWE}}M$ZzHtzqpF7*?XK7OcQ#v!ybM^MXJCqDhp}a!jYdT= zeSBO7d8bPXn=`oKFIp|yYrGVi&jP2mxYC<6C@ld8F(H>O-S`q9N8-BBXn* z!mn6yB)7x-@bK=xmf~5Coh~DTxBz{!-VDcakH`1%I9AdLJPddTEhxz5$Za@a>bVWy zV7u%JzBFQNE$Gk}MIDy|duhZ!8^VCE4Lmwz28$#{;f^v-7lL1*ccvw6p5}tv>Hw^e z`tS%LL9GhS35M5`aR^Dq7S#4|jge7~nCwr}=U?J*(gE=;7P4P`E@q5)2*)fYZN_a%!UNjvA>! zo(2fs^RwQooNyRiQe?gFIR@HnGnly()uS|q=K*cUwOS!N) zg|#}rV?6*pLZz{ucf)yx3UXSsr1S8&cJVena;pV9SVIOTpuPd_)2cNF7p=6v0z4dx zJ~Owd7>J-(=|+;aN^gM8BYYmq+*=_XbkE0H=MC$ogtR2R2k*}&5x8^y+-buI`WG+8 z!6+ZjZInS>?0ftyEyja=Ifbo%tV@d5HCiZQ{<<%bey~ge;h^yGKK+6axPye26R3Z^pU2VrY}GN7|{lh)YZ!0B~*9zFHO zH6cx4S*?g~^HS6FH6Q}KzFY;)5em~i`d9|uj4UKRt2=X%>uGCtw2I(k{Dg7> zJ;RBEJkom1$%cDX(bXxig#+>toedF+kq*68uj(*9 zFd;Ar1_dh)0|FWa00b1|Tv;@G%Yl{71{6hFcf_p}Oazt$6vZuo*350c5U*nuG)$pH N4XMnX2m%8EhM+}c=@b9} literal 786 zcmezO_TO6u1_mY|W(3n*C8@%*6BZZf(@;(bmkV-Xf%aH@TdDn_3lX^UR~~0{Jrq zxm_Jk*k)g;JX5qyph%I=FuF1;=I;yEyob9NuuFyd?pa$j;d==C%;}SM3R`@txEYq) zdvd=}(@Ddp%k7p0+^klTF^XG!xbF7PmFC&2et(qvAS%EQ4I>EEM4s`pP>p0AF?obtRUGwKDmo1C_N$0l?6!r#`eMYGS_?f;x})+=Yv70vstkEVX@^<5b9HpubHW0fG$ z8QMXW@AnFCRzAMmjO}~f%(x9MmWvn?T@!jE)=u>l@&5nSW&5ohZ{x!z%Xk>RKa5N< zv|Ss_+hcdMKR%Xuox|KUm%U<)GB%kc+j9emF$jXxiKTyltX)`;68S z@qP_MJ8jwL+y6=EXqioaWyt^4MJ{~Px3rTRpG{U_x*MR;qRhbbw5Cw=cNl|OfI!9*}x%x;`{8)_up0R>Ye*&&c!8v7<2w#sVexm`P?_tRc9~y|KfSS k^<2rT(sqOWUr^TJv_Rp4!jblQdrg0FJ;vvj6}9 diff --git a/src/test/resources/tls/sni-truststore-host4.jks b/src/test/resources/tls/sni-truststore-host4.jks index 6e7ece7503d4ebbec824e06d503929d75d7b2b1a..e6ee237972a511e6945be071b318fd087d770fdd 100644 GIT binary patch literal 1143 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 ## Self signed JKS (Java KeyStore) -1) Create RSA and ECC private keys + certificates for the server in a new key store: +# 1) Create RSA and ECC private keys + certificates for the server in a new key store: -keytool -genkey -alias test-store -keyalg RSA -keystore server-keystore.jks -keysize 2048 -validity 1095 -dname CN=localhost -keypass wibble -storepass wibble -keytool -genkey -alias test-store -keyalg EC -keystore server-keystore-ec.jks -validity 1095 -dname CN=localhost -keypass wibble -storepass wibble +rm -f server-keystore.jks server-keystore-ec.jks +keytool -genkey -alias test-store -keyalg RSA -keystore server-keystore.jks -storetype JKS -keysize 2048 -validity 10950 -dname CN=localhost -keypass wibble -storepass wibble +keytool -genkey -alias test-store -keyalg EC -keystore server-keystore-ec.jks -storetype JKS -validity 10950 -dname CN=localhost -keypass wibble -storepass wibble -2) Export the cert from the store +# 2) Export the cert from the store keytool -export -alias test-store -file localhost.crt -keystore server-keystore.jks -keypass wibble -storepass wibble -3) Import the cert into a new trust-store for the client +# 3) Import the cert into a new trust-store for the client +rm -f client-truststore.jks keytool -import -noprompt -trustcacerts -alias test-store -file localhost.crt -keystore client-truststore.jks -keypass wibble -storepass wibble -4) Create a private key + man-in-middle certificate for the server in a new key store: +# 4) Create a private key + man-in-middle certificate for the server in a new key store: -keytool -genkey -alias test-store -keyalg RSA -keystore mim-server-keystore.jks -keysize 2048 -validity 1095 -dname CN=mim-localhost -keypass wibble -storepass wibble +rm -f mim-server-keystore.jks +keytool -genkey -alias test-store -keyalg RSA -keystore mim-server-keystore.jks -storetype JKS -keysize 2048 -validity 10950 -dname CN=mim-localhost -keypass wibble -storepass wibble ## Self signed PKCS12 -1) Transform JKS to PKCS12 +# 1) Transform JKS to PKCS12 +rm -f server-keystore.p12 server-keystore-ec.p12 keytool -importkeystore -srckeystore server-keystore.jks -srcstorepass wibble -destkeystore server-keystore.p12 -deststoretype PKCS12 -deststorepass wibble keytool -importkeystore -srckeystore server-keystore-ec.jks -srcstorepass wibble -destkeystore server-keystore-ec.p12 -deststoretype PKCS12 -deststorepass wibble -2) Transform JKS to PKCS12 +# 2) Transform JKS to PKCS12 +rm -f client-truststore.p12 keytool -importkeystore -srckeystore client-truststore.jks -srcstorepass wibble -destkeystore client-truststore.p12 -deststoretype PKCS12 -deststorepass wibble ## Self signed PEM -1) Extract the private key from the PCS12 store and convert it to PKCS8 format +# 1) Extract the private key from the PCS12 store and convert it to PKCS8 format openssl pkcs12 -in server-keystore.p12 -nodes -passin pass:wibble | openssl pkcs8 -topk8 -inform PEM -outform PEM -out server-key.pem -nocrypt openssl pkcs12 -in server-keystore-ec.p12 -nodes -passin pass:wibble | openssl pkcs8 -topk8 -inform PEM -outform PEM -out server-key-ec.pem -nocrypt -2) Convert PKCS#8 format to PKCS#1 format +# 2) Convert PKCS#8 format to PKCS#1 format openssl rsa -inform PEM -outform PEM -in server-key.pem -out server-key-pkcs1.pem openssl ec -inform PEM -outform PEM -in server-key-ec.pem -out server-key-ec-pkcs1.pem -3) Extract the X.509 certificate from the PCS12 store +# 3) Extract the X.509 certificate from the PCS12 store openssl pkcs12 -in server-keystore.p12 -nokeys -passin pass:wibble -out server-cert.pem openssl pkcs12 -in server-keystore-ec.p12 -nokeys -passin pass:wibble -out server-cert-ec.pem @@ -57,24 +62,25 @@ openssl pkcs12 -in server-keystore-ec.p12 -nokeys -passin pass:wibble -out serve # Signed by root CA server->client -(cert contains alt subject name "localhost" as required by Java for hostname verification) +# (cert contains alt subject name "localhost" as required by Java for hostname verification) ## PEM signed by root CA -1) Generate a Certificate Signing Request for the server cert +# 1) Generate a Certificate Signing Request for the server cert keytool -certreq -alias test-store -file server-csr.pem -keystore server-keystore.jks -keypass wibble -storepass wibble -2) Create a root CA database +# 2) Create a root CA database +rm -rf root-ca mkdir root-ca -openssl req -x509 -newkey rsa:2048 -subj "/CN=Root CA" -keyout root-ca/ca-key.pem -passout pass:wibble -out root-ca/ca-cert.pem +openssl req -x509 -newkey rsa:2048 -subj "/CN=Root CA" -days 10950 -keyout root-ca/ca-key.pem -passout pass:wibble -out root-ca/ca-cert.pem touch root-ca/index.txt echo 01 > root-ca/serial echo 1000 > root-ca/crlnumber echo "unique_subject = no" > root-ca/index.txt.attr -3) Sign the server cert with the root CA and convert it to the X.509 format +# 3) Sign the server cert with the root CA and convert it to the X.509 format openssl ca -config openssl.cnf -batch -name CA_root -keyfile root-ca/ca-key.pem -passin pass:wibble -cert root-ca/ca-cert.pem -in server-csr.pem -extensions req_ext -extfile openssl.cnf | openssl x509 -out server-cert-root-ca.pem -outform PEM @@ -82,29 +88,32 @@ openssl ca -config openssl.cnf -batch -name CA_root -keyfile root-ca/ca-key.pem # PKCS#12 key store signed by root CA -1) Import the signed certificate and the private key into a new PKCS#12 key-store for the server +# 1) Import the signed certificate and the private key into a new PKCS#12 key-store for the server openssl pkcs12 -export -name test-store -in server-cert-root-ca.pem -inkey server-key.pem -out server-keystore-root-ca.p12 -password pass:wibble # JKS key store signed by root CA -1) Convert the PKCS#12 key-store to the JKS format +# 1) Convert the PKCS#12 key-store to the JKS format -keytool -importkeystore -destkeystore server-keystore-root-ca.jks -srckeystore server-keystore-root-ca.p12 -srcstorepass wibble -srcstoretype pkcs12 -alias test-store -keypass wibble -storepass wibble +rm -f server-keystore-root-ca.jks +keytool -importkeystore -destkeystore server-keystore-root-ca.jks -deststoretype JKS -srckeystore server-keystore-root-ca.p12 -srcstorepass wibble -srcstoretype pkcs12 -alias test-store -keypass wibble -storepass wibble # JKS trust store containing the root CA -1) Create a JKS trust-store containing the root CA +# 1) Create a JKS trust-store containing the root CA -keytool -import -noprompt -trustcacerts -alias test-store -file root-ca/ca-cert.pem -keystore client-truststore-root-ca.jks -keypass wibble -storepass wibble +rm -f client-truststore-root-ca.jks +keytool -import -noprompt -trustcacerts -alias test-store -file root-ca/ca-cert.pem -keystore client-truststore-root-ca.jks -storetype JKS -keypass wibble -storepass wibble # PKCS#12 trust store containing the root CA -1) Convert the JKS trust-store contain the root CA certificate to the PKCS#12 format +# 1) Convert the JKS trust-store contain the root CA certificate to the PKCS#12 format +rm -f client-truststore-root-ca.p12 keytool -importkeystore -srckeystore client-truststore-root-ca.jks -srcstorepass wibble -destkeystore client-truststore-root-ca.p12 -deststoretype PKCS12 -keypass wibble -storepass wibble @@ -112,28 +121,29 @@ keytool -importkeystore -srckeystore client-truststore-root-ca.jks -srcstorepass ## PEM signed by intermediate CA -1) Create an intermediate CA database +# 1) Create an intermediate CA database +rm -rf int-ca mkdir int-ca -openssl req -x509 -newkey rsa:2048 -subj "/CN=Intermediate CA" -keyout int-ca/ca-key.pem -passout pass:wibble -out int-ca/ca-cert.pem +openssl req -x509 -newkey rsa:2048 -subj "/CN=Intermediate CA" -days 10950 -keyout int-ca/ca-key.pem -passout pass:wibble -out int-ca/ca-cert.pem touch int-ca/index.txt echo 01 > int-ca/serial echo 1000 > int-ca/crlnumber echo "unique_subject = no" > int-ca/index.txt.attr -2) Generate a Certificate Signing Request for the intermediate CA cert +# 2) Generate a Certificate Signing Request for the intermediate CA cert openssl req -new -sha256 -subj "/CN=Intermediate CA" -key int-ca/ca-key.pem -passin pass:wibble -out int-ca/ca-csr.pem -3) Sign the int CA cert with the root CA and convert it to the X.509 format +# 3) Sign the int CA cert with the root CA and convert it to the X.509 format openssl ca -config openssl.cnf -batch -name CA_root -extensions cacert_ext -keyfile root-ca/ca-key.pem -passin pass:wibble -cert root-ca/ca-cert.pem -in int-ca/ca-csr.pem | openssl x509 -out int-ca/ca-cert-root-ca.pem -outform PEM -3) Sign the server cert with the intermediate CA and convert it to the X.509 format +# 3) Sign the server cert with the intermediate CA and convert it to the X.509 format openssl ca -config openssl.cnf -batch -name CA_int -keyfile int-ca/ca-key.pem -passin pass:wibble -cert int-ca/ca-cert.pem -in server-csr.pem | openssl x509 -out server-cert-int-ca.pem -outform PEM -4) Create the server cert chain with the intermediate CA +# 4) Create the server cert chain with the intermediate CA cat server-cert-int-ca.pem int-ca/ca-cert-root-ca.pem >server-cert-ca-chain.pem @@ -143,57 +153,62 @@ cat server-cert-int-ca.pem int-ca/ca-cert-root-ca.pem >server-cert-ca-chain.pem ## Self signed client-server JKS (Java KeyStore) -1) Create a private key + certificate for the client in a new key store: +# 1) Create a private key + certificate for the client in a new key store: -keytool -genkey -alias test-store -keyalg RSA -keystore client-keystore.jks -keysize 2048 -validity 1095 -dname CN=client -keypass wibble -storepass wibble +rm -f client-keystore.jks +keytool -genkey -alias test-store -keyalg RSA -keystore client-keystore.jks -storetype JKS -keysize 2048 -validity 10950 -dname CN=client -keypass wibble -storepass wibble -2) Export the cert from the store +# 2) Export the cert from the store keytool -export -alias test-store -file client-self-signed.crt -keystore client-keystore.jks -keypass wibble -storepass wibble -3) Import the cert into a new trust-store for the server +# 3) Import the cert into a new trust-store for the server -keytool -import -noprompt -trustcacerts -alias test-store -file client-self-signed.crt -keystore server-truststore.jks -keypass wibble -storepass wibble +rm server-truststore.jks +keytool -import -noprompt -trustcacerts -alias test-store -file client-self-signed.crt -keystore server-truststore.jks -storetype JKS -keypass wibble -storepass wibble ## Self signed client-server PKCS12 -1) Transform JKS to PKCS12 +# 1) Transform JKS to PKCS12 +rm -f client-keystore.p12 keytool -importkeystore -srckeystore client-keystore.jks -srcstorepass wibble -destkeystore client-keystore.p12 -deststoretype PKCS12 -keypass wibble -storepass wibble -2) Transform JKS to PKCS12 +# 2) Transform JKS to PKCS12 +rm -f server-truststore.p12 keytool -importkeystore -srckeystore server-truststore.jks -srcstorepass wibble -destkeystore server-truststore.p12 -deststoretype PKCS12 -keypass wibble -storepass wibble ## Self signed client-server PEM -1) Extract the private key from the PCS12 store and convert it to PKCS8 format +# 1) Extract the private key from the PCS12 store and convert it to PKCS8 format openssl pkcs12 -in client-keystore.p12 -passin pass:wibble -nodes | openssl pkcs8 -topk8 -inform PEM -outform PEM -out client-key.pem -nocrypt -2) Extract the X.509 certificate from the PCS12 store +# 2) Extract the X.509 certificate from the PCS12 store openssl pkcs12 -in client-keystore.p12 -passin pass:wibble -nokeys -out client-cert.pem # Signed by other CA server->client -(cert contains alt subject name "localhost" as required by Java for hostname verification) +# (cert contains alt subject name "localhost" as required by Java for hostname verification) ## PEM signed by other CA -1) Create a other CA database +# 1) Create a other CA database +rm -rf other-ca mkdir other-ca -openssl req -x509 -newkey rsa:2048 -subj "/CN=Other CA" -keyout other-ca/ca-key.pem -passout pass:wibble -out other-ca/ca-cert.pem +openssl req -x509 -newkey rsa:2048 -subj "/CN=Other CA" -days 10950 -keyout other-ca/ca-key.pem -passout pass:wibble -out other-ca/ca-cert.pem touch other-ca/index.txt echo 01 > other-ca/serial echo 1000 > other-ca/crlnumber echo "unique_subject = no" > other-ca/index.txt.attr -3) Sign the server cert with the other CA and convert it to the X.509 format +# 3) Sign the server cert with the other CA and convert it to the X.509 format openssl ca -config openssl.cnf -batch -name CA_other -keyfile other-ca/ca-key.pem -passin pass:wibble -cert other-ca/ca-cert.pem -in server-csr.pem -extensions req_ext -extfile openssl.cnf | openssl x509 -out server-cert-other-ca.pem -outform PEM @@ -201,16 +216,17 @@ openssl ca -config openssl.cnf -batch -name CA_other -keyfile other-ca/ca-key.pe # PEM signed by root CA client-server (to verify CA signed client cases) -1) Generate a Certificate Signing Request for the client cert +# 1) Generate a Certificate Signing Request for the client cert keytool -certreq -alias test-store -file client-csr.pem -keystore client-keystore.jks -keypass wibble -storepass wibble -2) Sign the client cert with the root CA and convert it to the X.509 format +# 2) Sign the client cert with the root CA and convert it to the X.509 format openssl ca -config openssl.cnf -batch -name CA_root -keyfile root-ca/ca-key.pem -passin pass:wibble -cert root-ca/ca-cert.pem -in client-csr.pem | openssl x509 -out client-cert-root-ca.pem -outform PEM -3) Create certificate bundle and import it to keystore +# 3) Create certificate bundle and import it to keystore +rm -f client-keystore-root-ca.jks cat client-cert-root-ca.pem root-ca/ca-cert.pem >client-cert-root-ca-chain.pem openssl pkcs12 -export -name test-store -in client-cert-root-ca-chain.pem -inkey client-key.pem -out client-keystore-root-ca.p12 -password pass:wibble keytool -importkeystore -destkeystore client-keystore-root-ca.jks -srckeystore client-keystore-root-ca.p12 -srcstorepass wibble -srcstoretype pkcs12 -alias test-store -keypass wibble -storepass wibble @@ -218,16 +234,17 @@ keytool -importkeystore -destkeystore client-keystore-root-ca.jks -srckeystore c # PEM signed by other CA client-server (to verify unknown client cases) -1) Generate a Certificate Signing Request for the client cert +# 1) Generate a Certificate Signing Request for the client cert keytool -certreq -alias test-store -file client-csr.pem -keystore client-keystore.jks -keypass wibble -storepass wibble -2) Sign the client cert with the intermediate CA and convert it to the X.509 format +# 2) Sign the client cert with the intermediate CA and convert it to the X.509 format openssl ca -config openssl.cnf -batch -name CA_int -keyfile other-ca/ca-key.pem -passin pass:wibble -cert other-ca/ca-cert.pem -in client-csr.pem | openssl x509 -out client-cert-other-ca.pem -outform PEM -3) Create certificate bundle and import it to keystore +# 3) Create certificate bundle and import it to keystore +rm -f client-keystore-other-ca.jks cat client-cert-other-ca.pem other-ca/ca-cert.pem >client-cert-other-ca-chain.pem openssl pkcs12 -export -name test-store -in client-cert-other-ca-chain.pem -inkey client-key.pem -out client-keystore-other-ca.p12 -password pass:wibble keytool -importkeystore -destkeystore client-keystore-other-ca.jks -srckeystore client-keystore-other-ca.p12 -srcstorepass wibble -srcstoretype pkcs12 -alias test-store -keypass wibble -storepass wibble @@ -235,15 +252,15 @@ keytool -importkeystore -destkeystore client-keystore-other-ca.jks -srckeystore # Certificate Revocation List -1) Revoke the server cert +# 1) Revoke the server cert openssl ca -config openssl.cnf -name CA_root -keyfile root-ca/ca-key.pem -passin pass:wibble -cert root-ca/ca-cert.pem -revoke root-ca/01.pem -2) Revoke the client cert +# 2) Revoke the client cert openssl ca -config openssl.cnf -name CA_root -keyfile root-ca/ca-key.pem -passin pass:wibble -cert root-ca/ca-cert.pem -revoke root-ca/03.pem -3) Generate the Certificate Revocation List +# 3) Generate the Certificate Revocation List openssl ca -config openssl.cnf -name CA_root -keyfile root-ca/ca-key.pem -passin pass:wibble -cert root-ca/ca-cert.pem -gencrl -out root-ca/crl.pem @@ -253,23 +270,23 @@ openssl ca -config openssl.cnf -name CA_root -keyfile root-ca/ca-key.pem -passin ## JKS (Java KeyStore) -1) Copy the server-keystore to reuse the localhost cerfificate +# 1) Copy the server-keystore to reuse the localhost cerfificate cp server-keystore.jks sni-keystore.jks -2) Add a few extra keys for host1-host5 top level domains for SNI +# 2) Add a few extra keys for host1-host5 top level domains for SNI -keytool -genkey -alias test-host1 -keyalg RSA -keystore sni-keystore.jks -keysize 2048 -validity 1095 -dname CN=host1 -keypass wibble -storepass wibble -keytool -genkey -alias test-host2 -keyalg RSA -keystore sni-keystore.jks -keysize 2048 -validity 1095 -dname CN=host2.com -keypass wibble -storepass wibble -keytool -genkey -alias test-host3 -keyalg RSA -keystore sni-keystore.jks -keysize 2048 -validity 1095 -dname CN=*.host3.com -keypass wibble -storepass wibble -keytool -genkey -alias test-host4 -keyalg RSA -keystore sni-keystore.jks -keysize 2048 -validity 1095 -dname CN="host4.com certificate" -ext san=dns:host4.com,dns:www.host4.com -keypass wibble -storepass wibble +keytool -genkey -alias test-host1 -keyalg RSA -keystore sni-keystore.jks -keysize 2048 -validity 10950 -dname CN=host1 -keypass wibble -storepass wibble +keytool -genkey -alias test-host2 -keyalg RSA -keystore sni-keystore.jks -keysize 2048 -validity 10950 -dname CN=host2.com -keypass wibble -storepass wibble +keytool -genkey -alias test-host3 -keyalg RSA -keystore sni-keystore.jks -keysize 2048 -validity 10950 -dname CN=*.host3.com -keypass wibble -storepass wibble +keytool -genkey -alias test-host4 -keyalg RSA -keystore sni-keystore.jks -keysize 2048 -validity 10950 -dname CN="host4.com certificate" -ext san=dns:host4.com,dns:www.host4.com -keypass wibble -storepass wibble # note: creating wildcard san certificate with openssl due to bug in keytool (https://bugs.openjdk.java.net/browse/JDK-8007706) # keytool -genkey -alias test-host5 -keyalg RSA -keystore sni-keystore.jks -keysize 2048 -validity 1095 -dname CN="host5.com" -ext san=dns:*.host5.com -keypass wibble -storepass wibble -openssl req -x509 -config openssl-host5.cnf -out host5.pem -new -newkey rsa:2048 -subj "/CN=host5.com" -days +1095 -keyout host5-key.pem -passout pass:wibble +openssl req -x509 -config openssl-host5.cnf -out host5.pem -new -newkey rsa:2048 -subj "/CN=host5.com" -days +10950 -keyout host5-key.pem -passout pass:wibble openssl pkcs12 -export -name test-host5 -in host5.pem -inkey host5-key.pem -out host5.p12 -passin pass:wibble -passout pass:wibble keytool -importkeystore -destkeystore sni-keystore.jks -deststorepass wibble -srckeystore host5.p12 -srcstoretype pkcs12 -srcstorepass wibble -alias test-host5 -3) Extract the cerfificate for the host1-host5 domains +# 3) Extract the cerfificate for the host1-host5 domains keytool -export -alias test-host1 -file host1.crt -keystore sni-keystore.jks -keypass wibble -storepass wibble keytool -export -alias test-host2 -file host2.crt -keystore sni-keystore.jks -keypass wibble -storepass wibble @@ -277,16 +294,18 @@ keytool -export -alias test-host3 -file host3.crt -keystore sni-keystore.jks -ke keytool -export -alias test-host4 -file host4.crt -keystore sni-keystore.jks -keypass wibble -storepass wibble keytool -export -alias test-host5 -file host5.crt -keystore sni-keystore.jks -keypass wibble -storepass wibble -4) Create trust stores for the host1-host5 domains +# 4) Create trust stores for the host1-host5 domains +rm -f sni-truststore-host1.jks sni-truststore-host2.jks sni-truststore-host3.jks sni-truststore-host4.jks sni-truststore-host5.jks keytool -noprompt -import -trustcacerts -alias test-host1 -file host1.crt -keystore sni-truststore-host1.jks -keypass wibble -storepass wibble keytool -noprompt -import -trustcacerts -alias test-host2 -file host2.crt -keystore sni-truststore-host2.jks -keypass wibble -storepass wibble keytool -noprompt -import -trustcacerts -alias test-host3 -file host3.crt -keystore sni-truststore-host3.jks -keypass wibble -storepass wibble keytool -noprompt -import -trustcacerts -alias test-host4 -file host4.crt -keystore sni-truststore-host4.jks -keypass wibble -storepass wibble keytool -noprompt -import -trustcacerts -alias test-host5 -file host5.crt -keystore sni-truststore-host5.jks -keypass wibble -storepass wibble -5) Create trust stores for the SNI server trust tests +# 5) Create trust stores for the SNI server trust tests +rm -f server-truststore-root-ca-host2.jks server-truststore-root-ca-host3.jks server-truststore-root-ca-fallback.jks server-truststore-other-ca-fallback.jks keytool -noprompt -import -trustcacerts -alias host2.com -file root-ca/ca-cert.pem -keystore server-truststore-root-ca-host2.jks -storepass wibble keytool -noprompt -import -trustcacerts -alias host3.com -file other-ca/ca-cert.pem -keystore server-truststore-root-ca-host2.jks -storepass wibble @@ -299,13 +318,14 @@ keytool -noprompt -import -trustcacerts -alias xxx.com -file other-ca/ca-cert.pe ## Self signed PKCS12 -1) Transform JKS to PKCS12 +# 1) Transform JKS to PKCS12 +rm -f sni-keystore.p12 keytool -importkeystore -srckeystore sni-keystore.jks -srcstorepass wibble -destkeystore sni-keystore.p12 -deststoretype PKCS12 -keypass wibble -storepass wibble ## Self signed PEM -1) Extract each keycert as a PKCS12 store +# 1) Extract each keycert as a PKCS12 store keytool -importkeystore -srckeystore sni-keystore.jks -srcstorepass wibble -destkeystore host1-keystore.p12 -deststoretype PKCS12 -keypass wibble -storepass wibble -alias test-host1 keytool -importkeystore -srckeystore sni-keystore.jks -srcstorepass wibble -destkeystore host2-keystore.p12 -deststoretype PKCS12 -keypass wibble -storepass wibble -alias test-host2 @@ -313,7 +333,7 @@ keytool -importkeystore -srckeystore sni-keystore.jks -srcstorepass wibble -dest keytool -importkeystore -srckeystore sni-keystore.jks -srcstorepass wibble -destkeystore host4-keystore.p12 -deststoretype PKCS12 -keypass wibble -storepass wibble -alias test-host4 keytool -importkeystore -srckeystore sni-keystore.jks -srcstorepass wibble -destkeystore host5-keystore.p12 -deststoretype PKCS12 -keypass wibble -storepass wibble -alias test-host5 -2) Extract each private key from the PCS12 store and convert it to PKCS8 format +# 2) Extract each private key from the PCS12 store and convert it to PKCS8 format openssl pkcs12 -in host1-keystore.p12 -passin pass:wibble -nodes | openssl pkcs8 -topk8 -inform PEM -outform PEM -out host1-key.pem -nocrypt openssl pkcs12 -in host2-keystore.p12 -passin pass:wibble -nodes | openssl pkcs8 -topk8 -inform PEM -outform PEM -out host2-key.pem -nocrypt @@ -321,7 +341,7 @@ openssl pkcs12 -in host3-keystore.p12 -passin pass:wibble -nodes | openssl pkcs8 openssl pkcs12 -in host4-keystore.p12 -passin pass:wibble -nodes | openssl pkcs8 -topk8 -inform PEM -outform PEM -out host4-key.pem -nocrypt openssl pkcs12 -in host5-keystore.p12 -passin pass:wibble -nodes | openssl pkcs8 -topk8 -inform PEM -outform PEM -out host5-key.pem -nocrypt -3) Extract each X.509 certificate from the PCS12 store +# 3) Extract each X.509 certificate from the PCS12 store openssl pkcs12 -in host1-keystore.p12 -passin pass:wibble -nokeys -out host1-cert.pem openssl pkcs12 -in host2-keystore.p12 -passin pass:wibble -nokeys -out host2-cert.pem @@ -329,7 +349,7 @@ openssl pkcs12 -in host3-keystore.p12 -passin pass:wibble -nokeys -out host3-cer openssl pkcs12 -in host4-keystore.p12 -passin pass:wibble -nokeys -out host4-cert.pem openssl pkcs12 -in host5-keystore.p12 -passin pass:wibble -nokeys -out host5-cert.pem -4) Remove the temporary PKCS12 stores +# 4) Remove the temporary PKCS12 stores rm host1-keystore.p12 rm host2-keystore.p12 rm host3-keystore.p12 @@ -338,17 +358,19 @@ rm host5-keystore.p12 ## JKS Store with multiple entries -Execute these commands, in the same order: +# Execute these commands, in the same order: -keytool -v -genkeypair -alias precious -keyalg RSA -keysize 4096 -keystore multiple.jks -validity 36500 -keytool -v -genkeypair -alias other -keyalg RSA -keysize 4096 -keystore multiple.jks -validity 36500 +rm -f multiple.jks +keytool -v -genkeypair -alias precious -dname "CN=precious, OU=Vert.x, O=Eclipse, L=Unknown, ST=Unknown, C=Unknown" -keyalg RSA -keysize 4096 -keystore multiple.jks -storetype JKS -validity 36500 -keypass wibble -storepass wibble +keytool -v -genkeypair -alias other -dname "CN=other, OU=Vert.x, O=Eclipse, L=Unknown, ST=Unknown, C=Unknown" -keyalg RSA -keysize 4096 -keystore multiple.jks -validity 36500 -keypass wibble -storepass wibble -The generated file is used to setup a server and check we can force Vert.x to use a specific alias. -By default the SSL engine selects the first entry in the keystore (which corresponds to the second generated key pair - "other"). +# The generated file is used to setup a server and check we can force Vert.x to use a specific alias. +# By default the SSL engine selects the first entry in the keystore (which corresponds to the second generated key pair - "other"). ## JKS Store with multiple entries and key passwords -Same as previous one but with key passwords. +# Same as previous one but with key passwords. -keytool -v -genkeypair -alias fonky -dname "CN=fonky, OU=Vert.x, O=Eclipse" -keyalg RSA -keysize 4096 -keystore multiple-alias-password.jks -validity 36500 -storepass wibble -keypass family -storetype jks +rm -f multiple-alias-password.jks +keytool -v -genkeypair -alias fonky -dname "CN=fonky, OU=Vert.x, O=Eclipse" -keyalg RSA -keysize 4096 -keystore multiple-alias-password.jks -storetype JKS -validity 36500 -storepass wibble -keypass family -storetype jks keytool -v -genkeypair -alias reflection -dname "CN=reflection, OU=Vert.x, O=Eclipse" -keyalg RSA -keysize 4096 -keystore multiple-alias-password.jks -validity 36500 -storepass wibble -keypass eternal -storetype jks From f74cc76c2ec5b06d483b6274fcc64761e9ddea2c Mon Sep 17 00:00:00 2001 From: Tero Saarni Date: Mon, 6 Jun 2022 17:10:48 +0300 Subject: [PATCH 2/2] Automatically reload certificate and keys. * Implemented KeyStore that can reload PEM and PKCS#12 / JKS files wihtout server restart. * Use NewSunX509 KeyManager which selects server certificate based on SNI in TLS handshake among other selection criterias. Signed-off-by: Tero Saarni --- .../vertx/core/net/KeyStoreOptionsBase.java | 40 ++- .../io/vertx/core/net/PemKeyCertOptions.java | 47 ++-- .../core/net/impl/DelegatingKeyStoreSpi.java | 238 ++++++++++++++++++ .../vertx/core/net/impl/KeyStoreFileSpi.java | 70 ++++++ .../vertx/core/net/impl/KeyStoreHelper.java | 1 + .../core/net/impl/PemFileKeyStoreSpi.java | 130 ++++++++++ .../core/net/impl/ReloadingKeyStore.java | 97 +++++++ .../io/vertx/core/net/impl/SSLHelper.java | 28 +-- .../java/io/vertx/core/http/HttpTLSTest.java | 44 ++-- .../io/vertx/core/net/KeyStoreHelperTest.java | 9 +- .../java/io/vertx/core/net/KeyStoreTest.java | 33 ++- src/test/java/io/vertx/core/net/NetTest.java | 4 +- 12 files changed, 661 insertions(+), 80 deletions(-) create mode 100644 src/main/java/io/vertx/core/net/impl/DelegatingKeyStoreSpi.java create mode 100644 src/main/java/io/vertx/core/net/impl/KeyStoreFileSpi.java create mode 100644 src/main/java/io/vertx/core/net/impl/PemFileKeyStoreSpi.java create mode 100644 src/main/java/io/vertx/core/net/impl/ReloadingKeyStore.java diff --git a/src/main/java/io/vertx/core/net/KeyStoreOptionsBase.java b/src/main/java/io/vertx/core/net/KeyStoreOptionsBase.java index 16907ad8b07..cac345b20de 100644 --- a/src/main/java/io/vertx/core/net/KeyStoreOptionsBase.java +++ b/src/main/java/io/vertx/core/net/KeyStoreOptionsBase.java @@ -15,8 +15,10 @@ import io.vertx.core.buffer.Buffer; import io.vertx.core.impl.VertxInternal; import io.vertx.core.net.impl.KeyStoreHelper; +import io.vertx.core.net.impl.ReloadingKeyStore; import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.KeyStoreBuilderParameters; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509KeyManager; @@ -40,6 +42,8 @@ public abstract class KeyStoreOptionsBase implements KeyCertOptions, TrustOption private Buffer value; private String alias; private String aliasPassword; + private X509KeyManager km; + private KeyStore.Builder builder; /** * Default constructor @@ -189,6 +193,29 @@ KeyStoreHelper getHelper(Vertx vertx) throws Exception { return helper; } + X509KeyManager getKeyManager(Vertx vertx) throws Exception { + if (km == null) { + VertxInternal v = (VertxInternal) vertx; + + if (this.path != null) { + builder = ReloadingKeyStore.Builder.fromKeyStoreFile(v, type, provider, + v.resolveFile(path).getAbsolutePath(), password, alias, aliasPassword); + } else if (this.value != null) { + + KeyStore.ProtectionParameter protection = new KeyStore.PasswordProtection( + password != null ? password.toCharArray() : null); + + builder = KeyStore.Builder + .newInstance(KeyStoreHelper.loadKeyStore(type, provider, password, this::getValue, alias), protection); + } + + KeyManagerFactory kmf = KeyManagerFactory.getInstance("NewSunX509"); + kmf.init(new KeyStoreBuilderParameters(builder)); + km = (X509KeyManager) kmf.getKeyManagers()[0]; + } + return km; + } + /** * Load and return a Java keystore. * @@ -196,20 +223,21 @@ KeyStoreHelper getHelper(Vertx vertx) throws Exception { * @return the {@code KeyStore} */ public KeyStore loadKeyStore(Vertx vertx) throws Exception { - KeyStoreHelper helper = getHelper(vertx); - return helper != null ? helper.store() : null; + // Ensure that KeyStore is constructed. + getKeyManager(vertx); + return builder.getKeyStore(); } @Override public KeyManagerFactory getKeyManagerFactory(Vertx vertx) throws Exception { - KeyStoreHelper helper = getHelper(vertx); - return helper != null ? helper.getKeyMgrFactory() : null; + return new KeyManagerFactoryWrapper(getKeyManager(vertx)); } @Override public Function keyManagerMapper(Vertx vertx) throws Exception { - KeyStoreHelper helper = getHelper(vertx); - return helper != null ? helper::getKeyMgr : null; + X509KeyManager km = getKeyManager(vertx); + // Key manager will do SNI lookup and mapping from SNI server name to certificate and key alias. + return serverName -> km; } @Override diff --git a/src/main/java/io/vertx/core/net/PemKeyCertOptions.java b/src/main/java/io/vertx/core/net/PemKeyCertOptions.java index 681010355a0..3665c7c717b 100644 --- a/src/main/java/io/vertx/core/net/PemKeyCertOptions.java +++ b/src/main/java/io/vertx/core/net/PemKeyCertOptions.java @@ -19,13 +19,16 @@ import io.vertx.core.impl.VertxInternal; import io.vertx.core.json.JsonObject; import io.vertx.core.net.impl.KeyStoreHelper; +import io.vertx.core.net.impl.ReloadingKeyStore; import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.KeyStoreBuilderParameters; import javax.net.ssl.X509KeyManager; import java.security.KeyStore; import java.util.ArrayList; import java.util.List; import java.util.function.Function; +import java.util.stream.Collectors; /** * Key store options configuring a list of private key and its certificate based on @@ -97,7 +100,9 @@ @DataObject(generateConverter = true, publicConverter = false) public class PemKeyCertOptions implements KeyCertOptions { - private KeyStoreHelper helper; + private X509KeyManager km; + private KeyStore.Builder builder; + private List keyPaths; private List keyValues; private List certPaths; @@ -390,21 +395,20 @@ public PemKeyCertOptions copy() { return new PemKeyCertOptions(this); } - KeyStoreHelper getHelper(Vertx vertx) throws Exception { - if (helper == null) { - List keys = new ArrayList<>(); - for (String keyPath : keyPaths) { - keys.add(vertx.fileSystem().readFileBlocking(((VertxInternal)vertx).resolveFile(keyPath).getAbsolutePath())); - } - keys.addAll(keyValues); - List certs = new ArrayList<>(); - for (String certPath : certPaths) { - certs.add(vertx.fileSystem().readFileBlocking(((VertxInternal)vertx).resolveFile(certPath).getAbsolutePath())); - } - certs.addAll(certValues); - helper = new KeyStoreHelper(KeyStoreHelper.loadKeyCert(keys, certs), KeyStoreHelper.DUMMY_PASSWORD, null); + X509KeyManager getKeyManager(Vertx vertx) throws Exception { + if (km == null) { + VertxInternal v = (VertxInternal) vertx; + builder = ReloadingKeyStore.Builder.fromPem(v, + certPaths.stream().map(p -> v.resolveFile(p).getAbsolutePath()).collect(Collectors.toList()), + keyPaths.stream().map(p -> v.resolveFile(p).getAbsolutePath()).collect(Collectors.toList()), + certValues, keyValues); + + KeyManagerFactory kmf = KeyManagerFactory.getInstance("NewSunX509"); + kmf.init(new KeyStoreBuilderParameters(builder)); + km = (X509KeyManager) kmf.getKeyManagers()[0]; } - return helper; + + return km; } /** @@ -414,19 +418,20 @@ KeyStoreHelper getHelper(Vertx vertx) throws Exception { * @return the {@code KeyStore} */ public KeyStore loadKeyStore(Vertx vertx) throws Exception { - KeyStoreHelper helper = getHelper(vertx); - return helper != null ? helper.store() : null; + // Ensure that KeyStore is constructed. + getKeyManager(vertx); + return builder.getKeyStore(); } @Override public KeyManagerFactory getKeyManagerFactory(Vertx vertx) throws Exception { - KeyStoreHelper helper = getHelper(vertx); - return helper != null ? helper.getKeyMgrFactory() : null; + return new KeyManagerFactoryWrapper(getKeyManager(vertx)); } @Override public Function keyManagerMapper(Vertx vertx) throws Exception { - KeyStoreHelper helper = getHelper(vertx); - return helper != null ? helper::getKeyMgr : null; + X509KeyManager km = getKeyManager(vertx); + // KeyManager will do SNI lookup and mapping from SNI server name to certificate and key alias. + return serverName -> km; } } diff --git a/src/main/java/io/vertx/core/net/impl/DelegatingKeyStoreSpi.java b/src/main/java/io/vertx/core/net/impl/DelegatingKeyStoreSpi.java new file mode 100644 index 00000000000..57d56b33265 --- /dev/null +++ b/src/main/java/io/vertx/core/net/impl/DelegatingKeyStoreSpi.java @@ -0,0 +1,238 @@ +/* +* Copyright (c) 2011-2022 Contributors to the Eclipse Foundation +* +* This program and the accompanying materials are made available under the +* terms of the Eclipse Public License 2.0 which is available at +* http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 +* which is available at https://www.apache.org/licenses/LICENSE-2.0. +* +* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 +*/ + +package io.vertx.core.net.impl; + +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.security.Key; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.KeyStoreSpi; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.time.Duration; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.Enumeration; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +public abstract class DelegatingKeyStoreSpi extends KeyStoreSpi { + + private static final Logger log = LoggerFactory.getLogger(DelegatingKeyStoreSpi.class); + + private AtomicReference delegate = new AtomicReference<>(); + + // Defines how often the delegate keystore should be checked for updates. + private final Duration cacheTtl = Duration.of(1, ChronoUnit.SECONDS); + + // Defines the next time when to check updates. + private Instant cacheExpiredTime = Instant.MIN; + + + /** + * Reloads the delegate KeyStore if the underlying files have changed on disk. + */ + abstract void refresh() throws Exception; + + + /** + * Calls {@link #refresh()} to refresh the cached KeyStore and if more than {@link #cacheTtl} has passed since last + * refresh. + */ + private void refreshCachedKeyStore() { + // Return if not enough time has passed for the delegate KeyStore to be refreshed. + if (Instant.now().isBefore(cacheExpiredTime)) { + return; + } + + // Set the time when refresh should be checked next. + cacheExpiredTime = Instant.now().plus(cacheTtl); + + try { + refresh(); + } catch (Exception e) { + log.debug("Failed to refresh: " + e); + } + } + + void setKeyStoreDelegate(KeyStore delegate) { + this.delegate.set(new Delegate(delegate)); + } + + @Override + public Key engineGetKey(String alias, char[] password) throws NoSuchAlgorithmException, UnrecoverableKeyException { + refreshCachedKeyStore(); + try { + return delegate.get().keyStore.getKey(alias, password); + } catch (KeyStoreException e) { + log.info("getKey: " + e); + return null; + } + } + + @Override + public Certificate[] engineGetCertificateChain(String alias) { + refreshCachedKeyStore(); + try { + return delegate.get().keyStore.getCertificateChain(alias); + } catch (KeyStoreException e) { + log.info("getCertificateChain: " + e); + return new Certificate[0]; + } + } + + @Override + public Certificate engineGetCertificate(String alias) { + refreshCachedKeyStore(); + try { + return delegate.get().keyStore.getCertificate(alias); + } catch (KeyStoreException e) { + log.info("getCertificate: " + e); + return null; + } + } + + @Override + public Date engineGetCreationDate(String alias) { + refreshCachedKeyStore(); + try { + return delegate.get().keyStore.getCreationDate(alias); + } catch (KeyStoreException e) { + log.info("getCreationDate: " + e); + return null; + } + } + + @Override + public Enumeration engineAliases() { + refreshCachedKeyStore(); + return Collections.enumeration(new ArrayList<>(delegate.get().sortedAliases)); + } + + @Override + public boolean engineContainsAlias(String alias) { + refreshCachedKeyStore(); + try { + return delegate.get().keyStore.containsAlias(alias); + } catch (KeyStoreException e) { + log.info("containsAlias: " + e); + return false; + } + } + + @Override + public int engineSize() { + refreshCachedKeyStore(); + try { + return delegate.get().keyStore.size(); + } catch (KeyStoreException e) { + log.info("size: " + e); + return 0; + } + } + + @Override + public boolean engineIsKeyEntry(String alias) { + refreshCachedKeyStore(); + try { + return delegate.get().keyStore.isKeyEntry(alias); + } catch (KeyStoreException e) { + log.info("isKeyEntry: " + e); + return false; + } + } + + @Override + public boolean engineIsCertificateEntry(String alias) { + refreshCachedKeyStore(); + try { + return delegate.get().keyStore.isCertificateEntry(alias); + } catch (KeyStoreException e) { + log.info("isCertificateEntry: " + e); + return false; + } + } + + @Override + public String engineGetCertificateAlias(Certificate cert) { + refreshCachedKeyStore(); + try { + return delegate.get().keyStore.getCertificateAlias(cert); + } catch (KeyStoreException e) { + log.info("getCertificateAlias: " + e); + return null; + } + } + + @Override + public void engineLoad(InputStream stream, char[] password) + throws IOException, NoSuchAlgorithmException, CertificateException { + // Nothing to do here since implementations of this class have their own means to load certificates and keys. + } + + private static final String IMMUTABLE_KEYSTORE_ERR = "Modifying keystore is not supported"; + + @Override + public void engineSetKeyEntry(String alias, Key key, char[] password, Certificate[] chain) throws KeyStoreException { + throw new UnsupportedOperationException(IMMUTABLE_KEYSTORE_ERR); + } + + @Override + public void engineSetKeyEntry(String alias, byte[] key, Certificate[] chain) throws KeyStoreException { + throw new UnsupportedOperationException(IMMUTABLE_KEYSTORE_ERR); + } + + @Override + public void engineSetCertificateEntry(String alias, Certificate cert) throws KeyStoreException { + throw new UnsupportedOperationException(IMMUTABLE_KEYSTORE_ERR); + } + + @Override + public void engineDeleteEntry(String alias) throws KeyStoreException { + throw new UnsupportedOperationException(IMMUTABLE_KEYSTORE_ERR); + } + + @Override + public void engineStore(OutputStream stream, char[] password) + throws IOException, NoSuchAlgorithmException, CertificateException { + throw new UnsupportedOperationException(IMMUTABLE_KEYSTORE_ERR); + } + + class Delegate { + KeyStore keyStore; + List sortedAliases; + + Delegate(KeyStore ks) { + this.keyStore = ks; + + try { + sortedAliases = Collections.list(ks.aliases()); + Collections.sort(sortedAliases); + Collections.reverse(sortedAliases); + } catch (KeyStoreException e) { + // Ignore exception. + log.info("Failed getting aliases" + e); + } + } + } + +} diff --git a/src/main/java/io/vertx/core/net/impl/KeyStoreFileSpi.java b/src/main/java/io/vertx/core/net/impl/KeyStoreFileSpi.java new file mode 100644 index 00000000000..2593decbea7 --- /dev/null +++ b/src/main/java/io/vertx/core/net/impl/KeyStoreFileSpi.java @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2011-2022 Contributors to the Eclipse Foundation +* +* This program and the accompanying materials are made available under the +* terms of the Eclipse Public License 2.0 which is available at +* http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 +* which is available at https://www.apache.org/licenses/LICENSE-2.0. +* +* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 +*/ + +package io.vertx.core.net.impl; + +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.attribute.FileTime; +import java.util.function.Supplier; + +import io.vertx.core.VertxException; +import io.vertx.core.buffer.Buffer; +import io.vertx.core.impl.VertxInternal; + +public class KeyStoreFileSpi extends DelegatingKeyStoreSpi { + + private static final Logger log = LoggerFactory.getLogger(KeyStoreFileSpi.class); + + private final VertxInternal vertx; + private final String type; + private final String provider; + private final String path; + private final String password; + private final String alias; + private FileTime lastModified; + + public KeyStoreFileSpi(VertxInternal vertx, String type, String provider, String path, String password, String alias) throws Exception { + if (password == null) { + throw new VertxException("Password must not be null"); + } + + this.vertx = vertx; + this.type = type; + this.provider = provider; + this.path = path; + this.password = password; + this.alias = alias; + + refresh(); + } + + /** + * Reload keystore if it was modified on disk since it was last loaded. + */ + void refresh() throws Exception { + // If keystore has been previously loaded, check the modification timestamp to decide if reload is needed. + if ((lastModified != null) && (lastModified.compareTo(Files.getLastModifiedTime(Paths.get(path))) > 0)) { + // File was not modified since last reload: do nothing. + return; + } + + // Load keystore from disk. + Supplier value; + value = () -> vertx.fileSystem().readFileBlocking(path); + setKeyStoreDelegate(KeyStoreHelper.loadKeyStore(type, provider, password, value, alias)); + this.lastModified = Files.getLastModifiedTime(Paths.get(path)); + } + +} diff --git a/src/main/java/io/vertx/core/net/impl/KeyStoreHelper.java b/src/main/java/io/vertx/core/net/impl/KeyStoreHelper.java index 77c7d411ea9..3c44ea7e5cc 100644 --- a/src/main/java/io/vertx/core/net/impl/KeyStoreHelper.java +++ b/src/main/java/io/vertx/core/net/impl/KeyStoreHelper.java @@ -25,6 +25,7 @@ import java.io.InputStream; import java.net.Socket; import java.security.*; +import java.security.KeyStore.ProtectionParameter; import java.security.cert.Certificate; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; diff --git a/src/main/java/io/vertx/core/net/impl/PemFileKeyStoreSpi.java b/src/main/java/io/vertx/core/net/impl/PemFileKeyStoreSpi.java new file mode 100644 index 00000000000..e26d2ea421e --- /dev/null +++ b/src/main/java/io/vertx/core/net/impl/PemFileKeyStoreSpi.java @@ -0,0 +1,130 @@ +/* +* Copyright (c) 2011-2022 Contributors to the Eclipse Foundation +* +* This program and the accompanying materials are made available under the +* terms of the Eclipse Public License 2.0 which is available at +* http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 +* which is available at https://www.apache.org/licenses/LICENSE-2.0. +* +* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 +*/ + +package io.vertx.core.net.impl; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.attribute.FileTime; +import java.security.KeyStore; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import io.vertx.core.VertxException; +import io.vertx.core.buffer.Buffer; +import io.vertx.core.impl.VertxInternal; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +public class PemFileKeyStoreSpi extends DelegatingKeyStoreSpi { + + private static final Logger log = LoggerFactory.getLogger(PemFileKeyStoreSpi.class); + + private final VertxInternal vertx; + private final List fileCredentials = new ArrayList<>(); // Certificates and keys given as paths. + private final List certValues; + private final List keyValues; + + public PemFileKeyStoreSpi(VertxInternal vertx, List certPaths, List keyPaths, + List certValues, List keyValues) throws Exception { + + if ((keyPaths.size() < certPaths.size()) || (keyValues.size() < certValues.size())) { + throw new VertxException("Missing private key"); + } else if ((keyPaths.size() > certPaths.size()) || (keyValues.size() > certValues.size())) { + throw new VertxException("Missing X.509 certificate"); + } else if (keyPaths.isEmpty() && keyValues.isEmpty()) { + throw new VertxException("No credentials configured"); + } + + this.vertx = vertx; + this.certValues = certValues; + this.keyValues = keyValues; + + // Load credentials that were passed as file paths. + Iterator cpi = certPaths.iterator(); + Iterator kpi = keyPaths.iterator(); + while (cpi.hasNext() && kpi.hasNext()) { + fileCredentials.add(new FileCredential(cpi.next(), kpi.next())); + } + + setKeyStoreDelegate(createKeyStore()); + } + + /** + * Reload certificate and key PEM files if they were modified on disk since they were last loaded. + */ + void refresh() throws Exception { + boolean wasReloaded = false; + int i = 0; + for (FileCredential fc : fileCredentials) { + try { + if (fc.needsReload()) { + fileCredentials.set(i, new FileCredential(fc.certPath, fc.keyPath)); + wasReloaded = true; + } + } catch (Exception e) { + log.error("Failed to load: " + e); + } + i++; + } + + // Re-generate KeyStore. + if (wasReloaded) { + setKeyStoreDelegate(createKeyStore()); + } + } + + /** + * Create KeyStore that contains the certificates and keys that were passed by paths and by values. + */ + KeyStore createKeyStore() throws Exception { + List certs = new ArrayList<>(certValues); + List keys = new ArrayList<>(keyValues); + + fileCredentials.stream().forEach(fc -> { + certs.add(fc.certValue); + keys.add(fc.keyValue); + }); + + return KeyStoreHelper.loadKeyCert(keys, certs); + } + + /** + * Holds the content of certificate and key files and their modification timestamps. + */ + class FileCredential { + private final String certPath; + private final String keyPath; + private final FileTime certLastModified; + private final FileTime keyLastModified; + Buffer certValue; + Buffer keyValue; + + FileCredential(String certPath, String keyPath) throws Exception { + this.certPath = certPath; + this.keyPath = keyPath; + + certValue = vertx.fileSystem().readFileBlocking(certPath); + keyValue = vertx.fileSystem().readFileBlocking(keyPath); + + this.certLastModified = Files.getLastModifiedTime(Paths.get(certPath)); + this.keyLastModified = Files.getLastModifiedTime(Paths.get(keyPath)); + } + + boolean needsReload() throws IOException { + return (certLastModified.compareTo(Files.getLastModifiedTime(Paths.get(certPath))) < 0) || + (keyLastModified.compareTo(Files.getLastModifiedTime(Paths.get(keyPath))) < 0); + } + } + +} diff --git a/src/main/java/io/vertx/core/net/impl/ReloadingKeyStore.java b/src/main/java/io/vertx/core/net/impl/ReloadingKeyStore.java new file mode 100644 index 00000000000..e6c824fe4ac --- /dev/null +++ b/src/main/java/io/vertx/core/net/impl/ReloadingKeyStore.java @@ -0,0 +1,97 @@ +/* +* Copyright (c) 2011-2022 Contributors to the Eclipse Foundation +* +* This program and the accompanying materials are made available under the +* terms of the Eclipse Public License 2.0 which is available at +* http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 +* which is available at https://www.apache.org/licenses/LICENSE-2.0. +* +* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 +*/ + +package io.vertx.core.net.impl; + +import java.io.IOException; +import java.security.KeyStore; +import java.security.KeyStoreSpi; +import java.security.NoSuchAlgorithmException; +import java.security.Provider; +import java.security.cert.CertificateException; +import java.util.List; +import java.util.Objects; + +import io.vertx.core.buffer.Buffer; +import io.vertx.core.impl.VertxInternal; + +/** + * KeyStore that can reload itself when the backing files are modified. + */ +public class ReloadingKeyStore extends KeyStore { + + protected ReloadingKeyStore(KeyStoreSpi keyStoreSpi, Provider provider, String type) + throws NoSuchAlgorithmException, CertificateException, IOException { + super(keyStoreSpi, provider, type); + + // Calling load(), even with null arguments, will initialize the KeyStore to expected state. + load(null, null); + } + + /** + * Builder implementation for reloading keystores. + */ + public static class Builder extends KeyStore.Builder { + + private final KeyStore keyStore; + private final ProtectionParameter protection; + + private final String alias; + private final ProtectionParameter aliasProtection; + + private Builder(KeyStore keyStore, String password, String alias, String keyAliasPassword) { + this.keyStore = keyStore; + this.protection = password != null ? new PasswordProtection(password.toCharArray()) : null; + this.alias = alias; + this.aliasProtection = keyAliasPassword != null ? new PasswordProtection(keyAliasPassword.toCharArray()) : null; + } + + @Override + public KeyStore getKeyStore() { + return keyStore; + } + + @Override + public ProtectionParameter getProtectionParameter(String newSunAlias) { + Objects.requireNonNull(newSunAlias); + + // Parse plain alias from NewSunS509 KeyManager prefixed alias. + // https://github.com/openjdk/jdk/blob/6e55a72f25f7273e3a8a19e0b9a97669b84808e9/src/java.base/share/classes/sun/security/ssl/X509KeyManagerImpl.java#L237-L265 + int firstDot = newSunAlias.indexOf('.'); + int secondDot = newSunAlias.indexOf('.', firstDot + 1); + if ((firstDot == -1) || (secondDot == firstDot)) { + // Invalid alias. + return protection; + } + String requestedAlias = newSunAlias.substring(secondDot + 1); + if (requestedAlias.equals(alias) && aliasProtection != null) { + return aliasProtection; + } + return protection; + } + + public static Builder fromKeyStoreFile(VertxInternal vertx, String type, String provider, String path, String password, + String alias, String aliasPassword) throws Exception { + return new Builder(new ReloadingKeyStore( + new KeyStoreFileSpi(vertx, type, provider, path, password, alias), null, "ReloadingKeyStore"), + password, alias, aliasPassword); + } + + public static Builder fromPem(VertxInternal vertx, List certPaths, List keyPaths, + List certValues, List keyValues) throws Exception { + return new Builder(new ReloadingKeyStore( + new PemFileKeyStoreSpi(vertx, certPaths, keyPaths, certValues, keyValues), null, "ReloadingKeyStore"), + KeyStoreHelper.DUMMY_PASSWORD, null, null); + } + + } + +} diff --git a/src/main/java/io/vertx/core/net/impl/SSLHelper.java b/src/main/java/io/vertx/core/net/impl/SSLHelper.java index bdb8f6cd433..7902ba4f2e2 100755 --- a/src/main/java/io/vertx/core/net/impl/SSLHelper.java +++ b/src/main/java/io/vertx/core/net/impl/SSLHelper.java @@ -471,34 +471,16 @@ public SslContext getContext(VertxInternal vertx, String serverName) { public SslContext getContext(VertxInternal vertx, String serverName, boolean useAlpn) { int idx = useAlpn ? 0 : 1; - if (serverName == null) { - if (sslContexts[idx] == null) { - TrustManagerFactory trustMgrFactory; - try { - trustMgrFactory = getTrustMgrFactory(vertx, null); - } catch (Exception e) { - throw new VertxException(e); - } - sslContexts[idx] = createContext(vertx, useAlpn, null, trustMgrFactory); - } - return sslContexts[idx]; - } else { - X509KeyManager mgr; - try { - mgr = keyCertOptions.keyManagerMapper(vertx).apply(serverName); - } catch (Exception e) { - throw new RuntimeException(e); - } - if (mgr == null) { - return sslContexts[idx]; - } + if (sslContexts[idx] == null) { + TrustManagerFactory trustMgrFactory; try { - TrustManagerFactory trustMgrFactory = getTrustMgrFactory(vertx, serverName); - return sslContextMaps[idx].computeIfAbsent(mgr.getCertificateChain(null)[0], s -> createContext(vertx, useAlpn, mgr, trustMgrFactory)); + trustMgrFactory = getTrustMgrFactory(vertx, serverName); } catch (Exception e) { throw new VertxException(e); } + sslContexts[idx] = createContext(vertx, useAlpn, null, trustMgrFactory); } + return sslContexts[idx]; } // This is called to validate some of the SSL params as that only happens when the context is created diff --git a/src/test/java/io/vertx/core/http/HttpTLSTest.java b/src/test/java/io/vertx/core/http/HttpTLSTest.java index 6e1f63e1cff..812d2d0cfd9 100755 --- a/src/test/java/io/vertx/core/http/HttpTLSTest.java +++ b/src/test/java/io/vertx/core/http/HttpTLSTest.java @@ -466,22 +466,30 @@ public void testSNITrustPEM() throws Exception { } @Test - // Client provides SNI but server ignores it and provides a different cerficate + // Client provides SNI when server option setSni(false). + // Server still processes SNI and returns correct certificate. + // NOTE: It is not possible to disable SNI support in NewSunX509 KeyManager. The impact is following: + // - CORRECT server certificate is returned according to requested SNI, even if server option setSni(false). + // - Previously, before switching to SNI handling in NewSunX509 KeyManager, INCORRECT certificate was returned. public void testSNIServerIgnoresExtension1() throws Exception { testTLS(Cert.NONE, Trust.SNI_JKS_HOST2, Cert.SNI_JKS, Trust.NONE) .requestOptions(new RequestOptions().setSsl(true).setPort(4043).setHost("host2.com")) - .fail(); + .pass(); } @Test - // Client provides SNI but server ignores it and provides a different cerficate - check we get a certificate + // Client provides SNI when server option setSni(false). + // Server still processes SNI and returns correct certificate. + // NOTE: It is not possible to disable SNI support in NewSunX509 KeyManager. The impact is following: + // - CORRECT server certificate is returned according to requested SNI, even if server option setSni(false). + // - Previously, before switching to SNI handling in NewSunX509 KeyManager, INCORRECT certificate was returned. public void testSNIServerIgnoresExtension2() throws Exception { - Certificate cert = testTLS(Cert.NONE, Trust.SERVER_JKS, Cert.SNI_JKS, Trust.NONE) + Certificate cert = testTLS(Cert.NONE, Trust.SNI_JKS_HOST2, Cert.SNI_JKS, Trust.NONE) .clientVerifyHost(false) .requestOptions(new RequestOptions().setSsl(true).setPort(4043).setHost("host2.com")) .pass() .clientPeerCert(); - assertEquals("localhost", TestUtils.cnOf(cert)); + assertEquals("host2.com", TestUtils.cnOf(cert)); } @Test @@ -655,25 +663,31 @@ public void testSNISubjectAltenativeNameCNMatch1PEM() throws Exception { } @Test + // Client sets SNI servername to host5.com. + // Server certificate has Subject CN=host5.com but SAN DNS *.host5.com. + // Default server certificate CN=localhost is returned because host5.com did not *.host5.com. public void testSNISubjectAltenativeNameCNMatch2() throws Exception { - Certificate cert = testTLS(Cert.NONE, Trust.SNI_JKS_HOST5, Cert.SNI_JKS, Trust.NONE) + Certificate cert = testTLS(Cert.NONE, Trust.SERVER_JKS, Cert.SNI_JKS, Trust.NONE) .serverSni() .clientVerifyHost(false) .requestOptions(new RequestOptions().setSsl(true).setPort(4043).setHost("host5.com")) .pass() .clientPeerCert(); - assertEquals("host5.com", TestUtils.cnOf(cert)); + assertEquals("localhost", TestUtils.cnOf(cert)); } @Test + // Client sets SNI servername to host5.com. + // Server certificate has Subject CN=host5.com but SAN DNS *.host5.com. + // Default server certificate CN=localhost is returned because host5.com did not *.host5.com. public void testSNISubjectAltenativeNameCNMatch2PKCS12() throws Exception { - Certificate cert = testTLS(Cert.NONE, Trust.SNI_JKS_HOST5, Cert.SNI_PKCS12, Trust.NONE) + Certificate cert = testTLS(Cert.NONE, Trust.SERVER_JKS, Cert.SNI_PKCS12, Trust.NONE) .serverSni() .clientVerifyHost(false) .requestOptions(new RequestOptions().setSsl(true).setPort(4043).setHost("host5.com")) .pass() .clientPeerCert(); - assertEquals("host5.com", TestUtils.cnOf(cert)); + assertEquals("localhost", TestUtils.cnOf(cert)); } @Test @@ -790,13 +804,15 @@ public void testSNIWithServerNameTrustFallbackFail() throws Exception { } @Test + // Server requires client certificate which is issued by either Root CA or Other CA. + // Client provides certificate issued by Root CA. public void testSNIWithServerNameTrustFail() throws Exception { testTLS(Cert.CLIENT_PEM_ROOT_CA, Trust.SNI_JKS_HOST2, Cert.SNI_JKS, Trust.SNI_SERVER_ROOT_CA_AND_OTHER_CA_2).serverSni() .requestOptions(new RequestOptions().setSsl(true) .setPort(4043) .setHost("host2.com")) .requiresClientAuth() - .fail(); + .pass(); } @Test @@ -1321,13 +1337,7 @@ public void testPKCS12InvalidPath() { @Test public void testPKCS12MissingPassword() { - String msg; - if (PlatformDependent.javaVersion() < 15) { - msg = "Get Key failed: null"; - } else { - msg = "Get Key failed: Cannot read the array length because \"password\" is null"; - } - testInvalidKeyStore(Cert.SERVER_PKCS12.get().setPassword(null), msg, null); + testInvalidKeyStore(Cert.SERVER_PKCS12.get().setPassword(null), "Password must not be null", null); } @Test diff --git a/src/test/java/io/vertx/core/net/KeyStoreHelperTest.java b/src/test/java/io/vertx/core/net/KeyStoreHelperTest.java index c7ac4612b83..e720f7c79a5 100644 --- a/src/test/java/io/vertx/core/net/KeyStoreHelperTest.java +++ b/src/test/java/io/vertx/core/net/KeyStoreHelperTest.java @@ -18,11 +18,14 @@ import java.security.KeyFactory; import java.security.KeyStore; import java.security.KeyStoreException; +import java.security.PrivateKey; import java.security.cert.X509Certificate; import java.security.interfaces.ECPrivateKey; import java.security.interfaces.RSAPrivateKey; import java.util.Enumeration; +import javax.net.ssl.X509KeyManager; + import io.vertx.core.net.impl.KeyStoreHelper; import io.vertx.test.core.VertxTestBase; import org.junit.Assume; @@ -49,8 +52,7 @@ public void testKeyStoreHelperSupportsRSAPrivateKeys() throws Exception { PemKeyCertOptions options = new PemKeyCertOptions() .addKeyPath("target/test-classes/tls/server-key.pem") .addCertPath("target/test-classes/tls/server-cert.pem"); - KeyStoreHelper helper = options.getHelper(vertx); - assertKeyType(helper.store(), RSAPrivateKey.class); + assertKeyType(options.loadKeyStore(vertx), RSAPrivateKey.class); } /** @@ -66,8 +68,7 @@ public void testKeyStoreHelperSupportsECPrivateKeys() throws Exception { PemKeyCertOptions options = new PemKeyCertOptions() .addKeyPath("target/test-classes/tls/server-key-ec.pem") .addCertPath("target/test-classes/tls/server-cert-ec.pem"); - KeyStoreHelper helper = options.getHelper(vertx); - assertKeyType(helper.store(), ECPrivateKey.class); + assertKeyType(options.loadKeyStore(vertx), ECPrivateKey.class); } private void assertKeyType(KeyStore store, Class expectedKeyType) throws KeyStoreException, GeneralSecurityException { diff --git a/src/test/java/io/vertx/core/net/KeyStoreTest.java b/src/test/java/io/vertx/core/net/KeyStoreTest.java index c8265143e0a..7f82629dc7b 100644 --- a/src/test/java/io/vertx/core/net/KeyStoreTest.java +++ b/src/test/java/io/vertx/core/net/KeyStoreTest.java @@ -23,7 +23,10 @@ import org.junit.Test; import javax.net.ssl.KeyManager; +import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.TrustManager; +import javax.net.ssl.X509KeyManager; + import java.security.KeyStore; import java.util.Arrays; import java.util.Collections; @@ -350,7 +353,7 @@ public void testCopyTrustOptions() throws Exception { @Test public void testJKSPath() throws Exception { - testKeyStore(Cert.SERVER_JKS.get().getHelper(vertx)); + testKeyStoreOptions(Cert.SERVER_JKS.get()); } @Test @@ -358,7 +361,7 @@ public void testJKSValue() throws Exception { JksOptions options = Cert.SERVER_JKS.get(); Buffer store = vertx.fileSystem().readFileBlocking(options.getPath()); options.setPath(null).setValue(store); - testKeyStore(options.getHelper(vertx)); + testKeyStoreOptions(options); } @Test @@ -373,12 +376,12 @@ public void testKeyStoreValue() throws Exception { .setPath(null) .setValue(store) .setPassword(jks.getPassword()); - testKeyStore(options.getHelper(vertx)); + testKeyStoreOptions(options); } @Test public void testPKCS12Path() throws Exception { - testKeyStore(Cert.SERVER_PKCS12.get().getHelper(vertx)); + testKeyStoreOptions(Cert.SERVER_PKCS12.get()); } @Test @@ -386,12 +389,12 @@ public void testPKCS12Value() throws Exception { PfxOptions options = Cert.SERVER_PKCS12.get(); Buffer store = vertx.fileSystem().readFileBlocking(options.getPath()); options.setPath(null).setValue(store); - testKeyStore(options.getHelper(vertx)); + testKeyStoreOptions(options); } @Test public void testKeyCertPath() throws Exception { - testKeyStore(Cert.SERVER_PEM.get().getHelper(vertx)); + testPemKeyCertOptions(Cert.SERVER_PEM.get()); } /** @@ -400,7 +403,7 @@ public void testKeyCertPath() throws Exception { */ @Test public void testRsaKeyCertPath() throws Exception { - testKeyStore(Cert.SERVER_PEM_RSA.get().getHelper(vertx)); + testPemKeyCertOptions(Cert.SERVER_PEM_RSA.get()); } @Test @@ -410,7 +413,7 @@ public void testKeyCertValue() throws Exception { options.setKeyValue(null).setKeyValue(key); Buffer cert = vertx.fileSystem().readFileBlocking(options.getCertPath()); options.setCertValue(null).setCertValue(cert); - testKeyStore(options.getHelper(vertx)); + testPemKeyCertOptions(options); } @Test @@ -455,6 +458,20 @@ private void testKeyStore(KeyStoreHelper helper) throws Exception { assertTrue(keyManagers.length > 0); } + private void testPemKeyCertOptions(PemKeyCertOptions options) throws Exception { + Enumeration aliases = options.loadKeyStore(vertx).aliases(); + assertTrue(aliases.hasMoreElements()); + KeyManager[] keyManagers = options.getKeyManagerFactory(vertx).getKeyManagers(); + assertTrue(keyManagers.length > 0); + } + + private void testKeyStoreOptions(KeyStoreOptionsBase options) throws Exception { + Enumeration aliases = options.loadKeyStore(vertx).aliases(); + assertTrue(aliases.hasMoreElements()); + KeyManager[] keyManagers = options.getKeyManagerFactory(vertx).getKeyManagers(); + assertTrue(keyManagers.length > 0); + } + private void testTrustStore(KeyStoreHelper helper) throws Exception { TrustManager[] keyManagers = helper.getTrustMgrs((VertxInternal) vertx); assertTrue(keyManagers.length > 0); diff --git a/src/test/java/io/vertx/core/net/NetTest.java b/src/test/java/io/vertx/core/net/NetTest.java index fda0976f20c..ab9a4c4b380 100755 --- a/src/test/java/io/vertx/core/net/NetTest.java +++ b/src/test/java/io/vertx/core/net/NetTest.java @@ -1569,6 +1569,8 @@ public void testSniWithServerNameTrustFallbackFail(){ } @Test + // Server requires client certificate which is issued by either Root CA or Other CA. + // Client provides certificate issued by Root CA. public void testSniWithServerNameTrustFail(){ TLSTest test = new TLSTest().clientTrust(Trust.SNI_JKS_HOST2) .clientCert(Cert.CLIENT_PEM_ROOT_CA) @@ -1577,7 +1579,7 @@ public void testSniWithServerNameTrustFail(){ .sni(true) .serverName("host2.com") .serverTrust(Trust.SNI_SERVER_ROOT_CA_AND_OTHER_CA_2); - test.run(false); + test.run(true); await(); }