diff --git a/src/NATS.Client.Core/Internal/SslStreamConnection.cs b/src/NATS.Client.Core/Internal/SslStreamConnection.cs index 75c25c763..1661f3a73 100644 --- a/src/NATS.Client.Core/Internal/SslStreamConnection.cs +++ b/src/NATS.Client.Core/Internal/SslStreamConnection.cs @@ -170,11 +170,25 @@ private SslClientAuthenticationOptions SslClientAuthenticationOptions(NatsUri ur rcsCb = RcsCbCaCertChain; } +#if NET8_0_OR_GREATER + SslStreamCertificateContext? streamCertificateContext = null; + if (_tlsCerts?.ClientCerts is { Count: >= 1 }) + { + streamCertificateContext = SslStreamCertificateContext.Create( + _tlsCerts.ClientCerts[0], + _tlsCerts.ClientCerts); + } +#endif + var options = new SslClientAuthenticationOptions { TargetHost = uri.Host, EnabledSslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13, ClientCertificates = _tlsCerts?.ClientCerts, +#if NET8_0_OR_GREATER + ClientCertificateContext = streamCertificateContext, + CertificateChainPolicy = _tlsOpts.CertificateChainPolicy, +#endif LocalCertificateSelectionCallback = lcsCb, RemoteCertificateValidationCallback = rcsCb, CertificateRevocationCheckMode = _tlsOpts.CertificateRevocationCheckMode, diff --git a/src/NATS.Client.Core/Internal/TlsCerts.cs b/src/NATS.Client.Core/Internal/TlsCerts.cs index 2cd533740..8f1cceb1b 100644 --- a/src/NATS.Client.Core/Internal/TlsCerts.cs +++ b/src/NATS.Client.Core/Internal/TlsCerts.cs @@ -1,5 +1,7 @@ using System.Runtime.InteropServices; +using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; +using System.Text; namespace NATS.Client.Core.Internal; @@ -42,26 +44,33 @@ public static async ValueTask FromNatsTlsOptsAsync(NatsTlsOpts tlsOpts } // client certificates - var clientCert = tlsOpts switch + var clientCertsProvider = tlsOpts switch { - { CertFile: not null, KeyFile: not null } => X509Certificate2.CreateFromPemFile(tlsOpts.CertFile, tlsOpts.KeyFile), - { LoadClientCert: not null } => await tlsOpts.LoadClientCert().ConfigureAwait(false), + { CertFile: not null, KeyFile: not null } => NatsTlsOpts.LoadClientCertFromPemFile(tlsOpts.CertFile, tlsOpts.KeyFile), + { LoadClientCert: not null } => tlsOpts.LoadClientCert, _ => null, }; - if (clientCert != null) + var clientCerts = clientCertsProvider != null ? await clientCertsProvider().ConfigureAwait(false) : null; + + if (clientCerts != null) { // On Windows, ephemeral keys/certificates do not work with schannel. e.g. unless stored in certificate store. // https://github.com/dotnet/runtime/issues/66283#issuecomment-1061014225 // https://github.com/dotnet/runtime/blob/380a4723ea98067c28d54f30e1a652483a6a257a/src/libraries/System.Net.Security/tests/FunctionalTests/TestHelper.cs#L192-L197 if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { - var ephemeral = clientCert; - clientCert = new X509Certificate2(clientCert.Export(X509ContentType.Pfx)); - ephemeral.Dispose(); + var windowsCerts = new X509Certificate2Collection(); + foreach (var ephemeralCert in clientCerts) + { + windowsCerts.Add(new X509Certificate2(ephemeralCert.Export(X509ContentType.Pfx))); + ephemeralCert.Dispose(); + } + + clientCerts = windowsCerts; } - tlsCerts.ClientCerts = new X509Certificate2Collection(clientCert); + tlsCerts.ClientCerts = clientCerts; } return tlsCerts; diff --git a/src/NATS.Client.Core/NatsTlsOpts.cs b/src/NATS.Client.Core/NatsTlsOpts.cs index ecd22e5e7..4a5fb044f 100644 --- a/src/NATS.Client.Core/NatsTlsOpts.cs +++ b/src/NATS.Client.Core/NatsTlsOpts.cs @@ -1,3 +1,5 @@ +using System.Net.Security; +using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using NATS.Client.Core.Internal; @@ -62,7 +64,12 @@ public sealed record NatsTlsOpts /// /// Callback that loads Client Certificate /// - public Func>? LoadClientCert { get; init; } + /// + /// Callback may return multiple certificates, in which case the first + /// certificate is used as the client certificate and the rest are used as intermediates. + /// Using intermediate certificates is only supported on targets .NET 8 and above. + /// + public Func>? LoadClientCert { get; init; } /// /// String or file path to PEM-encoded X509 CA Certificate @@ -81,23 +88,43 @@ public sealed record NatsTlsOpts /// One of the values in . The default is . public X509RevocationMode CertificateRevocationCheckMode { get; init; } + /// + /// Gets or sets an optional customized policy for remote certificate + /// validation. If not , + /// and + /// are ignored. + /// + /// This option is only available in .NET 8 and above. + public X509ChainPolicy? CertificateChainPolicy { get; init; } + /// TLS mode to use during connection public TlsMode Mode { get; init; } internal bool HasTlsCerts => CertFile != default || KeyFile != default || LoadClientCert != default || CaFile != default || LoadCaCerts != default; /// - /// Helper method to load a Client Certificate from a pem-encoded string + /// Helper method to load a client certificate and its key from PEM-encoded texts. /// - public static Func> LoadClientCertFromPem(string certPem, string keyPem) + /// Text of PEM-encoded certificates + /// Text of PEM-encoded key + /// Returns a callback that will return a collection of certificates + /// + /// Client certificate string may contain multiple certificates, in which case the first + /// certificate is used as the client certificate and the rest are used as intermediates. + /// Using intermediate certificates is only supported on targets .NET 8 and above. + /// + public static Func> LoadClientCertFromPem(string certPem, string keyPem) { - var clientCert = X509Certificate2.CreateFromPem(certPem, keyPem); - return () => ValueTask.FromResult(clientCert); + var certificateCollection = LoadCertsFromMultiPem(certPem, keyPem); + + return () => ValueTask.FromResult(certificateCollection); } /// - /// Helper method to load CA Certificates from a pem-encoded string + /// Helper method to load CA certificates from a PEM-encoded text. /// + /// Text of PEM-encoded CA certificates + /// Returns a callback that will return a collection of CA certificates public static Func> LoadCaCertsFromPem(string caPem) { var caCerts = new X509Certificate2Collection(); @@ -105,6 +132,18 @@ public static Func> LoadCaCertsFromPem(str return () => ValueTask.FromResult(caCerts); } + /// + /// Helper method to load a client certificates and its key from PEM-encoded files + /// + internal static Func> LoadClientCertFromPemFile(string certPemFile, string keyPemFile) + { + var certPem = File.ReadAllText(certPemFile); + var keyPem = File.ReadAllText(keyPemFile); + var certificateCollection = LoadCertsFromMultiPem(certPem, keyPem); + + return () => ValueTask.FromResult(certificateCollection); + } + internal TlsMode EffectiveMode(NatsUri uri) => Mode switch { TlsMode.Auto => HasTlsCerts || uri.Uri.Scheme.ToLower() == "tls" ? TlsMode.Require : TlsMode.Prefer, @@ -116,4 +155,33 @@ internal bool TryTls(NatsUri uri) var effectiveMode = EffectiveMode(uri); return effectiveMode is TlsMode.Require or TlsMode.Prefer; } + + /// + /// Helper method to load certificates from a PEM-encoded text. + /// + private static X509Certificate2Collection LoadCertsFromMultiPem(ReadOnlySpan certPem, ReadOnlySpan keyPem) + { + var multiPemCertificateCollection = new X509Certificate2Collection(); + var addKey = true; + + while (PemEncoding.TryFind(certPem, out var fields)) + { + X509Certificate2 certificate; + + if (addKey) + { + certificate = X509Certificate2.CreateFromPem(certPem, keyPem); + addKey = false; + } + else + { + certificate = X509Certificate2.CreateFromPem(certPem); + } + + multiPemCertificateCollection.Add(certificate); + certPem = certPem[fields.Location.End..]; + } + + return multiPemCertificateCollection; + } } diff --git a/tests/NATS.Client.Core.Tests/NATS.Client.Core.Tests.csproj b/tests/NATS.Client.Core.Tests/NATS.Client.Core.Tests.csproj index 3a48f2f9d..420d82e11 100644 --- a/tests/NATS.Client.Core.Tests/NATS.Client.Core.Tests.csproj +++ b/tests/NATS.Client.Core.Tests/NATS.Client.Core.Tests.csproj @@ -23,6 +23,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all + diff --git a/tests/NATS.Client.Core.Tests/TlsCertsTest.cs b/tests/NATS.Client.Core.Tests/TlsCertsTest.cs index 016d60918..77495a72b 100644 --- a/tests/NATS.Client.Core.Tests/TlsCertsTest.cs +++ b/tests/NATS.Client.Core.Tests/TlsCertsTest.cs @@ -1,6 +1,8 @@ +using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; +using System.Text.RegularExpressions; namespace NATS.Client.Core.Tests; @@ -73,11 +75,48 @@ static async Task ValidateAsync(NatsTlsOpts opts) } [Fact] - public async Task Client_connect() + public async Task Load_client_cert_chain_and_key() { + const string clientCertFile = "resources/certs/chainedclient-cert.pem"; + const string clientKeyFile = "resources/certs/chainedclient-key.pem"; + + await ValidateAsync(new NatsTlsOpts + { + CertFile = clientCertFile, + KeyFile = clientKeyFile, + }); + await ValidateAsync(new NatsTlsOpts + { + LoadClientCert = NatsTlsOpts.LoadClientCertFromPem(await File.ReadAllTextAsync(clientCertFile), await File.ReadAllTextAsync(clientKeyFile)), + }); + + return; + + static async Task ValidateAsync(NatsTlsOpts opts) + { + var certs = await TlsCerts.FromNatsTlsOptsAsync(opts); + + Assert.NotNull(certs.ClientCerts); + Assert.Equal(3, certs.ClientCerts.Count); + + certs.ClientCerts[0].Subject.Should().Be("CN=leafclient"); + var encryptValue = certs.ClientCerts[0].GetRSAPublicKey()!.Encrypt(Encoding.UTF8.GetBytes("test123"), RSAEncryptionPadding.OaepSHA1); + var decryptValue = certs.ClientCerts[0].GetRSAPrivateKey()!.Decrypt(encryptValue, RSAEncryptionPadding.OaepSHA1); + Encoding.UTF8.GetString(decryptValue).Should().Be("test123"); + certs.ClientCerts[1].Subject.Should().Be("CN=intermediate02"); + certs.ClientCerts[2].Subject.Should().Be("CN=intermediate01"); + } + } + + [SkippableTheory] + [InlineData("resources/certs/client-cert.pem", "resources/certs/client-key.pem", 6)] + [InlineData("resources/certs/chainedclient-cert.pem", "resources/certs/chainedclient-key.pem", 8)] + public async Task Client_connect(string clientCertFile, string clientKeyFile, int minimumFrameworkVersion) + { + var version = int.Parse(Regex.Match(RuntimeInformation.FrameworkDescription, @"(\d+)\.\d").Groups[1].Value); + Skip.IfNot(version >= minimumFrameworkVersion, $"Requires .NET {minimumFrameworkVersion}"); + const string caFile = "resources/certs/ca-cert.pem"; - const string clientCertFile = "resources/certs/client-cert.pem"; - const string clientKeyFile = "resources/certs/client-key.pem"; await using var server = NatsServer.Start( new NullOutputHelper(), diff --git a/tests/NATS.Client.Core.Tests/resources/certs/ca-cert.pem b/tests/NATS.Client.Core.Tests/resources/certs/ca-cert.pem index e39dfa045..0f3a07f12 100644 --- a/tests/NATS.Client.Core.Tests/resources/certs/ca-cert.pem +++ b/tests/NATS.Client.Core.Tests/resources/certs/ca-cert.pem @@ -1,29 +1,29 @@ -----BEGIN CERTIFICATE----- -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 -----END CERTIFICATE----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/chainedclient-cert.pem b/tests/NATS.Client.Core.Tests/resources/certs/chainedclient-cert.pem new file mode 100644 index 000000000..f9939adf4 --- /dev/null +++ b/tests/NATS.Client.Core.Tests/resources/certs/chainedclient-cert.pem @@ -0,0 +1,89 @@ +-----BEGIN CERTIFICATE----- +MIIE/jCCAuagAwIBAgIUXpau3ENKB2jftYXqxQXuzfDi/J8wDQYJKoZIhvcNAQEL +BQAwGTEXMBUGA1UEAwwOaW50ZXJtZWRpYXRlMDIwHhcNMjQwMzI3MTI1NjQzWhcN +MzQwMzI1MTI1NjQzWjAVMRMwEQYDVQQDDApsZWFmY2xpZW50MIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEA7FdBSbNZ6zsX7tOf+N7PPAaL7/UHcHzLJcmu +wS7UFtTyolT6pc4AsJ3cpZI0CSmFPx28Tj23GNuh7MimTsz0Oh2VJPoAPq8JMt6w +SV6cw9p77VmUn53vXddFkbSAOHY+9qS10xBxecwE2DO2R3sbP78tSVyEXybseJGz +tG6cjETvW9pLaASQeW+0gE9YvHcS30NHBamCdqjyLnBB/vLpd63MrPnPYkw00wqT +37OIkrJjXbblqpJUHVr4wCZP+oMoJCxLnS4UZW4wlZOIJoYOBGAJjKhJJoiA7795 +r9jEfLBE8w7Hl95bj6es4Z9meZiw2B3Ri4+d3lS8OKshj6G20qjZu31EoLhVl7mD +V2nSyspgw4kCdeinffEgkRjQ7qL1/xIvY2LrXgut2E+n7Hwo1el4rqUo3SoVolqC +SMT9TSv02aI84qAzWVq2aHU8CmUhmibkOdkrG9WxsIF7UpmxXtrpXaJJw/sdd1eB +5Od6TJ8JkmImGtCzoAiqqfqCQqEMJr3ekjxbUcORM8MK7IlCgCR1JdUShIa4h3JS +9khaUztwvzrFikpoM8q6aLHfo6vPfupPW4tAZ2hZF70RXeru4rva6bDo1EoyByoB +oZEdsJSH1MHa3PymtZZEOJPYj29L4wbyMXPxVe0jZef/Aa8HByg9PHo8QtvYuLYZ +noppKxsCAwEAAaNCMEAwHQYDVR0OBBYEFJlZvUGesJCbrUG89gWibk5LooV5MB8G +A1UdIwQYMBaAFEFtChEQsh0MoTB6nchngGgdUqYEMA0GCSqGSIb3DQEBCwUAA4IC +AQBqghQJb6xnm8+j2encnlJk3gnhiTHFX+4F0vYxgFYByzr2RTXr5qUXzlCNght4 +XIZ5gJMfKuGaQSmDgLO5Q0+PyNnkIEqowrBXFoUKXYcl45st4uOnsTLn9dbctRYX +yXeQJ7hlyFjiaoJczH7RwXAfl6nvffSI7NJihZnQykT9fACsnSKL7FxCTXXpeMQD +TpLeDMBdmGRhKqo17KFKNDh+Mxgefhuyhn+TS6oUo5DKMLzEiL7V81MEA+B2754k +0PBGnwi0ChJKQ4Ljr4XTvAGvm9Kl2VxhrbNoNTs+Qc44Xp4GSLBVIR1U8LZUrN7b +JVZotrBOxYHfKVz49eh8WiTpniy9ZuT+bVyPD4tL76VDCRjMgOabecVabSu/nS9V +jkofv/eGSztlYMPJtnRJ5xkkmubfwM0qQUMEiZlHT557qdRWCcqcv9weM2uU+xOH +R8aKt8lnxVuOHhZGa8j/Kub/cj8g010+D1Cj/n/c796cYu1BK1PlUpaVdBJW5T6Q +Bgyu3OK1U6X4HXFXgBIV3R083IciwbDEeyExgmvzmAhlEQZsql6y2JLjYDCY67sd +7G9vak0q0EmtVQY5OHbyuiMMh/5MuUigfGjPGfFZyb8lS/UOS88vwdygKY4NlpMn +RkszIw6AP+ZR3RWV75RIzZzTHJZkDIRNDj+AighzvAphTQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFHTCCAwWgAwIBAgIUPOSi6gfOJ5FX3wBkP6T2FCQXRKwwDQYJKoZIhvcNAQEL +BQAwGTEXMBUGA1UEAwwOaW50ZXJtZWRpYXRlMDEwHhcNMjQwMzI3MTI1NjQyWhcN +MzQwMzI1MTI1NjQyWjAZMRcwFQYDVQQDDA5pbnRlcm1lZGlhdGUwMjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMOTd4fKGKQAHskxc+E4klqIT853mhoj +cLk+6NUpyf6ecKCSVUcYL/Yfm0TesrhW1qmJkWML7cDHaXJ+DDOKAxZYp/nFvbBS +AHBeLmxHzJMlsoG7Y9pPwh80vXBQRUgx46/ySyKt8DRnlFRBc4oJr6WK6mKKBf+y +4QIpdNXgzWyWnDKko+ZV+wtBt05EfcAWr7LrAYM+qxFPOVSeTeN2+06tbEZR2BtD +qBdA0p5F/x6e6/K21kANIbZH7txlVwe7w+Ch5iYXIpHKNc98C4qPnNZ97a2eL171 +oUlGbrRMQKjgeDafZ3st2I/t4uBw/3v9xJ8GSVKbIOPK2V0d3HNFdJXoFy3sLtK6 +pwwAY5ScDjxxpZE3FEU78fIM/EWyoWo6A95TIawnuAHKsiVKrxOPuK2O26koe+q8 +khzYl43UYcWLJUbdGil7CJCZoMMKL3UuKTTgR7CNUUP5OQ6qihLyDJOekE6XatMm +jRe68VmtPd12mNqy0irAkDP3xsJvl9Qcwc/9A4wFU0wb6FkRA7FfSD3qcb9V564T +4dUlsp1I89z7KL6X74EhoQotfNktarGqNz5RRvtoMjf8P/Y6zRDMAm1vV2EQElLZ +qBErd4clMHmbnDdt0oiTvy9G19i9OSAOTHMkDS3Mb64dnsR4U01ocN09QLFzYWTS +NxXvBdExe22PAgMBAAGjXTBbMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgGGMB0G +A1UdDgQWBBRBbQoRELIdDKEwep3IZ4BoHVKmBDAfBgNVHSMEGDAWgBTJdgGTIKYO +HHaWwXkLkkUkkkU50jANBgkqhkiG9w0BAQsFAAOCAgEANY0fnUaDyvIKpQGKAG84 +4eAKBfy/R1sP2RJRzFnVHbaW1xcINm9molGOAm0TA0kEowtYFew2unF97u3zTZgy +ddYesgQIp+jMCfVLa9xaOA8eOujBrxTottg6gA3Pof+WvySIkc6CSgtRjFGC4Cz2 +OasO06vg65UrZmbpqwc6vUtz5Pzgt7gqGnp+VkctQuisoD9hgGnLddbxIOAiGACt +66BO8ShlMG2ILIVyD2GWD2DK+5qMGd2iVmOlx7aFsd8cMio5PFiOpHJRLICl7qzN +/NLy5AJzdOIZ43ZJNEmQS0xoK6dN0R2Z2QSC1vClFhDP6fC+WCJBWgh1nYrtSnO1 +aaJukfTp/nOJFiRiIUoKteu8ip37mWGvDqyaNONzxgeuNl+02piYOTcdKTLbqrQ7 +VJs9ZV6VGWL7SyQRsHotnkZzw/MpiTPNih8KT6eIFDZEQC0jGAY1dCdoPS541kYY +XQll7ZzONdKze22mBBtggOWL96YzKTThjPz/1PtELSwjBDZohkC/jwtxJxPPCCCp +6/nv/XqUP9F5uxu2dvXcwXpNKgvBQ+pRphNb8MNZAzZyX+ES75uDL76HuxFalRhr +925O9JUvFQoJtKrt+X7XmSap6QEgtrPPGc8YOcYFm7ZIsoGkLR80UBB0gGEMiqIM +gNqJp73YSxuN7E+nPIcYi/Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFETCCAvmgAwIBAgIUJbHWO3BLg9UcxXtxJWSFuGobwFkwDQYJKoZIhvcNAQEL +BQAwDTELMAkGA1UEAwwCY2EwHhcNMjQwMzI3MTI1NjQxWhcNMzQwMzI1MTI1NjQx +WjAZMRcwFQYDVQQDDA5pbnRlcm1lZGlhdGUwMTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJCYnhCV+9uxoLHtjnDJ5ZUpLNUCd9erWWif6g29FVmp2aSM +tj7jL2HMsahpCU802P+PdsTDhsygzkUyWunO+D/+jWDJJOvZKBIUmHPnSVpBtQDc +mi4fqvngiGa3Pwx8U9URJP2AUuBqEUPspgsg0Nr09/WzJCElXVVqzh1Cblccr7KD +R5B0BymBSAIxyH0YDY5+DzUQTKAKQT0imIQA5SE8JqVxqPJo0mEMQFTyRlRG0Y0D +qBL6gYlrcUoua/EHqrR8xwCaZC6ibTOr6eg6/mgPBfnqQX4by+hA3J/niJBa/YUG +Iu+J64lKf02MXYGo1TOS5T2i8MSqGu93k5rulDHR5wWOFyAiKqUueC237S/RlRsd +MRxKEIB7PcoYn30bugHoHmAZZYDmG0mjnYEPZDlgmTIacGpgnCRPb1fv2+EBjnlr +xRN5iRMF8c4bRx8CBnSc/3inj5Xo72WMAIlntu6L0uv8mv1fywOI87kfno1Sandd +PH4Fv1B1C1NTLvitu31SzaOolhfXEreezz4k5njyzFR//Hs6x4YucxGFadkQieQN +z6W7oFkysMLMfR1XqxBFtPTYv+tCmB9CuDJqyKbKVAvP9bBINwxonHPKXY2AAW4R +iwhwEp0Ut9Ihu/eXmcpe0VJo2NtFjoQ5InmSvko9djZO2s6svowMRUoGy9lNAgMB +AAGjXTBbMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgGGMB0GA1UdDgQWBBTJdgGT +IKYOHHaWwXkLkkUkkkU50jAfBgNVHSMEGDAWgBTdKnIqsIQL44dltqE1+aFtjASH +2TANBgkqhkiG9w0BAQsFAAOCAgEAr4QKagkT+p4byN2+zfJzfqxHhLxpJeUlSX52 +tLa9QEMapTWH2eTr8m49rmf0nDKT8ADWr4ECNthwrECmIULmPiS+w1tqbzUBs6N5 +Gj+FozVZML2gh4fQbchJAadSN5+R8HVorVW/BBI4ishE+daPWNtGX88XSMp8fbAu +660M5EmXASr0AXDfyMiTu0uhKJDbCEvCFN/4PXx5/Xfh9Qn5PYg12A3r8KPqhy4a +4MNScw028AMiD5KwTlRY0tF0RJWAVtjCmJ5X8cUf0jZcdOXB0JX6NbcVkxfqBfnL +zT6mzcrFLfrsOFHL6KqnRuDxKuCgXqtEZi5jH1ShHjbp3T8XzpNpYOH7qNmYPSSD +FpPdJvvQTbFPBQyLbExa1M93QZHO+VfzyNHN6XGdziagex3YzqUkux6Kw/NWE4PG +gyidWsEhn8csFPCTWzrhnqml5qOhqaPULu0tnEZelihkArd0FvFaQnRmU5/WANOE +mTXogM18kaYrouTqOpbazm5t+8clpnk70D4yZQUrm26ANO9cIl35s+aF9dpRpwbX +yAKavBmdiOAF1bml2aiJCEZjxUs/RFsak7cpYmLfYiajm04MB8nTiZTl63Spx0gK +aGZ/GHuNX4VTygsZaJdLma2V7CD/9EysznChtUQYm7ToykjS/OVa4Dz3r/ncCNoE +605ahco= +-----END CERTIFICATE----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/chainedclient-key.pem b/tests/NATS.Client.Core.Tests/resources/certs/chainedclient-key.pem new file mode 100644 index 000000000..487633769 --- /dev/null +++ b/tests/NATS.Client.Core.Tests/resources/certs/chainedclient-key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDsV0FJs1nrOxfu +05/43s88Bovv9QdwfMslya7BLtQW1PKiVPqlzgCwndylkjQJKYU/HbxOPbcY26Hs +yKZOzPQ6HZUk+gA+rwky3rBJXpzD2nvtWZSfne9d10WRtIA4dj72pLXTEHF5zATY +M7ZHexs/vy1JXIRfJux4kbO0bpyMRO9b2ktoBJB5b7SAT1i8dxLfQ0cFqYJ2qPIu +cEH+8ul3rcys+c9iTDTTCpPfs4iSsmNdtuWqklQdWvjAJk/6gygkLEudLhRlbjCV +k4gmhg4EYAmMqEkmiIDvv3mv2MR8sETzDseX3luPp6zhn2Z5mLDYHdGLj53eVLw4 +qyGPobbSqNm7fUSguFWXuYNXadLKymDDiQJ16Kd98SCRGNDuovX/Ei9jYuteC63Y +T6fsfCjV6XiupSjdKhWiWoJIxP1NK/TZojzioDNZWrZodTwKZSGaJuQ52Ssb1bGw +gXtSmbFe2uldoknD+x13V4Hk53pMnwmSYiYa0LOgCKqp+oJCoQwmvd6SPFtRw5Ez +wwrsiUKAJHUl1RKEhriHclL2SFpTO3C/OsWKSmgzyrposd+jq89+6k9bi0BnaFkX +vRFd6u7iu9rpsOjUSjIHKgGhkR2wlIfUwdrc/Ka1lkQ4k9iPb0vjBvIxc/FV7SNl +5/8BrwcHKD08ejxC29i4thmeimkrGwIDAQABAoICABBoED6zBiN3wzYPl9PZd85l +b/J08pLC/wE9CnYbr5p0JvHQ72NyNQcNtmMCDr2yFa9ne4p860h8+rUqyqy+upeM +NS3PcxPm578RyXAWctB/ysmTxeb8ukCr8IboXlxNDRrnHT4tLotzd8Sgdl9o8t/O +gDDPDNtkItdN2glFAnYUVP9t3H04j+T2NbQQjgrrQzKfg38noMhm+wTxQwuVRlLK +DGLXpqdeve4GlnRZjLoOSyqWx0O7i75L8ee44SV1VGSKdKdRKxZNe27uwm1WMgPo +vND4X7eek0DRbHuiEyXKwMaUuJNY2sdSrwQsohr/2ArwqvrCugVUoYpXiuljIwND +kRCHobKnVvnHGB6R2uX5lhjZ5SR7d6fz5yk7RA7hbRoCiMzWW/6qA1UanthSy7Yv +UFtvqSBkreAjdpVi+/Z3x7Pd2U9l0eCoMri2FLAyFXs3FqtWmdw+7DqDoXbYVol0 +3A9Pzv2TlYPINQcjDSfa+c1GdtxJMhH45JjQ0IEVH9fkRWqTAbZUjhiqv1xIX25N +vk/F+NEhGkyypHkS28msqpI51OjlNUbTQ/C+6PKpM+0PADXNLkInyQVXZWBoUotx +bhkGPQ8RjacLTePdvcghwpVfj9zJxJx/WS1ZrVDGF9jLRvw4Gut7+aFRU5wn0Q53 +Mq63ZOokOqsEH5c4lqsdAoIBAQD5NYWfALQEqrOg4xZZgJqaULF5S4ctEngnc95i +NRyoV2V725Hn78OcvPJ5sp6HeE41rtsinfGA/hFNBQX4Eki9QMsaOaRiVSXkFmDO +Zh9cZPXwxJ4iPAEGDv5PW9zkJiWrGuDwU5BwT/mFbfD8pynMOQmNYvOHNTvUukKk +Ln5tFybi6mrtPeSIDz18AgeeHIIWSgUtDMRLDjBC4ES6Lj1YagF1fbG7LFyC91Re +C/75O1BKFMUFDZPuk2H3eMZwMq4WeUjv7pik+AMHTCA6r1mvx+0zkJQclaKhOo5z +ahVvQpMlYpFbV19eBW+V8JHaoPLqOkk14zvz0Qi4oS334+a3AoIBAQDyx/brVdSd +vj3CJRkkRUF2pjr4VbR8uIiORnnptq5OAzbTa0pBOy/bkf3zOLDe06TDp3WYLMcm ++xqyr28b9SYKQH+L6dn9T5YSeLPK4dTu0ItO3FBFAR6mToUTQpLXB/UMuKxAKrxb +uk+cS2pjnqtpTLVE9Pdl8j3imNX/O0REHFTJzV04TzwYAWahEKhjGpZ7EoljB8yP +iipXaw6NBsbUheOlT8ucXPQzYJs+NUu58f9c/9M+33/iXkAsIr7UPDRsH9nZTz1T +w3Mvy6NKA+JFk/p0Tu90e/jSczc7Ubmz7K1PcMLzQi1QyqqONoe4a7CvuYXYhvgn +0pxys+0A0Nq9AoIBACguiA/+JgiGmZX8Z5Mg2Ey/bA45rl8HFlaOKTI+jBNcnCFf +YuQ51ZmFIbebpFIFhN7FBdJMEy+QR6vafn7kO9RACT9+QdIVFpnzPcKp1q6oHLuo +iDLO5/9ZFYooLrKer/4pxFEbuDNTwdDQzEWAko26OJ8ScF/BppcDPVGJqZrfW8bE +s17zVtDVXD2Nejr1L8h2QOVlpJTRgdiWnp5CbGPAG+Ic1TZvza7UQEc1ufPnq2d2 +d9n7uXmDTA2B7MUUdttqzOba2sPmtV5M2Pl9YoGkQ8vHqQn+2o0SivtzBGe/HUiu +3u8SZG8dg0Ny2aGdx+0aXsmQjQ8gCj7yxh2tInsCggEAIy9rz6t+xuW9WZe6zxDi +bemlfjwdjj3IPKZmIMMC+/dnSLix6EZFp1K/NTKwH3sY0+o/FrDWpAWcVu0p8ylS +PAYg9gwMNbQFEeRAWlTkYUAEEIfJcla5NG0IyEPLuDJFB3T0MdB/v+N+ii472vgx +627cjoPaHwI+icqQqQ7T0/MvLpf+vJxvHyOE1i7t2H8P9AI5uwp0URE7FbRERZgH +1OEanuizn5OxKIkFtrxOn0I9OiMxYFlP1WTHdB4M/gFDr6/mCKJ9Rth6pyCiJ6Xs +cx0BHT4bYgxdgVKFXKl5emQAshSrjEm4+46DrVylysqArtb6WOkmqc7SMaV14bpj +GQKCAQEA4S7ocOIrotyhobxSW40fbByZIIJuwQqNEAkP0oqpXkOvjlAfFhd6Q1TG +8wiig1exmtscm/OSw977G6nzCJP+68lsl8Ks9jqbRY4aZbafgq3S33jZtLz0Ba10 +Der9/42gwovk2tSYjdqrYurZNacOSvMpmDvbWxQ3gbi1lqdlXcVz5gG6//PkHGJL +k46SIGBGuhv24eDPOoegHusNUhFuqhkdS4DK49RuPWrdk0/ulwlX+rVmZ5iYKqTg +6eXAhj4aKfgsDixMOxUFAeFSmi0HKo/2Nu4jUVWFFpdBKlxzK9L/b3psF90V23// +TsB2K4Br2VbrsKJYr1awoJEOUw6S2A== +-----END PRIVATE KEY----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/client-cert.pem b/tests/NATS.Client.Core.Tests/resources/certs/client-cert.pem index 12f2355e0..7578f6a10 100644 --- a/tests/NATS.Client.Core.Tests/resources/certs/client-cert.pem +++ b/tests/NATS.Client.Core.Tests/resources/certs/client-cert.pem @@ -1,27 +1,29 @@ -----BEGIN CERTIFICATE----- -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 +uBrCLjOrcXh1Zgk1VWN40C6J -----END CERTIFICATE----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/client-key.pem b/tests/NATS.Client.Core.Tests/resources/certs/client-key.pem index 4a60250cc..c65f565b0 100644 --- a/tests/NATS.Client.Core.Tests/resources/certs/client-key.pem +++ b/tests/NATS.Client.Core.Tests/resources/certs/client-key.pem @@ -1,52 +1,52 @@ -----BEGIN PRIVATE KEY----- -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 -lKUoTwgaDe6CaEi3GC1M/SDoDp2y/g== +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 +byHEGnLKuR6aFPlrlmOErAe+AWrUE3w= -----END PRIVATE KEY----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/generate.sh b/tests/NATS.Client.Core.Tests/resources/certs/generate.sh old mode 100644 new mode 100755 index ced3bf46c..02821d26e --- a/tests/NATS.Client.Core.Tests/resources/certs/generate.sh +++ b/tests/NATS.Client.Core.Tests/resources/certs/generate.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash set -e @@ -7,6 +7,28 @@ set -e # export MSYS_NO_PATHCONV=1 # +function create_child_cert { + signing_cert_name=$1 + child_cert_name=$2 + is_ca=$3 + + openssl req -new -nodes -out "store/$child_cert_name.csr" -newkey rsa:4096 -keyout "store/$child_cert_name.key" -subj "/CN=$child_cert_name" + if [[ "$is_ca" == "true" ]]; then + # Use CA extensions for intermediate CA certificates + cat < "store/$child_cert_name.ext" +basicConstraints=CA:TRUE +keyUsage = digitalSignature, keyCertSign, cRLSign +EOF + openssl x509 -req -in "store/$child_cert_name.csr" -CA "store/$signing_cert_name.crt" -CAkey "store/$signing_cert_name.key" -CAcreateserial -out "store/$child_cert_name.crt" -days 3650 -sha256 -extfile "store/$child_cert_name.ext" + else + # For end-entity certificates (non-CAs) + openssl x509 -req -in "store/$child_cert_name.csr" -CA "store/$signing_cert_name.crt" -CAkey "store/$signing_cert_name.key" -CAcreateserial -out "store/$child_cert_name.crt" -days 3650 -sha256 + fi + openssl x509 -noout -text -in "store/$child_cert_name.crt" + cp "store/$child_cert_name.crt" "$child_cert_name-cert.pem" + cp "store/$child_cert_name.key" "$child_cert_name-key.pem" +} + rm -rf store mkdir store @@ -40,10 +62,22 @@ cp store/server.key server-key.pem echo ================================ echo CLIENT echo ================================ -openssl req -new -nodes -out store/client.csr -newkey rsa:4096 -keyout store/client.key -subj '/CN=client' -openssl x509 -req -in store/client.csr -CA store/ca.crt -CAkey store/ca.key -CAcreateserial -out store/client.crt -days 3650 -sha256 -openssl x509 -noout -text -in store/client.crt -cp store/client.crt client-cert.pem -cp store/client.key client-key.pem +create_child_cert ca client + +echo ================================ +echo CLIENT WITH CHAIN +echo ================================ +create_child_cert ca intermediate01 true +create_child_cert intermediate01 intermediate02 true +create_child_cert intermediate02 leafclient false +# create single cert file for chained client +cp store/leafclient.crt chainedclient-cert.pem +cp store/leafclient.key chainedclient-key.pem +cat store/intermediate02.crt >> chainedclient-cert.pem +cat store/intermediate01.crt >> chainedclient-cert.pem rm -rf store + +echo ================================ +echo DONE +echo ================================ diff --git a/tests/NATS.Client.Core.Tests/resources/certs/intermediate01-cert.pem b/tests/NATS.Client.Core.Tests/resources/certs/intermediate01-cert.pem new file mode 100644 index 000000000..63d4f482e --- /dev/null +++ b/tests/NATS.Client.Core.Tests/resources/certs/intermediate01-cert.pem @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFETCCAvmgAwIBAgIUJbHWO3BLg9UcxXtxJWSFuGobwFkwDQYJKoZIhvcNAQEL +BQAwDTELMAkGA1UEAwwCY2EwHhcNMjQwMzI3MTI1NjQxWhcNMzQwMzI1MTI1NjQx +WjAZMRcwFQYDVQQDDA5pbnRlcm1lZGlhdGUwMTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJCYnhCV+9uxoLHtjnDJ5ZUpLNUCd9erWWif6g29FVmp2aSM +tj7jL2HMsahpCU802P+PdsTDhsygzkUyWunO+D/+jWDJJOvZKBIUmHPnSVpBtQDc +mi4fqvngiGa3Pwx8U9URJP2AUuBqEUPspgsg0Nr09/WzJCElXVVqzh1Cblccr7KD +R5B0BymBSAIxyH0YDY5+DzUQTKAKQT0imIQA5SE8JqVxqPJo0mEMQFTyRlRG0Y0D +qBL6gYlrcUoua/EHqrR8xwCaZC6ibTOr6eg6/mgPBfnqQX4by+hA3J/niJBa/YUG +Iu+J64lKf02MXYGo1TOS5T2i8MSqGu93k5rulDHR5wWOFyAiKqUueC237S/RlRsd +MRxKEIB7PcoYn30bugHoHmAZZYDmG0mjnYEPZDlgmTIacGpgnCRPb1fv2+EBjnlr +xRN5iRMF8c4bRx8CBnSc/3inj5Xo72WMAIlntu6L0uv8mv1fywOI87kfno1Sandd +PH4Fv1B1C1NTLvitu31SzaOolhfXEreezz4k5njyzFR//Hs6x4YucxGFadkQieQN +z6W7oFkysMLMfR1XqxBFtPTYv+tCmB9CuDJqyKbKVAvP9bBINwxonHPKXY2AAW4R +iwhwEp0Ut9Ihu/eXmcpe0VJo2NtFjoQ5InmSvko9djZO2s6svowMRUoGy9lNAgMB +AAGjXTBbMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgGGMB0GA1UdDgQWBBTJdgGT +IKYOHHaWwXkLkkUkkkU50jAfBgNVHSMEGDAWgBTdKnIqsIQL44dltqE1+aFtjASH +2TANBgkqhkiG9w0BAQsFAAOCAgEAr4QKagkT+p4byN2+zfJzfqxHhLxpJeUlSX52 +tLa9QEMapTWH2eTr8m49rmf0nDKT8ADWr4ECNthwrECmIULmPiS+w1tqbzUBs6N5 +Gj+FozVZML2gh4fQbchJAadSN5+R8HVorVW/BBI4ishE+daPWNtGX88XSMp8fbAu +660M5EmXASr0AXDfyMiTu0uhKJDbCEvCFN/4PXx5/Xfh9Qn5PYg12A3r8KPqhy4a +4MNScw028AMiD5KwTlRY0tF0RJWAVtjCmJ5X8cUf0jZcdOXB0JX6NbcVkxfqBfnL +zT6mzcrFLfrsOFHL6KqnRuDxKuCgXqtEZi5jH1ShHjbp3T8XzpNpYOH7qNmYPSSD +FpPdJvvQTbFPBQyLbExa1M93QZHO+VfzyNHN6XGdziagex3YzqUkux6Kw/NWE4PG +gyidWsEhn8csFPCTWzrhnqml5qOhqaPULu0tnEZelihkArd0FvFaQnRmU5/WANOE +mTXogM18kaYrouTqOpbazm5t+8clpnk70D4yZQUrm26ANO9cIl35s+aF9dpRpwbX +yAKavBmdiOAF1bml2aiJCEZjxUs/RFsak7cpYmLfYiajm04MB8nTiZTl63Spx0gK +aGZ/GHuNX4VTygsZaJdLma2V7CD/9EysznChtUQYm7ToykjS/OVa4Dz3r/ncCNoE +605ahco= +-----END CERTIFICATE----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/intermediate01-key.pem b/tests/NATS.Client.Core.Tests/resources/certs/intermediate01-key.pem new file mode 100644 index 000000000..f1410368a --- /dev/null +++ b/tests/NATS.Client.Core.Tests/resources/certs/intermediate01-key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +n1U6RduXmVtr7viNAu3CaeWgTT1WneFD +-----END PRIVATE KEY----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/intermediate02-cert.pem b/tests/NATS.Client.Core.Tests/resources/certs/intermediate02-cert.pem new file mode 100644 index 000000000..d89256dd9 --- /dev/null +++ b/tests/NATS.Client.Core.Tests/resources/certs/intermediate02-cert.pem @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFHTCCAwWgAwIBAgIUPOSi6gfOJ5FX3wBkP6T2FCQXRKwwDQYJKoZIhvcNAQEL +BQAwGTEXMBUGA1UEAwwOaW50ZXJtZWRpYXRlMDEwHhcNMjQwMzI3MTI1NjQyWhcN +MzQwMzI1MTI1NjQyWjAZMRcwFQYDVQQDDA5pbnRlcm1lZGlhdGUwMjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMOTd4fKGKQAHskxc+E4klqIT853mhoj +cLk+6NUpyf6ecKCSVUcYL/Yfm0TesrhW1qmJkWML7cDHaXJ+DDOKAxZYp/nFvbBS +AHBeLmxHzJMlsoG7Y9pPwh80vXBQRUgx46/ySyKt8DRnlFRBc4oJr6WK6mKKBf+y +4QIpdNXgzWyWnDKko+ZV+wtBt05EfcAWr7LrAYM+qxFPOVSeTeN2+06tbEZR2BtD +qBdA0p5F/x6e6/K21kANIbZH7txlVwe7w+Ch5iYXIpHKNc98C4qPnNZ97a2eL171 +oUlGbrRMQKjgeDafZ3st2I/t4uBw/3v9xJ8GSVKbIOPK2V0d3HNFdJXoFy3sLtK6 +pwwAY5ScDjxxpZE3FEU78fIM/EWyoWo6A95TIawnuAHKsiVKrxOPuK2O26koe+q8 +khzYl43UYcWLJUbdGil7CJCZoMMKL3UuKTTgR7CNUUP5OQ6qihLyDJOekE6XatMm +jRe68VmtPd12mNqy0irAkDP3xsJvl9Qcwc/9A4wFU0wb6FkRA7FfSD3qcb9V564T +4dUlsp1I89z7KL6X74EhoQotfNktarGqNz5RRvtoMjf8P/Y6zRDMAm1vV2EQElLZ +qBErd4clMHmbnDdt0oiTvy9G19i9OSAOTHMkDS3Mb64dnsR4U01ocN09QLFzYWTS +NxXvBdExe22PAgMBAAGjXTBbMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgGGMB0G +A1UdDgQWBBRBbQoRELIdDKEwep3IZ4BoHVKmBDAfBgNVHSMEGDAWgBTJdgGTIKYO +HHaWwXkLkkUkkkU50jANBgkqhkiG9w0BAQsFAAOCAgEANY0fnUaDyvIKpQGKAG84 +4eAKBfy/R1sP2RJRzFnVHbaW1xcINm9molGOAm0TA0kEowtYFew2unF97u3zTZgy +ddYesgQIp+jMCfVLa9xaOA8eOujBrxTottg6gA3Pof+WvySIkc6CSgtRjFGC4Cz2 +OasO06vg65UrZmbpqwc6vUtz5Pzgt7gqGnp+VkctQuisoD9hgGnLddbxIOAiGACt +66BO8ShlMG2ILIVyD2GWD2DK+5qMGd2iVmOlx7aFsd8cMio5PFiOpHJRLICl7qzN +/NLy5AJzdOIZ43ZJNEmQS0xoK6dN0R2Z2QSC1vClFhDP6fC+WCJBWgh1nYrtSnO1 +aaJukfTp/nOJFiRiIUoKteu8ip37mWGvDqyaNONzxgeuNl+02piYOTcdKTLbqrQ7 +VJs9ZV6VGWL7SyQRsHotnkZzw/MpiTPNih8KT6eIFDZEQC0jGAY1dCdoPS541kYY +XQll7ZzONdKze22mBBtggOWL96YzKTThjPz/1PtELSwjBDZohkC/jwtxJxPPCCCp +6/nv/XqUP9F5uxu2dvXcwXpNKgvBQ+pRphNb8MNZAzZyX+ES75uDL76HuxFalRhr +925O9JUvFQoJtKrt+X7XmSap6QEgtrPPGc8YOcYFm7ZIsoGkLR80UBB0gGEMiqIM +gNqJp73YSxuN7E+nPIcYi/Q= +-----END CERTIFICATE----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/intermediate02-key.pem b/tests/NATS.Client.Core.Tests/resources/certs/intermediate02-key.pem new file mode 100644 index 000000000..f3965bbf9 --- /dev/null +++ b/tests/NATS.Client.Core.Tests/resources/certs/intermediate02-key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDDk3eHyhikAB7J +MXPhOJJaiE/Od5oaI3C5PujVKcn+nnCgklVHGC/2H5tE3rK4VtapiZFjC+3Ax2ly +fgwzigMWWKf5xb2wUgBwXi5sR8yTJbKBu2PaT8IfNL1wUEVIMeOv8ksirfA0Z5RU +QXOKCa+liupiigX/suECKXTV4M1slpwypKPmVfsLQbdORH3AFq+y6wGDPqsRTzlU +nk3jdvtOrWxGUdgbQ6gXQNKeRf8enuvyttZADSG2R+7cZVcHu8PgoeYmFyKRyjXP +fAuKj5zWfe2tni9e9aFJRm60TECo4Hg2n2d7LdiP7eLgcP97/cSfBklSmyDjytld +HdxzRXSV6Bct7C7SuqcMAGOUnA48caWRNxRFO/HyDPxFsqFqOgPeUyGsJ7gByrIl +Sq8Tj7itjtupKHvqvJIc2JeN1GHFiyVG3RopewiQmaDDCi91Lik04EewjVFD+TkO +qooS8gyTnpBOl2rTJo0XuvFZrT3ddpjastIqwJAz98bCb5fUHMHP/QOMBVNMG+hZ +EQOxX0g96nG/VeeuE+HVJbKdSPPc+yi+l++BIaEKLXzZLWqxqjc+UUb7aDI3/D/2 +Os0QzAJtb1dhEBJS2agRK3eHJTB5m5w3bdKIk78vRtfYvTkgDkxzJA0tzG+uHZ7E +eFNNaHDdPUCxc2Fk0jcV7wXRMXttjwIDAQABAoICABAKZcjaL1gwIaubEJKIgHRy +w/zpUVcoe06DlYwk2nTgNi5CokJA/m9fhe10SHtBtWcqqc/SWCSHa84gqXaGsMch +7AZajLrL7E5LDeACqYmTaMcm1piUEcCxI4J1NaF8ugchxmjTPvrFWLnqXllpfvcD +Du3tvR03j33iZuXt2LC5z5jVvmhIurI10xzVFZfuJGihHrrO0TALwTt/+l/Cz/d9 +gNO+/bcKvwbH4ckVG54S0cOn8ahHi3F3B+Uas18mgXkd6Ob3NHYkUXKG4tlxUEnw +AnugGD7fwuPkJiCdNRvEwVyq3qK7OWJgqUrYPxQX1bW8nxc/3Zw2nx+khdgMenR2 +VgDU4BOepbcob4w5oefDmRQ4gB2aFTdIz+LwsT1ygVRDMyTurHH6Qlo8mQhkRXZK +eNj1U2DvpUQQkfYBK7dTZ1tuS4wBwGGdeOIEGbEGK+msRygTRhJONsHxazAzNr05 +y+wUXNpE845dCFvh+g29DlRXl1rg/xP+baA2pnMFnc/woao/jURvgafsCcwZJwju +0ACp/yJb1QHRajOoXn0ZXAwAKcwgFbHvrF/+nWwHfvAUOtwz2cnDEf7tjP8TQ/v1 +I/pdIC8QNyDBFlaWrrGxtTUJhnw1tMbHg+K2lkAOH7B8BpQshhrs02heyX1/L1+M +bfuXWD1aV/Z6uKkmeowJAoIBAQDsYSM0HqdcEWLsUVlwYmomQKmVqOTz9lgp9xHK +hd7UVgRGTS6oG9YGonbXna2xujJOGsDXSrchpE7vKj8s056Ewa0RFl+4kc00xmFd +ca8IS0B2uL8iCZLaYJqs8Z3XUPj0xVcL1plAySV6Ny9vr/WQZBFIESL4934vgZP9 ++2hmq1/96zr4ZffW2bVY0D2vD2TKJq6i16pjn0p9nYKogKn+G/YS7BxQl0mT2gl6 +ZqvB7ZPrvo2vR3CArfrqMQ0b7CFoTaWFSODS34WbESsnDkfMicnqlyGSiQtWJJqO +HgyD6ziBIkz3EAJq4qRuXqur1vDxwus8DzbUeeO7+H+1kwXnAoIBAQDTz0qx7HlA +d/+bwc5mLI19cvaW4stkOdz1mCyBQ/8cG18yRNOlwbeaa4d6QTEI878lxkbW5TF1 ++iErrpuCZWqHm1LZoQtNnigbZbaV5wlQziRpI0pdX8NlPAAvvWr289BsgabodjMI +Y+SCJbu7LAwO8H7OWO2p5UMY+bfxq7Vk6InuhiAERjFYtvBZYddrpkgcZhw3l7uZ +fjHMHGMsn5zCFNrMUdQoKc/Ww/uquYlSD0esxuruG7vcU7HA7pm/CfmUiAGELCh2 +3vqKDZ1wOZ/tBJCUEymnHGIULpOYauAmUiZuu1ZrEviD1K7gjRIKGHyxFb3FR5bY +P/yYVLVfshYZAoIBAD86NGpqkKWl2OoRUHUpPe+BeFsZ1DQVfruq5M1hRZtSbs5H +MuWwnG0l49gEy0Mw5OfTbCWqTJXpF1wN1twstsgX7i0V6QC7r0IglkaidAkp59JZ +1HZMTUWwdW8xKeFAPXdrmb8G5fNYWnf4bu3XCT5YJe869jnWKaCXbniPWPutd326 +AAoVbFfB4CojeXxsB6+y7R+NxHvlTc2P5jUgRVg9LnMdSO2dqgasWcCt2d+Dpv91 +9vwdhdBFuUoPWMxROxZlPpMKTWjadShnTT2jKj1h1eq0Bjzl/2xJWjYNf5eBwZl5 +DVFArQTeHtGO7SiH0+c3Fij4gNgQyoOrEq4E550CggEANF0I8Fev2jpQXOda6XOW +Py9OuxqygcK0V5sZVZPD2+UAceMGF/J+O5Td12GKh9YKqYINPU9IHQyLasst8tyz +q3bA0sC3lKbG748DxqdpbCqqYbuxxMfJ/JsKyMKhURARtOGQq+Oc1jQr5+kAMlO/ +X2ohT04440mkfuYtjXePzrSWdPt/qs7XoEEJxm8j3J8tMKglzbCbVmUWVommEwAa +tviE5wJL2uoLUeL9ssVPp5PTemlq5xbAKMYgKbxTEiGbLBc7mLt5/Xk+oyaeh4IX +gXchbxoVsBSaQrcJEiNJ6u9gRPvXb30vJxhLa4Q0s34+RWFEmyMJrciT3+0BMflK +8QKCAQEA6Gh27rNk4YnY2Xbyfbr2ao8qycuXAZcKXoyWnMuGqw04IUP4Uq4L+44y +lRs3R4CaaF9FiuL8UP5EhKb5zGwsWN/EuH0M87mkbbbxl7bIT5Osy5hvrK4JGHWH +tadbUdN0bGa5BSya9Yw0IYoZGCQTmEZDXkBTdelVNdqdvp6GNfinMlZ08JSFCdmq +thw6Sh+6H7sVuvrlEtV3Q5VByRDMeXP2nSb0ZzVAJGQ705orSVA1qIT4lsC6j3rS +6RFjC8qSg9HLZC79U23A8J/LANzTWHHDQcNWrsL0XNYUkB4Y2C8oP47uo3X4akaO +YnVWWsDe07c39iBqQxC/jvJDRmvOLg== +-----END PRIVATE KEY----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/leafclient-cert.pem b/tests/NATS.Client.Core.Tests/resources/certs/leafclient-cert.pem new file mode 100644 index 000000000..1d3c2ae50 --- /dev/null +++ b/tests/NATS.Client.Core.Tests/resources/certs/leafclient-cert.pem @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIE/jCCAuagAwIBAgIUXpau3ENKB2jftYXqxQXuzfDi/J8wDQYJKoZIhvcNAQEL +BQAwGTEXMBUGA1UEAwwOaW50ZXJtZWRpYXRlMDIwHhcNMjQwMzI3MTI1NjQzWhcN +MzQwMzI1MTI1NjQzWjAVMRMwEQYDVQQDDApsZWFmY2xpZW50MIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEA7FdBSbNZ6zsX7tOf+N7PPAaL7/UHcHzLJcmu +wS7UFtTyolT6pc4AsJ3cpZI0CSmFPx28Tj23GNuh7MimTsz0Oh2VJPoAPq8JMt6w +SV6cw9p77VmUn53vXddFkbSAOHY+9qS10xBxecwE2DO2R3sbP78tSVyEXybseJGz +tG6cjETvW9pLaASQeW+0gE9YvHcS30NHBamCdqjyLnBB/vLpd63MrPnPYkw00wqT +37OIkrJjXbblqpJUHVr4wCZP+oMoJCxLnS4UZW4wlZOIJoYOBGAJjKhJJoiA7795 +r9jEfLBE8w7Hl95bj6es4Z9meZiw2B3Ri4+d3lS8OKshj6G20qjZu31EoLhVl7mD +V2nSyspgw4kCdeinffEgkRjQ7qL1/xIvY2LrXgut2E+n7Hwo1el4rqUo3SoVolqC +SMT9TSv02aI84qAzWVq2aHU8CmUhmibkOdkrG9WxsIF7UpmxXtrpXaJJw/sdd1eB +5Od6TJ8JkmImGtCzoAiqqfqCQqEMJr3ekjxbUcORM8MK7IlCgCR1JdUShIa4h3JS +9khaUztwvzrFikpoM8q6aLHfo6vPfupPW4tAZ2hZF70RXeru4rva6bDo1EoyByoB +oZEdsJSH1MHa3PymtZZEOJPYj29L4wbyMXPxVe0jZef/Aa8HByg9PHo8QtvYuLYZ +noppKxsCAwEAAaNCMEAwHQYDVR0OBBYEFJlZvUGesJCbrUG89gWibk5LooV5MB8G +A1UdIwQYMBaAFEFtChEQsh0MoTB6nchngGgdUqYEMA0GCSqGSIb3DQEBCwUAA4IC +AQBqghQJb6xnm8+j2encnlJk3gnhiTHFX+4F0vYxgFYByzr2RTXr5qUXzlCNght4 +XIZ5gJMfKuGaQSmDgLO5Q0+PyNnkIEqowrBXFoUKXYcl45st4uOnsTLn9dbctRYX +yXeQJ7hlyFjiaoJczH7RwXAfl6nvffSI7NJihZnQykT9fACsnSKL7FxCTXXpeMQD +TpLeDMBdmGRhKqo17KFKNDh+Mxgefhuyhn+TS6oUo5DKMLzEiL7V81MEA+B2754k +0PBGnwi0ChJKQ4Ljr4XTvAGvm9Kl2VxhrbNoNTs+Qc44Xp4GSLBVIR1U8LZUrN7b +JVZotrBOxYHfKVz49eh8WiTpniy9ZuT+bVyPD4tL76VDCRjMgOabecVabSu/nS9V +jkofv/eGSztlYMPJtnRJ5xkkmubfwM0qQUMEiZlHT557qdRWCcqcv9weM2uU+xOH +R8aKt8lnxVuOHhZGa8j/Kub/cj8g010+D1Cj/n/c796cYu1BK1PlUpaVdBJW5T6Q +Bgyu3OK1U6X4HXFXgBIV3R083IciwbDEeyExgmvzmAhlEQZsql6y2JLjYDCY67sd +7G9vak0q0EmtVQY5OHbyuiMMh/5MuUigfGjPGfFZyb8lS/UOS88vwdygKY4NlpMn +RkszIw6AP+ZR3RWV75RIzZzTHJZkDIRNDj+AighzvAphTQ== +-----END CERTIFICATE----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/leafclient-key.pem b/tests/NATS.Client.Core.Tests/resources/certs/leafclient-key.pem new file mode 100644 index 000000000..487633769 --- /dev/null +++ b/tests/NATS.Client.Core.Tests/resources/certs/leafclient-key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +TsB2K4Br2VbrsKJYr1awoJEOUw6S2A== +-----END PRIVATE KEY----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/server-cert.pem b/tests/NATS.Client.Core.Tests/resources/certs/server-cert.pem index 0dca69ec7..82a89d4b1 100644 --- a/tests/NATS.Client.Core.Tests/resources/certs/server-cert.pem +++ b/tests/NATS.Client.Core.Tests/resources/certs/server-cert.pem @@ -1,30 +1,30 @@ -----BEGIN CERTIFICATE----- -MIIFGDCCAwCgAwIBAgIUbK1lPufy+a6PtLr6Clsu5GhTkwswDQYJKoZIhvcNAQEL -BQAwDTELMAkGA1UEAwwCY2EwHhcNMjMxMTA5MTQyNjMzWhcNMzMxMTA2MTQyNjMz +MIIFOTCCAyGgAwIBAgIUJbHWO3BLg9UcxXtxJWSFuGobwFcwDQYJKoZIhvcNAQEL +BQAwDTELMAkGA1UEAwwCY2EwHhcNMjQwMzI3MTI1NjM4WhcNMzQwMzI1MTI1NjM4 WjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDNN5CdHRR9p1gpd6sqFRRwdOYyAbDumvRvG+HcSy+VLl/CVhbfshtO -8zf2Pe9Zj0Ywxgkx1ooILzzTS/wXKXvakEc8IYD/KRKp8jStVhSOTk05vct4WrNi -RGTlZXdmRj1r/Hm6btZlnZbfqtdj5kBAS89lEUniqWsdxk15agBfi4Gx79IEu69B -0XzaN4d9Rhc3+O+qv7utglCriKRexh2B9PVXtCB3Djs4S17KyQUNHJKWwbRWJ2B2 -rby/ADY8W83Uk06BFNv4ST4npE3W1M5RaomM8jSLea4gP8b9ZAAhVR3ZTnRSaPjU -bnb3EkGf8NbszcYbttBCDseR5hpm0FQV6Ue8Wq2vMQLj9fBhB0EDG1QQYMvtIYJq -wf0BA+EOeMJSdt+8WbKqSowhawcVtIDR+FkkNfYSNRLLpkPPVQK3/bRr3ECtDxxn -5/RzhqjyXi3nYdkWDRWoKP7SUJ69/TQybyuK0LgrT3SUXE4TxBDCIa8ZDnMLtN05 -gwuWGlIeAnb7K7G8HZ9GV4uopgPTI3q9lYmGw/ZArZr7ONegnylER035DHnrTujy -FsmdvifJ3SVC/8aasrkTr58oYAWlAbtAfZez07k/uXB6xpXuBrCxuua3kpIbjAK6 -N/fu5ainHHd5fulS9g4Wd3cFS5lRokzc/vPrSW7PxuWHjp9RYvbbXQIDAQABo2kw -ZzAfBgNVHSMEGDAWgBR4XdOrzbH3nMaDgT+ROqXFMasyEjAJBgNVHRMEAjAAMAsG -A1UdDwQEAwIE8DAsBgNVHREEJTAjgglsb2NhbGhvc3SHBH8AAAGHEAAAAAAAAAAA -AAAAAAAAAAEwDQYJKoZIhvcNAQELBQADggIBAFSAyqIkye2t/wYe3s7+xNB8gd6t -5CCNUdv2JHzWIa26oiu3jXPBUXyoHuyLM/k64uqfqR9Vwig6X5EsnD1UG2Gw94Le -nMPNPctEEwi4GjXno7cKemcdBjuDrT97BXUD9ptdXKVJ59noSveQvR/gr9LkMo42 -WZLH8RGUuzn0KH6JHihwPotxKzxoTUmyO/M7O6UEYgA94goQTouRrFLMeemZPrl3 -9IvmwlYsiVAZyNqygGPENrr6JOTEL0Ol4bnh3KdO7yWCaJvSGC6F4ViEg+kFRUOC -zzdtxpgOS7RkkpZ041SnDn2IGtm8JkzUHo+qIU5X6NxUbQSU0wqFQVcseLG1AmW6 -6bWe2mR8cox+y8rk0b/om9m/e1pDjmXKAKSwNJ77WnGKcs2FS6PFi6pi4wdDrXIP -/zqkHOYlftKxTBgkR9J9hz3gECOQeKUpo9dZFEJJHAGAfZMQC2H73pCwz/kliwi+ -7IwoMS9pzGssRYbtRhYHWy1ZErRokSgBnDE381vUCYQMpDed+tKMjbv3camGZNNk -qpQAukZVKzV9BCrAFhUI/xTCzJ51Ec8Si/trnIGEAmJMHUwYEkuTVIbjRSS1TGr3 -Dc8PaCIq0gDkCyx0SUyOByD2lxHz9S7qQjy8VhKaQkqRLRPr6ewbZaih7RnYqQQt -3uhhts+hrn4lihEK +ggIKAoICAQD4wGbg2KwOFve9G16XLqrZEEAX5EOo9DSUpIN7F4ssP232TaXixWuM +I7zWO7EizH+/vVpezCP8iii8jqwNCh4U+UOlmz6D1WhXfgJhjddJu03o3Giilv+P +X0mqa6LdIFaYIbfVaVoKcpNbX2CP7uUg+/anS0ghw3h4pKhkuFxJuYzDyiFxDzvj +f3ZfVEd4lX6ZS87pvohdMnXEKuJp18rsDIg1ELjpHpwzPUCT+RBj5QAWzb1IP5jY +8lUpv6P9xD2bAk22vlYqniZOO2sZ23q0MOFwJ0coHasJcFfHzueVZ7xd5X50UNc6 +HKBO2himrEpgBiAC2rW7IKDZVEpTfr1SzSVNjtpzbQCW2sZS490K8DoX+NPTRv+d +EaoBZaONlQhcND8w7wnXQSfIev8xhlZM34W//mk6ehqTMKLu74RUEgf6fq8N0APU +mKcv3bPTKz97TqaBdW6F2+77vN2XVCVDHkvqP5PpDbyfxoV2W0VnR3DzNePJa1xZ +GwGNqAHeyy6tQgAPNwODaY34FsMv/GPWgN/mOrz9D9Z+/ZtjQ5BPurktMfhbhx1M +Z07Bk2uoqe6+UiQ/nyeZBCuc5n2ts/jLI4e2HvaC6IRG/leWlJvO8QW0mvLGAGDd +knF54QbLVqKFoMVPcugnhIgtgSJWdidDEKQmyg8f6EJ52vhjETEWqwIDAQABo4GJ +MIGGMB8GA1UdIwQYMBaAFN0qciqwhAvjh2W2oTX5oW2MBIfZMAkGA1UdEwQCMAAw +CwYDVR0PBAQDAgTwMCwGA1UdEQQlMCOCCWxvY2FsaG9zdIcEfwAAAYcQAAAAAAAA +AAAAAAAAAAAAATAdBgNVHQ4EFgQUuX3ThDrvCVLOPzpPen2g7Hbo91MwDQYJKoZI +hvcNAQELBQADggIBAFYuVM/FOxwZTir5H/JYmOqjP1z+dVJEjFLAYIOZ/V1erHTZ +NOmRYm5N/QZPZwVGiTuuopUKcUK3i5dGJw9/tGIstxZFwK1Hp+rgCstt5qftUENP +KxWcWj9JVk3oHUpEYPb8kTzgj+54z/yXrg9Z8bFw1wqT6bRE3JpU8IvxgC5A7fKN +Pp2NYzW6GC3/R/TehFdi/ZVWj1axZ/gQ/0x5Zfp9i7Jcy6Gg+UrQfOR5Kz9dATcc +GCIoxD/Q49v2JbwQUOCp9J62nL2sRHe1poL0fA6l1HXkuMefPZDXf33F6EckJxS0 +pD1l5TmfwtXwed36nMD3Wyc7UhV4xMJuwf9tLrBUsUWS11d06NFRqgkwdQ5gamNK ++9sagF9cgCQTA/ClP8gjbB2h2XcWTXzixkVjNNqlO4v61DgJDUayjrKNGWKCjUrX +sCGXbCzKuPrlTvVy0s6o5b2HoEvlMUrzl5+uoj7odQeauHaHkX3vEimli7X5brR9 +wA6nzS28mikFNEJlGcD1i40upiaWBE9+aPXKfqwzZmjmxu3Nv/d8P41tZzEVJgk+ +uEiJWyhgzbkXHSa3gV1P3TvvWCyGSY0VzGboQwndLlxCjAsBIhdGTNCt/PbYIE08 +ZVW2dy1BRzLaEwbhklc2ApaxN+cgdEJcstcDDzgJgZ7RiFHjrLyw7+hSF90T -----END CERTIFICATE----- diff --git a/tests/NATS.Client.Core.Tests/resources/certs/server-key.pem b/tests/NATS.Client.Core.Tests/resources/certs/server-key.pem index 8ceeccc95..adc38d72b 100644 --- a/tests/NATS.Client.Core.Tests/resources/certs/server-key.pem +++ b/tests/NATS.Client.Core.Tests/resources/certs/server-key.pem @@ -1,52 +1,52 @@ -----BEGIN PRIVATE KEY----- -MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDNN5CdHRR9p1gp -d6sqFRRwdOYyAbDumvRvG+HcSy+VLl/CVhbfshtO8zf2Pe9Zj0Ywxgkx1ooILzzT -S/wXKXvakEc8IYD/KRKp8jStVhSOTk05vct4WrNiRGTlZXdmRj1r/Hm6btZlnZbf -qtdj5kBAS89lEUniqWsdxk15agBfi4Gx79IEu69B0XzaN4d9Rhc3+O+qv7utglCr -iKRexh2B9PVXtCB3Djs4S17KyQUNHJKWwbRWJ2B2rby/ADY8W83Uk06BFNv4ST4n -pE3W1M5RaomM8jSLea4gP8b9ZAAhVR3ZTnRSaPjUbnb3EkGf8NbszcYbttBCDseR -5hpm0FQV6Ue8Wq2vMQLj9fBhB0EDG1QQYMvtIYJqwf0BA+EOeMJSdt+8WbKqSowh -awcVtIDR+FkkNfYSNRLLpkPPVQK3/bRr3ECtDxxn5/RzhqjyXi3nYdkWDRWoKP7S -UJ69/TQybyuK0LgrT3SUXE4TxBDCIa8ZDnMLtN05gwuWGlIeAnb7K7G8HZ9GV4uo -pgPTI3q9lYmGw/ZArZr7ONegnylER035DHnrTujyFsmdvifJ3SVC/8aasrkTr58o -YAWlAbtAfZez07k/uXB6xpXuBrCxuua3kpIbjAK6N/fu5ainHHd5fulS9g4Wd3cF -S5lRokzc/vPrSW7PxuWHjp9RYvbbXQIDAQABAoICAQCe4td3nY1A4DD1Ii8GzP1f -OFMGAqMvig+Yevj7K8cydI41k5vwJCDalpsMbtWC/Nf2aU2zJY0HWzN30QvkDv1S -soREvRf39p/5roo0bkJKD7vg6d7AV1Et0xBfP5kbOWTS186Tlr8uO74VfFt5gErc -vRVdBe6zrEI/8koHqBeT4hpPXwO3IG1Hw18sQPQI/Rx6/KTrCbnQU+YLeSbyLeeo -t7TA67h7FSyqoEhLLypXBXlFecIbNi+Mk2VgaFSVlOqfHFIaxMCu0l5qKN8PZwI6 -rQbEdr5SAqrbUyXJCATFyfXrSr/rElUdfE1la+AdakWtYIBy8q75hiHkB0kHs2J1 -lXgyPjIZA3/CGjaRU1M1pYyuLSyXMK8hqAcEgBZfBg0cZvKAbxNBH62ZbJGwr9/x -mxp3cl9qK64yfcg1S/kVYmxfTiFTJpzQGv2eI767zPBmZ7TVqohk0uHhGbX3CGFj -x5DPPuo3QXT27QSDcZk81AAYld3OXMWYxV1xnTsjjsdRFZNJ3kYCLxwmziTlMfxF -L+4p7nabS9KJ3nZrosKT+0U1FNyDW9J9bSa8iF/LW2OqFj/sXB6230srtiHlNgo4 -wleIV//RbcrWfnnno57Dwh0HYl4Gyz1P3mwUVf00jRGqw0hyRqn+zHzOYCA8RQmb -TIiJdqiVu3Iku78e+E9swQKCAQEA6wF8moQoDq0c6nnyu5X7lGbyqLuroPZpG68x -pnIktfXxvASurTi3XfWBI1uvlasKPe4W9QKD278cjrTJlxPL0htLrYDJpenXL33G -CvsBSlLxSYjyfm+gAAsREH+NHpVhwfYOOjL+ff/kGA5W1VULb7O7C039mp12LZVb -ko8XylsWfOm43gffTwmCqDo1Ut1mzvm1ukSN1wnbSukWdEF7SO1GbGzl88n4sQGl -gYTQ3eHurg28b1GHym9P+MKPC1mdI+uFZNnNBgv6kgInuwNpw4ak+LiQOT1pVhjh -Z78ILdGFUY3UjC+JvARcSooHSgRGjHAHjrWHDQouVJcJ49c10QKCAQEA34zRb0kU -ZcVQffsc1K8JE8CIZBoaMYBtCVqBllGhS05zoQjgl3mCTMMPFRsMbbWCK1w9wmXF -sx1v0JqlcAsJrWNN+HhFFj55NfXEL1DEyYH/Pc7XyT5ZwUym5Cbqm6XaOO8ALyBB -JaZFaKIJdUF9pcsCw7LyK1KEuQSs/jrnsinuCDdZPIjdZ2CQD47xm081Kc4Cghsd -ZXLZkEfhUWeL+jgxYEvc+i7GTSJlnKFrib1D30lDwL9vNUJv3VuUIkSF6JUQ0zOT -OWmn1DtFRXQ+Ld6wtiBQF0rBtcqYc8dufyMyi+tI+p2YWVSLv0gwQnf18AvfqCrL -c+paJoiD685TzQKCAQEA1iHwq8qnxVev9WdQ6eRr7HkxutXmOTDN7U/hacyv7q0/ -qxaJI4V+b7r4BIPSpgnHt05u1KmKBH1LRC0vUt3S5ovAlUO4edltHfT4s6CrOFID -UgHbE6IapG9xCRtwNuHexaGyrQ0yHxU/fTvzm0d2uD2IvXA/GNdJi5eAbTa9csE0 -6HT+4jFCJP6Bc1A2rl7XAtk94Y/9vmdYzhU9RIk2EOlDNiC0F0N9u6vIZw/iUYtA -tJAHl1cu6CItOHnvZWQub0B3t8FNs6jOlKQqF5mwkVzqjUd/AukWRkE9gg7rIPS9 -Cea2OVZHpm5CuhizM5pZvjWGbV6yxAr21FUbyeObQQKCAQEAzhsf0TGYm8gS0UQf -Lbv/a3WcimZCdhdI8FHAnl2+jxbSpsrvftipmKpSkovwpomtbNrLmhqI7v4Z5ENg -em/CyViAP7BrSfnpeSWRbmpSNNMlB9BXxRQ2XnCUgk+bCEweaVV5Xvmm9tZYsgKL -I89wz9XfQ50Nh4G6GndEI9UdX3cnHe4h2Rz6vGAcEiwhd6bMhjGIwHnNXYZJLqwH -Ai2ssdLzOyxWnVdYvy8Sbhmpc0HLfOcoj2IwXvNU/cp8RifVKj2dWIv5lfpioNrQ -oBtvZI0ncZNTJFZpSHl0m3Jo3tENvlD8ZQu9tcasXXxp+i5t0pav63UhRUrxOQuu -TU9alQKCAQBoSqhe/0YGstAoWl3D3syv1CkWikfex1slcBMXcq4EKiPbjO60xK4g -7pzLb76vxkAV4rJgoHzutFmgUSCyndI+hvYgAeGhT00m1dIxB+Q6HT+dLfCpDyD8 -hM3qU0id5L+4PY4MvUiP+oII3nX2X80Ti4mJK9l1J1pRJqRx76WMrtSkLtVRfiIV -EPFly1VKo4e0rvba/Ed0tG81vsMwh4j3f+ognM/E4oKyMs2T/gfFDQttul//kPuu -1v3RbXLxYbZtcebXzlxFxzH2ZK+qiCPU0w6UXLCsNSZAtWUNj712ITnwpEPPHrXQ -hutWUdXBbCUvA8mOSShko+MrYMz5lfzp +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 +PoO7VjPpVSZanLRV/YuPT5w2IVB4RA== -----END PRIVATE KEY-----