diff --git a/projects/RabbitMQ.Client/Impl/SslHelper.cs b/projects/RabbitMQ.Client/Impl/SslHelper.cs
index ebe309d03..3bdd74805 100644
--- a/projects/RabbitMQ.Client/Impl/SslHelper.cs
+++ b/projects/RabbitMQ.Client/Impl/SslHelper.cs
@@ -82,6 +82,13 @@ Task TryAuthenticating(SslOption opts)
EnabledSslProtocols = opts.Version,
TargetHost = opts.ServerName,
};
+
+#if NET8_0_OR_GREATER
+ if (opts.ClientCertificateContext != null)
+ {
+ o.ClientCertificateContext = opts.ClientCertificateContext;
+ }
+#endif
return sslStream.AuthenticateAsClientAsync(o, cancellationToken);
#else
return sslStream.AuthenticateAsClientAsync(opts.ServerName, opts.Certs, opts.Version, opts.CheckCertificateRevocation);
diff --git a/projects/RabbitMQ.Client/PublicAPI/PublicAPI.Unshipped.net8.0.txt b/projects/RabbitMQ.Client/PublicAPI/PublicAPI.Unshipped.net8.0.txt
new file mode 100644
index 000000000..0ad2bc143
--- /dev/null
+++ b/projects/RabbitMQ.Client/PublicAPI/PublicAPI.Unshipped.net8.0.txt
@@ -0,0 +1,18 @@
+RabbitMQ.Client.Exceptions.PublishException.PublishException(ulong publishSequenceNumber, bool isReturn, string! message) -> 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 99%
rename from projects/RabbitMQ.Client/PublicAPI.Unshipped.txt
rename to projects/RabbitMQ.Client/PublicAPI/PublicAPI.Unshipped.netstandard2.0.txt
index b78bae4b2..80f7e8fab 100644
--- a/projects/RabbitMQ.Client/PublicAPI.Unshipped.txt
+++ b/projects/RabbitMQ.Client/PublicAPI/PublicAPI.Unshipped.netstandard2.0.txt
@@ -13,3 +13,4 @@ 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
+
diff --git a/projects/RabbitMQ.Client/RabbitMQ.Client.csproj b/projects/RabbitMQ.Client/RabbitMQ.Client.csproj
index d552e6324..acdc9e963 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 cb067cccb..b7cf352a7 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 NET8_0_OR_GREATER
+ ///
+ /// Retrieve or set the to supply
+ /// a set of certificates used for building a certificate chain.
+ ///
+ public SslStreamCertificateContext? ClientCertificateContext { get; set; }
+#endif
}
}