From c91c7f52ae72ab43bc9e478d4b0e740e54a71501 Mon Sep 17 00:00:00 2001 From: tyb-dev <57002348+tyb-dev@users.noreply.github.com> Date: Fri, 5 Sep 2025 14:53:23 +0200 Subject: [PATCH] Add option to specify `ClientCertificateContext` in .NET Fixes #1864 .NET supports the ability to supply intermediate certificates as well as the client certificate during mTLS setup. Without support for `ClientCertificateContext`, users must ensure that intermediate certs are available in the system cert store for the .NET runtime to find. These changes use certificates generated via `rabbitmq/tls-gen` using this command: ``` make CN=localhost -C one_intermediate ``` All SSL tests now provide a client certificate, because the RabbitMQ configuration has changed to require them via via... ``` ssl_options.fail_if_no_peer_cert = true ``` --- .ci/certs/ca_certificate.pem | 38 ++++++------ .ci/certs/ca_key.pem | 56 +++++++++--------- .ci/certs/chained_ca_certificate.pem | 41 +++++++++++++ .ci/certs/client.p12 | Bin 0 -> 3539 bytes .ci/certs/client_certificate.pem | 21 +++++++ .ci/certs/client_direct.p12 | Bin 0 -> 3619 bytes .ci/certs/client_direct_certificate.pem | 22 +++++++ .ci/certs/client_direct_key.pem | 30 ++++++++++ .ci/certs/client_key.pem | 30 ++++++++++ .ci/certs/client_localhost.p12 | Bin 3651 -> 0 bytes .ci/certs/client_localhost_certificate.pem | 22 ------- .ci/certs/client_localhost_key.pem | 30 ---------- .ci/certs/intermediate_ca_certificate.pem | 20 +++++++ .ci/certs/server.p12 | Bin 0 -> 3539 bytes .ci/certs/server_certificate.pem | 21 +++++++ .ci/certs/server_direct.p12 | Bin 0 -> 3619 bytes .ci/certs/server_direct_certificate.pem | 22 +++++++ .ci/certs/server_direct_key.pem | 30 ++++++++++ .ci/certs/server_key.pem | 30 ++++++++++ .ci/certs/server_localhost.p12 | Bin 3651 -> 0 bytes .ci/certs/server_localhost_certificate.pem | 22 ------- .ci/certs/server_localhost_key.pem | 30 ---------- .ci/ubuntu/gha-setup.sh | 15 ++++- .ci/ubuntu/rabbitmq.conf | 6 +- .ci/windows/gha-setup.ps1 | 6 +- .ci/windows/rabbitmq.conf.in | 6 +- projects/RabbitMQ.Client/Impl/SslHelper.cs | 10 +++- .../PublicAPI/PublicAPI.Unshipped.net8.0.txt | 18 ++++++ .../PublicAPI.Unshipped.netstandard2.0.txt} | 0 .../RabbitMQ.Client/RabbitMQ.Client.csproj | 13 ++++ projects/RabbitMQ.Client/SslOption.cs | 8 +++ projects/Test/Common/SslEnv.cs | 22 +++++-- projects/Test/Integration/TestSsl.cs | 42 ++++++++++--- .../SequentialIntegration/TestHeartbeats.cs | 2 +- 34 files changed, 439 insertions(+), 174 deletions(-) create mode 100644 .ci/certs/chained_ca_certificate.pem create mode 100644 .ci/certs/client.p12 create mode 100644 .ci/certs/client_certificate.pem create mode 100644 .ci/certs/client_direct.p12 create mode 100644 .ci/certs/client_direct_certificate.pem create mode 100644 .ci/certs/client_direct_key.pem create mode 100644 .ci/certs/client_key.pem delete mode 100644 .ci/certs/client_localhost.p12 delete mode 100644 .ci/certs/client_localhost_certificate.pem delete mode 100644 .ci/certs/client_localhost_key.pem create mode 100644 .ci/certs/intermediate_ca_certificate.pem create mode 100644 .ci/certs/server.p12 create mode 100644 .ci/certs/server_certificate.pem create mode 100644 .ci/certs/server_direct.p12 create mode 100644 .ci/certs/server_direct_certificate.pem create mode 100644 .ci/certs/server_direct_key.pem create mode 100644 .ci/certs/server_key.pem delete mode 100644 .ci/certs/server_localhost.p12 delete mode 100644 .ci/certs/server_localhost_certificate.pem delete mode 100644 .ci/certs/server_localhost_key.pem create mode 100644 projects/RabbitMQ.Client/PublicAPI/PublicAPI.Unshipped.net8.0.txt rename projects/RabbitMQ.Client/{PublicAPI.Unshipped.txt => PublicAPI/PublicAPI.Unshipped.netstandard2.0.txt} (100%) diff --git a/.ci/certs/ca_certificate.pem b/.ci/certs/ca_certificate.pem index f1ae0b232e..99dbe6ccd4 100644 --- a/.ci/certs/ca_certificate.pem +++ b/.ci/certs/ca_certificate.pem @@ -1,21 +1,21 @@ -----BEGIN CERTIFICATE----- -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 -----END CERTIFICATE----- diff --git a/.ci/certs/ca_key.pem b/.ci/certs/ca_key.pem index 75349f7475..0bfd2fd992 100644 --- a/.ci/certs/ca_key.pem +++ b/.ci/certs/ca_key.pem @@ -1,30 +1,30 @@ -----BEGIN ENCRYPTED PRIVATE KEY----- -MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIm6kLjkvzznECAggA -MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECGjVddOBQ1QOBIIEyOAafHUtExxT -tY2ONQkUkXZG4/fIDvuNwt8IIkNUIGVp9WEDd4Mh5Ofa52uUKmlhj+FyRZ6u2mGT -VHU65e4kBYB10n0oybRPvRU1tFxgr8qI0T7Fqnx7WJAP3m0Bo/tWfqE0GHRrspZV -gABLVTOFvHE8oOsEh/ndMe+Y2qGaLsl+MF3jkfYAxSK2QwEK9HDa16Xsit7hqVbz -JUyvBmQVfTZzanIall+EpUntv/vlILKIlAFOZUXIZ/iL8LTQCmpycfGLknr4/9KP -gCYZmWFS18X9KVAwgV2kSdUebWH9phDosSw6fZh843l1SQvjG65PgrnWYb6Fw7B4 -s3Nk6bXjHYtvLT19EUrQOdeOegynaQQBs5WIcp9LbKT3LJVQpaVGV9thi+LPz1Bu -Lep583ayXTecA7Dbfa6S9R97TgRoMdDWaz1kTBReQTUhrL5736A38gpwJeBZDqel -39sRULCKARz2ZX0YpeZCmfVhVVSguO5gCfACsqHoOiTxYOA97GR128BcpEVJ1lst -sZZNwT3m6xIcXbS37EImhUMGiQ5fyGZ+8FIozTL9xNopIR97b3ceA9CoLc7EVcFC -RxHvh1HwtpyBDyopJp2wYu31nqcSDsJh+lmjo5R7bqvDDmflfkfu1G45JkXKr3Vz -M89S/y6Uo8W/EYT2MPYTsqcobtjx6oM1RYkVuYTR6cyUgQkHGtptkzGKxYE8dYwQ -4EIm87czYvCW0Mrp6yy0NGKzqBb+19Kuqc0HO+YezEQ8RjOVb8+D+cuCp2ZSItJ/ -S9m7BDTOzTS2lBotrFVkSbzaQafAmxQiaSP7gd0M9dnC0AOB2ILbyRAyIDQ0Y2dm -kMbiewQwNFiY9moRtgzHuHRfFZu4w996Q20cYZyMbxDfY17QoZQzfKWQH1BD7nq5 -G4RFpInt6q4q0F94nQWCif195VZF64+8ETMteJqtBFhUSQbq7PzKdpuf8NFxczLt -MDEWg2l6qNLP+zswulcVbFcC/HxAu4UtYf2m5MAtaurXZZ/+xPW5c/0caWMycQ7g -fbkYvC4j0OT7aqqMd1SYzEx7l75Vqn1sr2BsXZFoaqK2c/1LIb6U1kAhyhDQ46rV -0v6q4GUk4fdnE4N+9MXWBvlKSnqEVYlE54IuSUrYRuuBhO4LQpPMOAafQPR6QCTI -ikqWVmLAj50n7uba0Ao9lRKR7bFpdOQob/nYMTKT6YQaohYhbCv4zIK9fDgWWiXE -a2ecIP3KiZzw7oLMKXLcDt1RkkzE1FQxLfOeZ5EP4RwBGPDvR88ELO+lGQQt3VnS -FIZoXBUFUf7bEUzTwM4240zkjDYQPxD1j769Zq/JZfKyOEXXOJT8xHiwMg3ARWuE -hGlNKApbJGMn9myC61KaGMyCKRvMVxI25w3LfI4OAWt+67BB5OuAG11nmn9Kja73 -bhMFDIMZ8kE0p9IWfpiUJlDB9odGEc4z3Jl5CqBVDkMCDxq9BQDM0hSDk+ov8FO9 -g03PqMxvsxd2c56vkMtNY4hSGkYfN0RsM3vTXXLtPwRwRZURCmKK76BmsT4oBd+W -orqH4SABIAbYTwNOb7k/wOc4EfucawBqMG4g+29qewD67+EXjB0GadqOXRoQyhRq -hd74uUK5gzJOqStqiowQ0A== +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQInKuSvrFErBsCAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECGntAWF0aGBPBIIEyERsOoQOptO1 +0C4KOtGgTlYCdOldaGrxQL6aUD0utzdswl5iIixBZkdwyc+4KbHWnKBDI4kj4/z8 +NFywpb4mzOmGtKZbAvz9Xjf/KUQ5TdbTr8ZKV8tm2K/CQLrWmnlXI7sqa/zxQvde +hEDrnx/TIKotm3ZrAJZwSXQSO6p+uMyPzzpIsy0dLjxMwtjiRzIzpxvHeKANIxZ2 +yRdsWZohImyni8zX5NDp4iYcvPC0/+0LPpE8K2/YotegwIm1HN0w/kFcZF97gQ+P +42frJLTnbDkmCqJSBMhSdfEChO6jbDcYe0K0HXlmS2oJK4HQsO+011gFRb6aXoMs +9vMWdjtXyOON4SYHJnYi5TkWFj9zzNEbVtIKEgIYQl+p/UPT711i8LdkfV9w/tic +gb4FwamLAwXwPViM88maRt0AwVWTVKgzFOR4B3uGdIqFH6HQVCAfmdRc9iPM9BK1 +98P5aWwiy69iuK826HMqGyvvE0wzRHcXoKwXOFqn5hZeYc53J3bN3Q5wihhoLyGd +E7STEXnLmJkJtNCd5sYrevh8lMxWFr/LdWdkF6SQFllEDBQsGTNQxoRqKu9DWXI3 +hJUmPlkJUGKo5BxOQ4KuqBaT+h7Td2CkRx8GXSyHwks1QNCqlvvTVCaVXIFT/fPu +A30wb7zlszeg0lt2anTXswVbt3vDNcNxXy4rl1ys4bTSp0OGX7MtJL3Du0X4+tmS +/x1HKSbZ8ppF4h1TYBid3N31ABUtPVzY6icVpjW4/F2Nyc/k30aRmOotectn7alR +XdHaFO08bdYD2j4Wk1oo9YGNYWtVrJ2zgwj8qy04BzlnnR/D+NtW4Y1XtPPbTa+G +z86y2EffTQEHEc8BvVx8FOGUkttsR9FVNEhgXiRl8XR1HzfnQMqhHbhZp8jyTn+X +wm9vx7jlsQgOfxMmUOvmKlSQsJnNmnIfBSTXEFKYoGhiIdXc8gx4ye8houcoel+r +TEgwmhzG6nqJV3QNn/ahJqEjyGDr4hsmADtZHXX2Ws+6TQCh/IRa6tBwmk62Dscf +aduchD3BV9Tt0oCIUrdy68RQmtV0bCj03cVzfCwL6pfEUx1QYwty0heXnUfBhMpU +IcHxCsUXU0MEj5feyrvNOLPBfj59hJUAdZTgmkeMkcNCU15sadoqVy0At6oI+18V +XNkGwxA/qcaPVDGAm22uPNm6abD+L2i1hlCxzbG+onfcMTCeAwYLH1aaFkdRGLfC +lTmCJTC88mtojzAWoMU9BAzaKZsFFqnAUiIsTrC2+ANJEdb2UCmJsLg7emsOBgDi +OjVTw6mdULoyysVIFZ6YKgOfXQGHp4wt8lWsxonh7+f1p56q6/rqW4Pu6pzWEOOB +ZPHERrpKKoQh42UJtYHG+dkfKslKtNCWiKWlKqsQNIDzZJka3DPCqiVm8cjUs0n0 +BpDhyqt7g7wmOrCvMnQQJF7FOm/UNC3DMqbMwykuCn/7VGZeItHdxzKcfdMFZKuK +4TQG+GfGPcyj80sE0iNciZNnRnOLMJReAtqDpHxzt6r6g4V3e1RGDFN5E1z+CH+w +zk+mPd5FargbA/2MjcU1SZ3NbLFE14fmsV4WO2wGyzNCwIFoh9sm0Jos/iTyzrdc +qTx0cg/7JEvaV0jy9ytKBQ== -----END ENCRYPTED PRIVATE KEY----- diff --git a/.ci/certs/chained_ca_certificate.pem b/.ci/certs/chained_ca_certificate.pem new file mode 100644 index 0000000000..558e26f0f5 --- /dev/null +++ b/.ci/certs/chained_ca_certificate.pem @@ -0,0 +1,41 @@ +-----BEGIN CERTIFICATE----- +MIIDWTCCAkGgAwIBAgIBATANBgkqhkiG9w0BAQsFADBLMTowOAYDVQQDDDFUTFNH +ZW5TZWxmU2lnbmVkUm9vdENBIDIwMjUtMTEtMDVUMTE6NTA6MjUuNzEzNTY2MQ0w +CwYDVQQHDAQkJCQkMB4XDTI1MTEwNTE5NTAyOFoXDTM1MTEwMzE5NTAyOFowMDES +MBAGA1UEAwwJbG9jYWxob3N0MRowGAYDVQQKDBFJbnRlcm1lZGlhdGUgQ0EgMTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANKXfTftwYjSbFTLVfEPdPHS +jMHAoHG11NlHoC2lAzKSi39MZpw5kJL3F+QhaArXHoqliCApr2YsdbQAov0LBHEc +HqLgwuuOS5z7XZJowy7ZGZRQ/wW7PI4RGzgDBTsY8UE5ffw6OET2yS68L3b4rgcj +BiVZQnUjeXsIYlh1f0CDqMm3qtUl/3y6ML5+CIrtItAhIom26euQ2CvwZWR3mk65 +zgNIZ3EqXMLr3FzQ+aJnz0TBDQAx/KduP8ZpYYOZ1Kw1OU/sIkcol0zfrFUYIgx0 ++7LoCoV5QwKm0rSrMjUaudpBCsZjP5sQbvGj9JmekhHwiKI95TmtA6mPuQL2zDkC +AwEAAaNjMGEwEgYDVR0TAQH/BAgwBgEB/wIBADALBgNVHQ8EBAMCAQYwHQYDVR0O +BBYEFI2/L45C3RmYVeg6NP26Xny18yPWMB8GA1UdIwQYMBaAFJLwQcD9+OGZt/Ti +vAdtLTmQJVCCMA0GCSqGSIb3DQEBCwUAA4IBAQC+Poi7gOzAdSwJ8n7YBwqPwpA+ +Tz44B6jIXw0M8XXDSwGeGKEWa5DWeNIJD2uV05KR+2Ph63VBKcRgl2Zf/QzZ59I6 +z51w4+sJ+kJHtxMPzOqDdiNZuZAJQk+rFGsIgHZjb+rJlDQGjy1I+5rMVIsOuJoN +JRBZ6qJunU4AF7+Al4qeXj9182NHJ67fexE3YCjNf81Hnd1fnS0rsEzDQaA4lRO+ +uTYrfpwILaq1ghy0uarvwVMDEp5s7Nodi+ALwWlmIa6VTC4ML8kxl6YbRruprVoU +XS9e7q6qXCSQzzt2DEorySnlmaiUKtyHfqt6qGFI5PVRyshSQq/IknTY0iMw +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDhDCCAmygAwIBAgIUftOapTprbnKyfBM1Hd7DVVWY3bEwDQYJKoZIhvcNAQEL +BQAwSzE6MDgGA1UEAwwxVExTR2VuU2VsZlNpZ25lZFJvb3RDQSAyMDI1LTExLTA1 +VDExOjUwOjI1LjcxMzU2NjENMAsGA1UEBwwEJCQkJDAeFw0yNTExMDUxOTUwMjZa +Fw0zNTExMDMxOTUwMjZaMEsxOjA4BgNVBAMMMVRMU0dlblNlbGZTaWduZWRSb290 +Q0EgMjAyNS0xMS0wNVQxMTo1MDoyNS43MTM1NjYxDTALBgNVBAcMBCQkJCQwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdXHuxDyvLjbmiWQJgh5Flnmd7 +dB9eKzgnpwGXW7pF68LSCd8aJDaQV+7BVUw5PyviNqr6saHVB2XRs0fiTUp9OkjA +Oo4MYWLfdHCJVlTTpghusbewf6j+Zi6cAeKXyUmRqf9V9lk6H/IixRAloF1vsHeA +sI8bPq9PwogMnkz5bTMnCiLOLc0IYOoYATdMl4VxgzK6Osc4g/XMOsvTEKd2OX/Q +7QKkwGQDSuZWSc//Vtv0OpdrC74CDvLdkb/q7h1Kg3O6M/b3in4sjtyKAcVXKeUA +0bS4U79I31aN8FWUSBxvLNUaDzEmRLnW2FDb37X05x4ZK8jte1eNmqqq6143AgMB +AAGjYDBeMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBSS +8EHA/fjhmbf04rwHbS05kCVQgjAfBgNVHSMEGDAWgBSS8EHA/fjhmbf04rwHbS05 +kCVQgjANBgkqhkiG9w0BAQsFAAOCAQEADvKmzBN7TiKL8I2PIwO5QfB6RSZcLrcB +bo75Cj2MUx+UTwsNrl8mYAMqma+COh56rN2p/qj+nj1w5cyrV/vRRFfw35GLx08f +0eNH15bZARJdHtYSC3Qr1N5lmvx3maOvsGaxtJI1+UYdLK8Z2lDnGk33QHoyf+7/ +MEtnQyd0LG9IjjWeqUu33aTapvKavJQuTJVe5jnHJXPvuS5T0en8nJO5AjXRk64s +XUL5S63fZss9OtKgYm5RW/8HWGEsuxQ5kBMzgeWdJereGtI7MnRcazXunf5fOaBM +Brq07sL6VOu+rPAcYuVcPvktF3pIZbwuGtQ+VHpFv6qBKAjCtXM49w== +-----END CERTIFICATE----- diff --git a/.ci/certs/client.p12 b/.ci/certs/client.p12 new file mode 100644 index 0000000000000000000000000000000000000000..13eb43b8c79581b248c902587903d225e0422c23 GIT binary patch literal 3539 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 BipBr{ literal 0 HcmV?d00001 diff --git a/.ci/certs/client_certificate.pem b/.ci/certs/client_certificate.pem new file mode 100644 index 0000000000..7958efcfe7 --- /dev/null +++ b/.ci/certs/client_certificate.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgIBAzANBgkqhkiG9w0BAQsFADAwMRIwEAYDVQQDDAlsb2Nh +bGhvc3QxGjAYBgNVBAoMEUludGVybWVkaWF0ZSBDQSAxMB4XDTI1MTEwNTE5NTAy +OVoXDTM1MTEwMzE5NTAyOVowJTESMBAGA1UEAwwJbG9jYWxob3N0MQ8wDQYDVQQK +DAZjbGllbnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDbNWqHe+Re +oD8FqrWV4bl9aFbje45hrMpy0W4dzHHNP8MjEw6sCqX9por22oZ89cTrf//Sp+RT +x9NFCO7l3VTgjRjRkfVSVydhDYzMscUvTuzxobzWxDx6MEYrv7emWKaM3+Ph/nZh +o0cCFEvZ5mHFeAqaYDTQkTt2Yscpo6f84SwY5JcJAfCykCcgZCTqoWoEvidHCk6q +ZV98MQbbMsSWtmUuhYIMxERIfx46/mbWFGIOOv3mW/6TKadlf0NmkI5kC1QlZbdh +bL0I0syzXxwLxA2zQL5nM05pmZ4RxStioEOcZoZBxwA8aaMuE7ZJp8c1Stq2lVoI +9RnfAWazTQNnAgMBAAGjgaIwgZ8wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwEwYD +VR0lBAwwCgYIKwYBBQUHAwIwMAYDVR0RBCkwJ4IJbG9jYWxob3N0gg9TRUEtM0xH +NUhWSlVXSkuCCWxvY2FsaG9zdDAdBgNVHQ4EFgQUBeolqURKViMO2PIB2c4sfwUn +bXMwHwYDVR0jBBgwFoAUjb8vjkLdGZhV6Do0/bpefLXzI9YwDQYJKoZIhvcNAQEL +BQADggEBAGD6seY0AQjuA4BC4daOFn7gUPiuy85yZcu2gSRup4imZPEx6Ig8nyFL +aG6ztpaaTORpMTwoiQYM304vPvfFSpGcy4+bGV776jjYCkCc1Mg32m2z8ftA3+0s +Z+reafKGA4F53aBHz1Cz+yU0uja5MM6DDDzRRnM8XTR4aRAmH4VMxc8/140Q/3OT +SoUFEJ7MMBb8Jq34x/cuXNEMg0PtfG4kTsHVCmmrLKdrKqQYFdHI3DAnE5jslhxs +11TFUdAgfh5P4w9e5fJBatyog0HmQHnz6w/eZWTUVRcKU0WeGSQDV0vCKWrWpF/s +Mz1GaCK+9EI2eVzAvejQ/jReUtNguOY= +-----END CERTIFICATE----- diff --git a/.ci/certs/client_direct.p12 b/.ci/certs/client_direct.p12 new file mode 100644 index 0000000000000000000000000000000000000000..b139e3df8bf03d133ad28e054fe03f5818411304 GIT binary patch literal 3619 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 bcIETw_-{N_Uy%V6nQanikY{7`U#tBO_k_Vp literal 0 HcmV?d00001 diff --git a/.ci/certs/client_direct_certificate.pem b/.ci/certs/client_direct_certificate.pem new file mode 100644 index 0000000000..71f5a3ea3a --- /dev/null +++ b/.ci/certs/client_direct_certificate.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDlTCCAn2gAwIBAgIBBTANBgkqhkiG9w0BAQsFADBLMTowOAYDVQQDDDFUTFNH +ZW5TZWxmU2lnbmVkUm9vdENBIDIwMjUtMTEtMDVUMTE6NTA6MjUuNzEzNTY2MQ0w +CwYDVQQHDAQkJCQkMB4XDTI1MTEwNTE5NTAzMVoXDTM1MTEwMzE5NTAzMVowLDES +MBAGA1UEAwwJbG9jYWxob3N0MRYwFAYDVQQKDA1jbGllbnRfZGlyZWN0MIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy7UbxnPne7KE4nue8IrUSYdROfio +yreIuGs0vx0ueDwUAWpKdoD7ntri907Sk6iUNOiXrt6S3w4rFEbcSuJWZcH4hKCH +FwEZyov5xpjQpcFy+7nLzNRvFfUlppQRFqY4zykbWeZ4IBiS5e5Uk0di+QeDXC59 +bGj06QC/h2+rnLQMGJYlpaWjDwFb5KIxfSQ4pd2/JIG9fJZ+MEvYJum0ssho5MPd +TuQ/aRnlR1mJdwr22MNN1IVb8qneYhhTzBfoxnKNSc5/AnwrtGE3KCVeFYKWoWfJ +MjxLwR1euW/sRqCWzM5HbHgmO/wvXaVpnFSUgwODTEb8HUlo3lqKWQtCNQIDAQAB +o4GiMIGfMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUF +BwMCMDAGA1UdEQQpMCeCCWxvY2FsaG9zdIIPU0VBLTNMRzVIVkpVV0pLgglsb2Nh +bGhvc3QwHQYDVR0OBBYEFAmI+G1mB4F1yFumiIHEHfGZf2RmMB8GA1UdIwQYMBaA +FJLwQcD9+OGZt/TivAdtLTmQJVCCMA0GCSqGSIb3DQEBCwUAA4IBAQAiiSdP77h2 +ipSEOxHH9KbOptSsoZy6l/LhCLRY8sMgdd7bn+gyKG7f/6SQ5UcdX87iu26ax5zv +xKizrNbxT1pLCZif4Kzs1ItqcZYWidhdrMIXJF70RVKdOFzGOr9zwSoMw1Yuy1sR +z8Uj9/G+yMvfOVDJ7K1VKbl4YcMx+bWT774GVt27ZjEnICb1NvhP6/Pf2vdQRKol +czJ/83bkckJ4rKgY8mGV7k4t+xfvyHEp/+qTpy+xfxDXgf0n4qIb8MABmnRAzwAy +XMA01jBma/WnUDlvQhWlD6s7TEyR646jaykl/LXJ7N0S4I4oY/kHH60wDEjwntK3 +surniMqJ6Xss +-----END CERTIFICATE----- diff --git a/.ci/certs/client_direct_key.pem b/.ci/certs/client_direct_key.pem new file mode 100644 index 0000000000..a419f1bc9e --- /dev/null +++ b/.ci/certs/client_direct_key.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIv8ZrCBQ0Zx4CAggA +MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBCds9Bwm3XTrNb4LvM5doWuBIIE +0H9lVAJt07/VYjVuABP/H9oI7QC/xqOSrPpdA+mdWkg6SrAxosSDC1UJckla23I0 +Z/mZbok7wOdHYPEfqsyyxQ++4/N+XPLMm7azl6BlaZll1yTLMAhoM9zY2JDy6oH0 +F0UZBZ3hdzWfUp0A2cz4ArpQ3jvzhLMhJ2glb5zh3uQ/3GEuwnmkIxzJIxZoUfjB +2Jihf7fKSvIpS8gSA5dX2YMtGptwBQiK8sTbN1ihznOcpqkp4aSKx2h8kuDCMTmK +eI0SWVbzBXGI0455NXqRxuDwv4Met+s6urdXMhEf+qXmA6G35Hgu7dp/IMHlDCXE +0X9lCM90R+KxJASjqtgnFRY1qIue4qNr+GiFE6llLJRcUIO6BHEHXbn3Oc+mLWiu +bBVUdNuo5hiu7TNmCwZQe8tdxoLxmHz31tdGyIKLL6erw01uDarHaT0AO0lUqCqn +f2dCPmwzR6uc4VgB4aLJUlVknkoh4s7SBfN2BsdMBT4d7FnrwL1SEsLQGyKkd9Zb +wAi7zwX4GeSiW0J84NjPWLsY4wV++/8oOJa+siUi5dltyIHsaHb0u6mkJksX0lkZ +hvEydhQi3aDwk4kEbqqr4e9EfdCTCJY8gtbZmw3ytiEQHiaSKmJUDNPfXOhQmeMb +SGSkYHIDxrEUiBsEWfbbAlaoeRTmKdvc3I5QdDAs+58/KTPXMvgC9PfasCjjLBel +ABEEGMH2sbrJ73drgzH8iIKJTJtoIf0q829pfiEZlovoxmN+RLSChdyk/T1vkc67 +evYA39Z4vfMSgKkDvMIsx/akHwKAb7/6ggvapRC2JWNabcFPF+Jtboglyo89hr92 +8uDVqCFeWmcJ/l/Ss2I2Dw4E3P+ID3cn0IXtQ4VMuw/vwfKB59MCYUQCnQWGa5pJ +8iaHKDr3mf8AtlA8rBXNqOyXfKC78YNzw9pcSHK4UEz602IWID4fq+hGDFgcQJPC +oirYHzwFLF9KlN2QE16Ocw1JRzYlvVRsg03Kj8IqezGfQtIPFFDgW3LQ+oCTf0TK +gmyBIqM0Qeqx5ahr+PC+8BKKLRI6F0JHzieVnVr5oJPE2hpEQ59EF3RAamqnWnvz +q4nI24hqppLpK304vc7u336Ug3L7/xAKwoQNjxO7UcZJhyQil0DtLtFJDtPqp8tV +FNtb2PU6PIXoRYk6VDdWK/dXWpQeRXzXZEFmC8p9mDhEIWtT6Udj5NkZV7rgWq0o +1d8u/yf6A6K59gLcLpv1O5AaQRv8S/DylhDNjPXr0TiMmloFUDL4A2dZrZBUZ9LR +R6oF7pgt9MLW1453vCkuDvmX+QOf1cIxP9m0xVMJxeFJK5Xdv3Ae+6zb/aYysJMb +OGzGru8YM80yzjrXnERoL7P9duoaBUEKEzdZn2CjYAmlfTliitGITomPyKk1UKmF +Wo45NLPtD7X3NXyuKC+//dDmWBNHnd8d8CDmcR5erVy8UEkrdPDfQdsW8d0YAPUP +yRlMkCkbqnFpZ507youYrXHzbNflVma3my0oLucsxAqjSKpw58wl8mdw3fFqtoyc +76r2BUzRmoS4rki/hsZZHo3QWRmRIR96MBdwS84ZtncgvkR8ulqAMjm9wt/fEbuP +zWHex8Q7UHba5vhSCIsCScVwntb8p/5gK+SdM7tRXMQJ +-----END ENCRYPTED PRIVATE KEY----- diff --git a/.ci/certs/client_key.pem b/.ci/certs/client_key.pem new file mode 100644 index 0000000000..9409b060c1 --- /dev/null +++ b/.ci/certs/client_key.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIjlBujt2JEpsCAggA +MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBBFCV+cvg6jLi8qqpzrQ/86BIIE +0OPCwGM+z1gtdTN7GhuMdz0FeDDOtwWk2wHLzT1b8p1L07V+OJhcdkJycNJeLvwr +awZSusV6VircXcb/MTUq2XZ8N9uMarVEECRmc4nxY8cXu5A5HWA6UAMfaYe0lI1z +K+bVDa6CVYQjwiOk1ZloyHshtg6dCuSkkGta0oHa76OgSYpNY03pWPn+nKmv4P8h +gc2x+nel/GdmzRWMZF2S0ZcC3VNPz48v4ZoAQgJBsXbH07PZjQqoxdzQZMhV0PH9 +8FLQpCMA53bI7u/JW58IRVOTz5+NsEtPtNU1nBBQGTQZKO6ZCodo83A+ygfc0U2C +LQ9+N52KPKI6G2ZdwDYRbiCLAFQXSb8z/s+3Em32rXfZ6Y1A0BHQe1nlilEArVyI +OaiBr7TbwhfLLk5fIFL8WQhgA3VRlDZkiCDIbun64fFKpyVwOu52e8Ku5rDqFILJ +eHFWRdvCzr4AJ9/RczQh2JFXL04d8UR5BwuMwl/LkMrekwWLfNwIPZmOoUl6Zt5X ++3k0Q0dKv4hFdFOI2XlVsgUbIdv915TCrSnyVjbAlijhHLq+pYFA/DJ/s1xvPz7O +VX6gKV97YmTsEWqx5TWGusNuXhf0bj1DpakJhwGRhV09GEj2VAhF6rfb1tp6m1R8 +fi5OiLPlN2T7BTGcesZyJI++40qthjeL2w1er1WfVq1Y3ECNyDD+Lr9YcUbYd86l +kkRXg/O0O9MlwEBEMS7DqkUf1KEu81StmL3mckNG/kzBzAUypOoern1zuWEM+G1W +8HPMlGqi24XG7GQRAiqbMGGErht9W983oq5r5DR/c9OVq7btnN+YrzAqezaFhwcC +x4gd6M4z/9LFwwsxkIccgBhwfpJLWNzwieFKCjh/s5lhSad3IF+BkuoDtZPqmJLk +TxQwLg0rzT4iN8/0sOL+v3fU76dp7bdg9pRyz8cvd+SlUcr5WCe2YvXtfa3V9qfZ +eTSUARt6erYLnM5IKH4OFnwtabGEirOaepfJl09TbDiboubRY/95JF+7pnA3U8Su +CtrjOSDuHJCPgZ9mcPot4GlVc4nBozmmE6Mv23Y/Qz9UKCNhTDXgKP6ndh0duYOt +2j+rLRJVeOQ8fMmfNDtwqkLK7cAdruhxd1+0skm0tZ8TXbdWA6XG66eaDWuzMpH9 +bI+XRU2zZB3TwMBh+IUXgFW7k8wT8qrygxJj50tGUnVHgguxWk+fqTB4tq0+X+Jz +ZBmqChtQF6pZQXN+BAjjzbGnX5Z06zMDzFSvbXH5gK+uSTZu/YmcbcSXo1M/F2B5 +9KGhWval+wexOLAELjQIk701Wo2c2LIOyygeetOEt8tiAhXyD79/GaQrVhQcB6jh +/hCrlhrlVBN2TGrZtbBXcziZnVRVv7tVty6y4xeV8/7rchmsHUvDmXzJTdlv+pBM +iCYoMg0a093207VQP8zhwoRA5tRsaQgM1Rtf6RgtNZaAlnyx0rwaM8iaOPAUmF3r +DsYbYcrtazPJstxUQszAFXF4UgJAUZZ6L718gxUEzT/IYwbS6zQepmruehuR4zPl +ejtBl6H6HGF85OjN/9d87lUkRpdrz7m7ehIF7yFw1FELu6xXUxEDtO+kLF8MACOD +T2lyyUvc+/1QEkhXqstDZC0Kcc4RzZ4BiIqNZ9tnTCXS +-----END ENCRYPTED PRIVATE KEY----- diff --git a/.ci/certs/client_localhost.p12 b/.ci/certs/client_localhost.p12 deleted file mode 100644 index 1d688c585d57664312bd4c9ba4b8db8594f43c08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3651 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 ALjV8( literal 0 HcmV?d00001 diff --git a/.ci/certs/server_certificate.pem b/.ci/certs/server_certificate.pem new file mode 100644 index 0000000000..a257485ec8 --- /dev/null +++ b/.ci/certs/server_certificate.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgIBAjANBgkqhkiG9w0BAQsFADAwMRIwEAYDVQQDDAlsb2Nh +bGhvc3QxGjAYBgNVBAoMEUludGVybWVkaWF0ZSBDQSAxMB4XDTI1MTEwNTE5NTAy +OFoXDTM1MTEwMzE5NTAyOFowJTESMBAGA1UEAwwJbG9jYWxob3N0MQ8wDQYDVQQK +DAZzZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC11X4GprXk +Loe/H9WGTS8gLEI0iFYS/Fh3YKjwBSrLvcT6ygnTQvXekBQ147OJK5mc8ujDCOY6 +aW3e/eCPey1MKUlIGgHzO8SwxXEL1zhZaetOpqZoJEJ0tuteKHqwZW0CGF0AwqRe +7tE5I5dX50MBBmI4owXAEjF73QTw1mkw05s2eGqDRqfU+6k+0RvK5BNtJLeenSnd +PNk6ifD07Qkg+g+I71RvZEEqKKnx2Vts4tTPr5K4IfWUxZOLkVndjqk2NFd28HG4 +1Wuls5QgDjjKU/ZIXTK51KJMOR8j8K0LxK8gwWuWmj/Q7ZQ3LaBwGNXDy5o4tWcP +Xg+saJDBcOHRAgMBAAGjgaIwgZ8wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwEwYD +VR0lBAwwCgYIKwYBBQUHAwEwMAYDVR0RBCkwJ4IJbG9jYWxob3N0gg9TRUEtM0xH +NUhWSlVXSkuCCWxvY2FsaG9zdDAdBgNVHQ4EFgQUSq8OVzwzxJpP79VK1O03EyUz +hMEwHwYDVR0jBBgwFoAUjb8vjkLdGZhV6Do0/bpefLXzI9YwDQYJKoZIhvcNAQEL +BQADggEBALV+DsNfB5ktXuwZenTmkyAtfub8h5/bW+civWaz67S5bPEGwGhQ3EKS +/JwMCa+Kr/mohjatKNgOjiB0/uxTyUCQ5ZFE5ISBVQYK7D1jsHAhUxHjcJ8tWKrw +wZojiV/Jqrx5G+8leRn3floGDXHSccFv0WL8Iu7EZ41zdbe9daxuVC7KLygtuoSe +R5xR2yvHnQy+byDc9CC3CmF0Pim0tWoH8SEujnuTPeU6N7557PjDNk8IGEQmJLNP +Rm0pzOZBUgJraEnxIa2VwvbQ3KxgHzwf9kiRuULGd3ectd+EmK9ijTUnRnsVIlwB +foT6fy80TgCMmXe2xy/0Tyix3kIFdkI= +-----END CERTIFICATE----- diff --git a/.ci/certs/server_direct.p12 b/.ci/certs/server_direct.p12 new file mode 100644 index 0000000000000000000000000000000000000000..45f410e87b4bfb097da282972538b590d45d686f GIT binary patch literal 3619 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 literal 0 HcmV?d00001 diff --git a/.ci/certs/server_direct_certificate.pem b/.ci/certs/server_direct_certificate.pem new file mode 100644 index 0000000000..811e1785f8 --- /dev/null +++ b/.ci/certs/server_direct_certificate.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDlTCCAn2gAwIBAgIBBDANBgkqhkiG9w0BAQsFADBLMTowOAYDVQQDDDFUTFNH +ZW5TZWxmU2lnbmVkUm9vdENBIDIwMjUtMTEtMDVUMTE6NTA6MjUuNzEzNTY2MQ0w +CwYDVQQHDAQkJCQkMB4XDTI1MTEwNTE5NTAyOVoXDTM1MTEwMzE5NTAyOVowLDES +MBAGA1UEAwwJbG9jYWxob3N0MRYwFAYDVQQKDA1zZXJ2ZXJfZGlyZWN0MIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1qOgJMROFlhP13vEjL42YOzzoyXd +D/UbEZ9u2Ikin78H79Er9/t2Zwh4YMdU0YU4K6AqKc8I7Pk8LDqFJefGhtb0yq2y +sZ6ZptPtFE/VcGoUPkmxtTZoEDWs/UcstpLWzFO+oqS0lh5CA1AaTS3YkA61q7So +j5KbbPRcg4IhRzlqYfRGiW8wqtIwls9z0Cdj/hQL2SmQrklk5qLfca1eshDYLJtw +9stCxFGJsLrXcNjiN7bD5hJScIdSDXlsz3rxzHXY6FOw2eLX86JCh/BZk7i2HmL5 +ADsBhYGRFtou5cWd9XK2WIOArMvwdY1wyhQjonS9mM1aLIUo+PzFHFIp+QIDAQAB +o4GiMIGfMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUF +BwMBMDAGA1UdEQQpMCeCCWxvY2FsaG9zdIIPU0VBLTNMRzVIVkpVV0pLgglsb2Nh +bGhvc3QwHQYDVR0OBBYEFO7LhQd4H1Bjur3wuF4BV9MgPuRIMB8GA1UdIwQYMBaA +FJLwQcD9+OGZt/TivAdtLTmQJVCCMA0GCSqGSIb3DQEBCwUAA4IBAQCntkp723Bx +EuF4lRy4h1zPnGr5DkC2aW4kAFFqbvebaeH5WFpsQoYK5XQsb8NE+6o7hUBkcsc7 +dVCY/MUmpZkqj5AVCMunAFDRCuAV7Ucy989pxjaYlvFk/QG5anLeDfp5dSDj8lMI +jfee2r34+wujcTXp+QyCijmAdbOH/ianragpvf4mNxKQ9SIj1nQh1l9pKySHX7DR +ncLzSVscyIl7rFuWYJWwJXVpEAFZQ+68/nltFCA0rbawoPafh88fF/KB7FjCFkfU +ayj6LMLnmPCKgE6+iCyOt8S3xMLjG7naCYN1SDRFttDg7OvBOpioW+xSvnqCb3cz +gvpm/RMrDIeX +-----END CERTIFICATE----- diff --git a/.ci/certs/server_direct_key.pem b/.ci/certs/server_direct_key.pem new file mode 100644 index 0000000000..d5ca61091e --- /dev/null +++ b/.ci/certs/server_direct_key.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIF7MM6KKkuIACAggA +MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAEICVrLTKyRgmEwfmoSoJ6BIIE +0IPVShlBo1RqlWGzIlo/Q8hnn/IzlAOQ/FpQx/ye788MbpJhuCuNl7EtX+CJYNA/ +wWI1XKj4C6f4wHKFCQJcj7UsiFDLam8EIU2woVW8YhXdMmG+5a9p9RDbfMVTng0/ +CktsO9ccmleF/ueWChhI7Ji4weHwd7YrE7TfXiB91tr83AnDcg6aqsNRiCufh77l +F2b73Rid0OGftIKh/GJSszhKNah5mvcUVkJ66ng5Zyoz6aLlStxTj2cMtxthD+Dy +2wTnlCKjvjLqJrnxP03YKlj//BvGQnZ12sypKBWhnci1ZzcBptpYZUVqFWBJ2QdB +J6g6Kvl0NdKpFnRPgwQfN4k+N1othBeuytT+QPwMKdQp8/s8R5ncmmriVIrIA+NO +2CiZQRv5rhmuESwehbXQqUuNoIpTzn+1UG2FXR/Iqaysw/TARhpcTCqH9Pddm02T +00v+1EE+lS1mC3HAF4usvQ2pzXl16HJ0cWODNg+0Z2+IvtPbtunvQ2nXRJTU5KNN +58f5vDgIyQJaDkOTMOUiF6M5ymTQVTqtWwOUzFlSmJzdEUio3J6Ji538vJM8moA0 +X5yeOE8EXu8znT8Jh+7fDjdLiDL3KWCkHYvSNOrTa5eI7E3jR2l7WbN10dLjXxZn +KWrbp49kL+/2cU7nj+whasKdpxYySvkkQUgmDqwA9sTP0maV2hmlgGauj7jfThvi +yk3NVWsGmTzCrjw6UQbkQXBO4btr6lTjmqDaPltxyWhqZU/0Y6hQf70S9Ef8Xwmu +HOqwVBwGsrLV/9GU42+Gnd26E7tzZNNDA4Z9FUyp7Rc4Bi3G3Ds48qGCX8xW0ayG +MjUTw5fK4Ma14F0tHnhsBNhWyb+OEB7oiGgUwvzzuJbLDNOS+Dgzfq/1+wRO8l4J +DtAD8gzs1m88N675iKSg8XFgVre7sHSRmhZLs/SSrDndfYUVALHpVpj7IGBlAQnr +0j7sq+sxFx2VTZCB00HGrPySt2Lwcx0z1G6o2FtmhKyoy6y9JNtyclqh6Lx7m+1h +/K7M0BvGscnnXMsAb85JPIffX+k6nlSXCtkx414U69yH0bmNoN7VmyFOhEq2LyK1 +YZtBWWs07KwDWRCb9SxPMP3EtO416CNw/BOhcCbjHTmFTJUY06l5jR4A7Ng+YMoj +5gq3HxolqOcsC0SDUFskwpkI3Kx50kiy6+dK3wfr9U82KzUf+MhN9ii8clYgoUh2 +rUaF39SUNqR9nOUgIv21EVTyHGgFP3vPIlsudfV9pU+zCS1OY4kGdSErV7KIejJq +Ex+T1nuZDYgQFRa/z4IwDunH7XA0e0G5fuxIGeyU57ikKPVWdN935MkHoT/q0LUC ++bw6QFMWaazfdC0s5No3v+KgBYSQihCA5pOEj63K6jSzbouAyoJD9ALsYdc4qcut +hZOy5ogf984hVA/JrQ4+1GJvWS+mujZuXF46hA2O4ntk874aVE2VDJxzNIKuuBAD +NbAixVgyanLUXqkmNSQnGZ48ADL59oYPgSIl8C6SZaK0McdX7l/c2a4K7HAp6eOM +3SifZWiwPK5s23m2M9hjAi3zTs/wK9ao7XoRymNfqMUgudxm800CA2hyDkAkFeEk +awQ+0an2dM2hIpy8hmKrSnHkJbdrb/yfzRRsfHsLga/X +-----END ENCRYPTED PRIVATE KEY----- diff --git a/.ci/certs/server_key.pem b/.ci/certs/server_key.pem new file mode 100644 index 0000000000..bcaf2c9175 --- /dev/null +++ b/.ci/certs/server_key.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIMCiIkGoNeoECAggA +MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBCAg7HN/OMTzIDYKEVuBbRBBIIE +0ANnpnpkdFkpEymfRgAhyXL2cFN6UDFKsIP1Kpcnor7/pCki05x4jejcVanChk5r +C4HMr3KB/fEWnohHcr888CWHxMD8lshqamBoqVkLR/+lOeigCJDcJcpo6ehoiUu+ +z1kKVEaARShA1RjyECn4n43JLbaBbUdT+LCL2yAssdX40VdydD4P3oVv/LphS6zr +YHBrkOCtQFnKjiHM2UpPOMG+6GJOVBEoVIztIP15G4RXYy4NjvzA0pfJysUDjk11 +earGitMODSqxc832mZBeOP+CSZiLX2DTvmzoqH/AYQ1PFGlC/i3AMx/pMrrsjkK6 +Dp+lRx/CtESys1xgDW3WF5yV334F9wFROHd91GT5AGV06hcZ4UnCfpLyKmsIB2av +6hqOI2bW2o+iUBrD/teE/Ft6a/OiUmczFu+0tZO2rDNBR6cnQrVr9UlWCD5ES//5 +UDt8U0/JeDEslxtGQwxhycraUibF2ZBDiuRtCzR958ESEpbCthmrfOmx03ZpL+UD +3inwSoWGlesui86eydDs6gDbSYvjIl+Zg0Er2eKBV1AZUgOBbamjsYU2/Nnb7uV+ +mGYBH24tx60ZLBc0j/D8WVN/XvS8QWiEJXpp4Ef1+muhkJfBZ2NElf+DDSI4NQAz +BIcmGOhjxnpqJMaCAL0KPb+7rwMLLEqEPuBl0EHlevM2NdycEE7dA0XiAdlEBdnq +s8MlFB47+hpIe0w3e3Ycd8QyS2ajlNtc5BtTcRibnKJ81e/gCHqrPXlOZ5hnds5M +yiOy5jd6lK/YOmVcsLru7fByGVYoJL9ip7FXJplRMipXeM7GjiUxgFAzIVzoO7AD +lq2zL8c1ezsxbP4Lk9tfcNrXGVhQevDANzqIFwLpiUXHdlspuSBRIkpMI1qTbnPp +fwdYzfFRodLH3hECOQMGaFcWEfSk0ILy1QHgGMMbbHiABKgs9ZDO10xXMvgkD28t +8bFaohGbENF26Tp1pksh+RdNWZ1ouaZ9hD+laPX/I8uuDRJKy5OUfN4okCqhtA9O +zskcGgE1k5fYxEXJqGc3W7r2uU7d2Omc/Ap8G78p2HmWMLh8+Bduj1vVpMCpCQiC +EurNEc2Y8ow5zBryN61gcyZjf5rFrzf9p0p4ctjNI/bhIwqW2b4I4TM6lMcX/HNb +blYqnPItjLdUgVMoSkZVoLwCBJLRved611rEJX3j76znt4Q0lSvMkty6i21IhJPs +4wfo8TVxRF4Zn1/K6PNBLrPQNeU6xDptPqgH7MO8ammbOb6z6jkhvq9riDDNYMOk +rKX/zRgpJLQyI6/OMZukHr+R+bL8WR204AvK6NN9oBSu4gEwr4FzyMv/8GXWXoYF +3BRrzUuTIZJnZvIov88CUoASWexxrxlFMK85IuDP7vmSbRQ4NglXATVajbvzCYjx +CiAPoQUOnO9OWS2JSGHCoYZIB5bk9MYGsRhW7pcbXLDvpmMwt6NnfeY3zSEQkHXE +rXMQzSo7xG0AN+05ftppJeGe0alaFUl9bsVZ1gEBQWgZKFbikz81Y6dIElRTEtZz +bVtFjFc20QYSFO9OQXvdisaxOVdO1PA3mCoIDL4dqnr7wzwqud4y7aCHkRMJ2w40 +c9576h6cNNXoqk4fi6hDHHvHY3rdKzp8NWdNi6Nh2MY/ +-----END ENCRYPTED PRIVATE KEY----- diff --git a/.ci/certs/server_localhost.p12 b/.ci/certs/server_localhost.p12 deleted file mode 100644 index d77b7dca6350a8e043da135e2037c69be47e07f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3651 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 void +RabbitMQ.Client.Exceptions.PublishReturnException +RabbitMQ.Client.Exceptions.PublishReturnException.Exchange.get -> string! +RabbitMQ.Client.Exceptions.PublishReturnException.PublishReturnException(ulong publishSequenceNumber, string! message, string? exchange = null, string? routingKey = null, ushort? replyCode = null, string? replyText = null) -> void +RabbitMQ.Client.Exceptions.PublishReturnException.ReplyCode.get -> ushort +RabbitMQ.Client.Exceptions.PublishReturnException.ReplyText.get -> string! +RabbitMQ.Client.Exceptions.PublishReturnException.RoutingKey.get -> string! +RabbitMQ.Client.RabbitMQTracingOptions +RabbitMQ.Client.RabbitMQTracingOptions.RabbitMQTracingOptions() -> void +RabbitMQ.Client.RabbitMQTracingOptions.UsePublisherAsParent.get -> bool +RabbitMQ.Client.RabbitMQTracingOptions.UsePublisherAsParent.set -> void +RabbitMQ.Client.RabbitMQTracingOptions.UseRoutingKeyAsOperationName.get -> bool +RabbitMQ.Client.RabbitMQTracingOptions.UseRoutingKeyAsOperationName.set -> void +static RabbitMQ.Client.RabbitMQActivitySource.TracingOptions.get -> RabbitMQ.Client.RabbitMQTracingOptions! +static RabbitMQ.Client.RabbitMQActivitySource.TracingOptions.set -> void +RabbitMQ.Client.SslOption.ClientCertificateContext.get -> System.Net.Security.SslStreamCertificateContext +RabbitMQ.Client.SslOption.ClientCertificateContext.set -> void + diff --git a/projects/RabbitMQ.Client/PublicAPI.Unshipped.txt b/projects/RabbitMQ.Client/PublicAPI/PublicAPI.Unshipped.netstandard2.0.txt similarity index 100% rename from projects/RabbitMQ.Client/PublicAPI.Unshipped.txt rename to projects/RabbitMQ.Client/PublicAPI/PublicAPI.Unshipped.netstandard2.0.txt diff --git a/projects/RabbitMQ.Client/RabbitMQ.Client.csproj b/projects/RabbitMQ.Client/RabbitMQ.Client.csproj index d552e63244..acdc9e9635 100644 --- a/projects/RabbitMQ.Client/RabbitMQ.Client.csproj +++ b/projects/RabbitMQ.Client/RabbitMQ.Client.csproj @@ -81,4 +81,17 @@ + + + + + + + + + + + + + diff --git a/projects/RabbitMQ.Client/SslOption.cs b/projects/RabbitMQ.Client/SslOption.cs index cb067cccb4..00b332d8e6 100644 --- a/projects/RabbitMQ.Client/SslOption.cs +++ b/projects/RabbitMQ.Client/SslOption.cs @@ -166,5 +166,13 @@ internal SslProtocols UseFallbackTlsVersions() Version = SslProtocols.Tls12; return Version; } + +#if NET + /// + /// Retrieve or set the to supply + /// a set of certificates used for building a certificate chain. + /// + public SslStreamCertificateContext? ClientCertificateContext { get; set; } +#endif } } diff --git a/projects/Test/Common/SslEnv.cs b/projects/Test/Common/SslEnv.cs index a855cf0e26..7e8deb842f 100644 --- a/projects/Test/Common/SslEnv.cs +++ b/projects/Test/Common/SslEnv.cs @@ -37,7 +37,9 @@ namespace Test public class SslEnv { private readonly string _certPassphrase; - private readonly string _certPath; + private readonly string _certDirectPath; + private readonly string _certIntermediatePath; + private readonly string _certIntermediateCaPath; private const string _hostname = "localhost"; private readonly string _sslDir; private readonly bool _isSslConfigured; @@ -52,13 +54,25 @@ public SslEnv() if (_isSslConfigured) { - _certPath = Path.Combine(_sslDir, $"client_{_hostname}.p12"); + _certDirectPath = Path.Combine(_sslDir, $"client_direct.p12"); + _certIntermediatePath = Path.Combine(_sslDir, $"client.p12"); + _certIntermediateCaPath = Path.Combine(_sslDir, $"intermediate_ca_certificate.pem"); } } - public string CertPath + public string CertDirectPath { - get { return _certPath; } + get { return _certDirectPath; } + } + + public string CertIntermediatePath + { + get { return _certIntermediatePath; } + } + + public string CertIntermediateCaPath + { + get { return _certIntermediateCaPath; } } public string CertPassphrase diff --git a/projects/Test/Integration/TestSsl.cs b/projects/Test/Integration/TestSsl.cs index 0a06ecc4be..a0d1b6c3e3 100644 --- a/projects/Test/Integration/TestSsl.cs +++ b/projects/Test/Integration/TestSsl.cs @@ -32,6 +32,7 @@ using System.IO; using System.Net.Security; using System.Security.Authentication; +using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; using RabbitMQ.Client; using Xunit; @@ -46,6 +47,7 @@ public class TestSsl : IntegrationFixture public TestSsl(ITestOutputHelper output) : base(output) { _sslEnv = new SslEnv(); + Assert.True(File.Exists(_sslEnv.CertDirectPath)); } public override Task InitializeAsync() @@ -64,6 +66,8 @@ public async Task TestServerVerifiedIgnoringNameMismatch() ConnectionFactory cf = CreateConnectionFactory(); cf.Port = 5671; cf.Ssl.ServerName = "*"; + cf.Ssl.CertPath = _sslEnv.CertDirectPath; + cf.Ssl.CertPassphrase = _sslEnv.CertPassphrase; cf.Ssl.AcceptablePolicyErrors = SslPolicyErrors.RemoteCertificateNameMismatch; cf.Ssl.Enabled = true; @@ -78,6 +82,8 @@ public async Task TestServerVerified() ConnectionFactory cf = CreateConnectionFactory(); cf.Port = 5671; cf.Ssl.ServerName = _sslEnv.Hostname; + cf.Ssl.CertPath = _sslEnv.CertDirectPath; + cf.Ssl.CertPassphrase = _sslEnv.CertPassphrase; cf.Ssl.Enabled = true; await SendReceiveAsync(cf); @@ -88,22 +94,18 @@ public async Task TestClientAndServerVerified() { Skip.IfNot(_sslEnv.IsSslConfigured, "SSL_CERTS_DIR and/or PASSWORD are not configured, skipping test"); - string certPath = _sslEnv.CertPath; - Assert.True(File.Exists(certPath)); - ConnectionFactory cf = CreateConnectionFactory(); cf.Port = 5671; cf.Ssl.ServerName = _sslEnv.Hostname; - cf.Ssl.CertPath = certPath; + cf.Ssl.CertPath = _sslEnv.CertDirectPath; cf.Ssl.CertPassphrase = _sslEnv.CertPassphrase; cf.Ssl.Enabled = true; await SendReceiveAsync(cf); } - // rabbitmq/rabbitmq-dotnet-client#46, also #44 and #45 [SkippableFact] - public async Task TestNoClientCertificate() + public async Task TestWithClientCertificate() { Skip.IfNot(_sslEnv.IsSslConfigured, "SSL_CERTS_DIR and/or PASSWORD are not configured, skipping test"); @@ -111,7 +113,8 @@ public async Task TestNoClientCertificate() cf.Port = 5671; cf.Ssl = new SslOption() { - CertPath = null, + CertPath = _sslEnv.CertDirectPath, + CertPassphrase = _sslEnv.CertPassphrase, Enabled = true, ServerName = _sslEnv.Hostname, Version = SslProtocols.None, @@ -123,6 +126,31 @@ public async Task TestNoClientCertificate() await SendReceiveAsync(cf); } +#if NET + [SkippableFact] + public async Task TestWithClientCertificateSignedByIntermediate() + { + Skip.IfNot(_sslEnv.IsSslConfigured, "SSL_CERTS_DIR and/or PASSWORD are not configured, skipping test"); + + Assert.True(File.Exists(_sslEnv.CertIntermediatePath)); + + X509Certificate2 clientCertificate = new(_sslEnv.CertIntermediatePath, _sslEnv.CertPassphrase); + X509Certificate2 intermediateCaCertificate = new(_sslEnv.CertIntermediateCaPath); + X509Certificate2Collection intermediateCertificates = new(intermediateCaCertificate); + + ConnectionFactory cf = CreateConnectionFactory(); + cf.Port = 5671; + cf.Ssl.Enabled = true; + cf.Ssl.ClientCertificateContext = SslStreamCertificateContext.Create(clientCertificate, intermediateCertificates); + cf.Ssl.ServerName = _sslEnv.Hostname; + cf.Ssl.AcceptablePolicyErrors = + SslPolicyErrors.RemoteCertificateNotAvailable | + SslPolicyErrors.RemoteCertificateNameMismatch; + + await SendReceiveAsync(cf); + } +#endif + private async Task SendReceiveAsync(ConnectionFactory connectionFactory) { await using IConnection conn = await CreateConnectionAsyncWithRetries(connectionFactory); diff --git a/projects/Test/SequentialIntegration/TestHeartbeats.cs b/projects/Test/SequentialIntegration/TestHeartbeats.cs index 520cdbfbcf..8709a35462 100644 --- a/projects/Test/SequentialIntegration/TestHeartbeats.cs +++ b/projects/Test/SequentialIntegration/TestHeartbeats.cs @@ -85,7 +85,7 @@ public async Task TestThatHeartbeatWriterWithTLSEnabledAsync() cf.AutomaticRecoveryEnabled = false; cf.Ssl.ServerName = sslEnv.Hostname; - cf.Ssl.CertPath = sslEnv.CertPath; + cf.Ssl.CertPath = sslEnv.CertDirectPath; cf.Ssl.CertPassphrase = sslEnv.CertPassphrase; cf.Ssl.Enabled = true;