diff --git a/src/Docker.DotNet.X509/CertificateCredentials.cs b/src/Docker.DotNet.X509/CertificateCredentials.cs
index a03bf796..d72efbd8 100644
--- a/src/Docker.DotNet.X509/CertificateCredentials.cs
+++ b/src/Docker.DotNet.X509/CertificateCredentials.cs
@@ -18,31 +18,38 @@ public HttpMessageHandler ConfigureHandler(HttpMessageHandler handler)
#if NET6_0_OR_GREATER
if (handler is SocketsHttpHandler socketsHandler)
{
- socketsHandler.SslOptions.ClientCertificates = new X509Certificate2Collection();
- socketsHandler.SslOptions.ClientCertificates.Add(_certificate);
+ if (_certificate != null)
+ {
+ socketsHandler.SslOptions.ClientCertificates = new X509Certificate2Collection();
+ socketsHandler.SslOptions.ClientCertificates.Add(_certificate);
+ }
+
socketsHandler.SslOptions.RemoteCertificateValidationCallback = ServerCertificateValidationCallback;
return socketsHandler;
}
#else
if (handler is HttpClientHandler httpHandler)
{
- httpHandler.ClientCertificates.Add(_certificate);
+ if (_certificate != null && !httpHandler.ClientCertificates.Contains(_certificate))
+ {
+ httpHandler.ClientCertificates.Add(_certificate);
+ }
+
httpHandler.ServerCertificateCustomValidationCallback = (message, certificate, chain, sslPolicyErrors) => ServerCertificateValidationCallback(message, certificate, chain, sslPolicyErrors);
return httpHandler;
}
#endif
- if (handler is not ManagedHandler managedHandler)
+ if (handler is ManagedHandler managedHandler)
{
- return handler;
- }
+ if (_certificate != null && !managedHandler.ClientCertificates.Contains(_certificate))
+ {
+ managedHandler.ClientCertificates.Add(_certificate);
+ }
- if (!managedHandler.ClientCertificates.Contains(_certificate))
- {
- managedHandler.ClientCertificates.Add(_certificate);
+ managedHandler.ServerCertificateValidationCallback = ServerCertificateValidationCallback;
+ return managedHandler;
}
- managedHandler.ServerCertificateValidationCallback = ServerCertificateValidationCallback;
-
return handler;
}
}
\ No newline at end of file
diff --git a/src/Docker.DotNet/DockerClient.cs b/src/Docker.DotNet/DockerClient.cs
index a55ad4f8..c59eb59e 100644
--- a/src/Docker.DotNet/DockerClient.cs
+++ b/src/Docker.DotNet/DockerClient.cs
@@ -26,6 +26,7 @@ internal DockerClient(
_clientOptions = clientOptions;
_hijack = hijack;
+ Options = clientOptions;
System = new SystemOperations(this);
Containers = new ContainerOperations(this);
Images = new ImageOperations(this);
@@ -39,6 +40,8 @@ internal DockerClient(
Exec = new ExecOperations(this);
}
+ public ClientOptions Options { get; }
+
public ISystemOperations System { get; }
public IContainerOperations Containers { get; }
diff --git a/src/Docker.DotNet/DockerClientBuilder.cs b/src/Docker.DotNet/DockerClientBuilder.cs
index 4727ead9..2282c5aa 100644
--- a/src/Docker.DotNet/DockerClientBuilder.cs
+++ b/src/Docker.DotNet/DockerClientBuilder.cs
@@ -37,7 +37,7 @@ public DockerClientBuilder()
///
/// The requested API version.
/// The builder instance.
- public DockerClientBuilder WithApiVersion(Version version)
+ public DockerClientBuilder WithApiVersion(Version? version)
{
ClientOptions = ClientOptions with { ApiVersion = version };
return this;
@@ -59,9 +59,11 @@ public DockerClientBuilder WithEndpoint(Uri endpoint)
///
/// The authentication provider.
/// The builder instance.
- public DockerClientBuilder WithAuthProvider(IAuthProvider authProvider)
+ public DockerClientBuilder WithAuthProvider(IAuthProvider? authProvider)
{
- ClientOptions = ClientOptions with { AuthProvider = authProvider };
+ var nonNullableAuthProvider = authProvider ?? NoopAuthProvider.Instance;
+
+ ClientOptions = ClientOptions with { AuthProvider = nonNullableAuthProvider };
return this;
}
diff --git a/src/Docker.DotNet/IDockerClient.cs b/src/Docker.DotNet/IDockerClient.cs
index 0b51b26b..12830241 100644
--- a/src/Docker.DotNet/IDockerClient.cs
+++ b/src/Docker.DotNet/IDockerClient.cs
@@ -2,6 +2,8 @@ namespace Docker.DotNet;
public interface IDockerClient : IDisposable
{
+ ClientOptions Options { get; }
+
ISystemOperations System { get; }
IContainerOperations Containers { get; }