Skip to content

Commit 6eb5555

Browse files
davidorbelianbrendandburns
authored andcommitted
Fix issue with X509VerificationFlags.AllowUnknownCertificateAuthority behavior (#174)
* Fix issue with X509VerificationFlags.AllowUnknownCertificateAuthority behavior * Add CertificateValidationTests
1 parent f488d54 commit 6eb5555

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

src/KubernetesClient/Kubernetes.ConfigInit.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Diagnostics.CodeAnalysis;
3+
using System.Linq;
34
using System.Net;
45
using System.Net.Http;
56
using System.Net.Security;
@@ -181,6 +182,10 @@ public static bool CertificateValidationCallBack(
181182
chain.ChainPolicy.ExtraStore.Add(caCert);
182183
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;
183184
var isValid = chain.Build((X509Certificate2) certificate);
185+
186+
var rootCert = chain.ChainElements[chain.ChainElements.Count - 1].Certificate;
187+
isValid = isValid && rootCert.RawData.SequenceEqual(caCert.RawData);
188+
184189
return isValid;
185190
}
186191

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using System;
2+
using System.IO;
3+
using System.Net.Security;
4+
using System.Security.Cryptography.X509Certificates;
5+
using Xunit;
6+
7+
namespace k8s.tests
8+
{
9+
public class CertificateValidationTests
10+
{
11+
[Fact]
12+
public void ValidCert()
13+
{
14+
var caCert = new X509Certificate2("assets/ca.crt");
15+
var testCert = new X509Certificate2("assets/ca.crt");
16+
var chain = new X509Chain();
17+
var errors = SslPolicyErrors.RemoteCertificateChainErrors;
18+
19+
var result = Kubernetes.CertificateValidationCallBack(this, caCert, testCert, chain, errors);
20+
21+
Assert.True(result);
22+
}
23+
24+
[Fact]
25+
public void InvalidCert()
26+
{
27+
var caCert = new X509Certificate2("assets/ca.crt");
28+
var testCert = new X509Certificate2("assets/ca2.crt");
29+
var chain = new X509Chain();
30+
var errors = SslPolicyErrors.RemoteCertificateChainErrors;
31+
32+
var result = Kubernetes.CertificateValidationCallBack(this, caCert, testCert, chain, errors);
33+
34+
Assert.False(result);
35+
}
36+
}
37+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIC3zCCAcegAwIBAgIQWNOfSGBRn4EUcsj7E1UN8zANBgkqhkiG9w0BAQsFADAZ
3+
MRcwFQYDVQQKEw5EYXZpZCBPcmJlbGlhbjAeFw0xODA2MDgxMjI2MDBaFw0yMTA1
4+
MjMxMjI2MDBaMBkxFzAVBgNVBAoTDkRhdmlkIE9yYmVsaWFuMIIBIjANBgkqhkiG
5+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnXGK1ZHqF4fhO3WOtlo5kqVYHHYTasNmzbQh
6+
MJ0IHiFrCVNi6apohleHi0IlzVFCQY5+yab2Lz7J2qcadRVWLlfhskMx4hbSD+eX
7+
H9MDcnV1k4AyFz+9I+dL4rb5DPcK9vNQF0KXtdpaq4qVs+IoRR4Ck00yvzLmOMTs
8+
YvFVjW6XgKPR+y89y8iykW2puiJ/y6DLKlP+2HDGGEI07C+4Tkxps6uRkPz6ySVb
9+
6mhJ6P/+8WmuMc0Ur1kNgA0GEUTFYlRNuF0nNjBvncGBUwOWAUNbsYQgElaqXJKe
10+
XZ6M44+oBvRsCsnf7j3hfKti4u/Qy9nDejJ/15R6I6A5JdYOxwIDAQABoyMwITAO
11+
BgNVHQ8BAf8EBAMCAqwwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC
12+
AQEAU2Rp4T7iWomEsCC8nrQPXh/6AlVnfb/vhC7aCq+g6CF+LvksfM3Uj+JLQ5rM
13+
QNavSXowqe11vNb1Qu7LcQT5ff76XEoK0dKA8uMs60wUkHttfPzXM522rdv+i8EF
14+
QwVirN85W5i2q669MQ2BeJ37gQ6vQAOLvHXTuspDo1qrfT3zkeGiLEXRM4k4d6OT
15+
BnZNYvfdTTZX7OlvHfw5hdcRtoOTBmTAh+UKJvOUIQ2g/Mp2VBxNNC5zhJHTwEXj
16+
ssHyR24e9+GODLviep2H1uB+mHZQ5Yvzxxlkz8NTDx+mUmBSF1gGuDNdmKrCrP92
17+
bJZY0LcRrXX0aqPymVZrINDvtA==
18+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)