Skip to content

Commit 7cd01f1

Browse files
committed
Dispose certs created by Kuberentes
1 parent e6f5f0a commit 7cd01f1

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

src/KubernetesClient/Kubernetes.ConfigInit.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,27 +90,27 @@ private void InitializeFromConfig(KubernetesClientConfiguration config)
9090
// set credentails for the kubernetes client
9191
SetCredentials(config);
9292

93-
var clientCert = CertUtils.GetClientCert(config);
94-
if (clientCert != null)
93+
ClientCert = CertUtils.GetClientCert(config);
94+
if (ClientCert != null)
9595
{
9696
#if NET5_0_OR_GREATER
97-
HttpClientHandler.SslOptions.ClientCertificates.Add(clientCert);
97+
HttpClientHandler.SslOptions.ClientCertificates.Add(ClientCert);
9898

9999
// TODO this is workaround for net7.0, remove it when the issue is fixed
100100
// seems the client certificate is cached and cannot be updated
101101
HttpClientHandler.SslOptions.LocalCertificateSelectionCallback = (sender, targetHost, localCertificates, remoteCertificate, acceptableIssuers) =>
102102
{
103-
return clientCert;
103+
return ClientCert;
104104
};
105105
#else
106-
HttpClientHandler.ClientCertificates.Add(clientCert);
106+
HttpClientHandler.ClientCertificates.Add(ClientCert);
107107
#endif
108108
}
109109
}
110110

111111
private X509Certificate2Collection CaCerts { get; }
112112

113-
private X509Certificate2 ClientCert { get; }
113+
private X509Certificate2 ClientCert { get; set; }
114114

115115
private bool SkipTlsVerify { get; }
116116

src/KubernetesClient/Kubernetes.WebSocket.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -239,11 +239,6 @@ protected async Task<WebSocket> StreamConnectAsync(Uri uri, string webSocketSubP
239239
}
240240

241241
// Set Credentials
242-
if (this.ClientCert != null)
243-
{
244-
webSocketBuilder.AddClientCertificate(this.ClientCert);
245-
}
246-
247242
if (this.HttpClientHandler != null)
248243
{
249244
#if NET5_0_OR_GREATER

src/KubernetesClient/Kubernetes.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,12 +202,27 @@ public void Dispose()
202202
/// <param name="disposing">True to release both managed and unmanaged resources; false to releases only unmanaged resources.</param>
203203
protected virtual void Dispose(bool disposing)
204204
{
205-
if (!_disposed)
205+
if (disposing && !_disposed)
206206
{
207207
_disposed = true;
208208

209209
// Dispose the client
210210
HttpClient?.Dispose();
211+
212+
// Dispose the certificates
213+
if (CaCerts is not null)
214+
{
215+
foreach (var caCert in CaCerts)
216+
{
217+
caCert.Dispose();
218+
}
219+
220+
CaCerts.Clear();
221+
}
222+
223+
224+
ClientCert?.Dispose();
225+
211226
HttpClient = null;
212227
FirstMessageHandler = null;
213228
HttpClientHandler = null;

0 commit comments

Comments
 (0)