Fix issue with X509VerificationFlags.AllowUnknownCertificateAuthority behavior (#174)
* Fix issue with X509VerificationFlags.AllowUnknownCertificateAuthority behavior * Add CertificateValidationTests
This commit is contained in:
committed by
Brendan Burns
parent
f488d54ce7
commit
6eb5555145
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Net.Security;
|
using System.Net.Security;
|
||||||
@@ -181,6 +182,10 @@ namespace k8s
|
|||||||
chain.ChainPolicy.ExtraStore.Add(caCert);
|
chain.ChainPolicy.ExtraStore.Add(caCert);
|
||||||
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;
|
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;
|
||||||
var isValid = chain.Build((X509Certificate2) certificate);
|
var isValid = chain.Build((X509Certificate2) certificate);
|
||||||
|
|
||||||
|
var rootCert = chain.ChainElements[chain.ChainElements.Count - 1].Certificate;
|
||||||
|
isValid = isValid && rootCert.RawData.SequenceEqual(caCert.RawData);
|
||||||
|
|
||||||
return isValid;
|
return isValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
37
tests/KubernetesClient.Tests/CertificateValidationTests.cs
Normal file
37
tests/KubernetesClient.Tests/CertificateValidationTests.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net.Security;
|
||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace k8s.tests
|
||||||
|
{
|
||||||
|
public class CertificateValidationTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void ValidCert()
|
||||||
|
{
|
||||||
|
var caCert = new X509Certificate2("assets/ca.crt");
|
||||||
|
var testCert = new X509Certificate2("assets/ca.crt");
|
||||||
|
var chain = new X509Chain();
|
||||||
|
var errors = SslPolicyErrors.RemoteCertificateChainErrors;
|
||||||
|
|
||||||
|
var result = Kubernetes.CertificateValidationCallBack(this, caCert, testCert, chain, errors);
|
||||||
|
|
||||||
|
Assert.True(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void InvalidCert()
|
||||||
|
{
|
||||||
|
var caCert = new X509Certificate2("assets/ca.crt");
|
||||||
|
var testCert = new X509Certificate2("assets/ca2.crt");
|
||||||
|
var chain = new X509Chain();
|
||||||
|
var errors = SslPolicyErrors.RemoteCertificateChainErrors;
|
||||||
|
|
||||||
|
var result = Kubernetes.CertificateValidationCallBack(this, caCert, testCert, chain, errors);
|
||||||
|
|
||||||
|
Assert.False(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
tests/KubernetesClient.Tests/assets/ca2.crt
Normal file
18
tests/KubernetesClient.Tests/assets/ca2.crt
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIC3zCCAcegAwIBAgIQWNOfSGBRn4EUcsj7E1UN8zANBgkqhkiG9w0BAQsFADAZ
|
||||||
|
MRcwFQYDVQQKEw5EYXZpZCBPcmJlbGlhbjAeFw0xODA2MDgxMjI2MDBaFw0yMTA1
|
||||||
|
MjMxMjI2MDBaMBkxFzAVBgNVBAoTDkRhdmlkIE9yYmVsaWFuMIIBIjANBgkqhkiG
|
||||||
|
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnXGK1ZHqF4fhO3WOtlo5kqVYHHYTasNmzbQh
|
||||||
|
MJ0IHiFrCVNi6apohleHi0IlzVFCQY5+yab2Lz7J2qcadRVWLlfhskMx4hbSD+eX
|
||||||
|
H9MDcnV1k4AyFz+9I+dL4rb5DPcK9vNQF0KXtdpaq4qVs+IoRR4Ck00yvzLmOMTs
|
||||||
|
YvFVjW6XgKPR+y89y8iykW2puiJ/y6DLKlP+2HDGGEI07C+4Tkxps6uRkPz6ySVb
|
||||||
|
6mhJ6P/+8WmuMc0Ur1kNgA0GEUTFYlRNuF0nNjBvncGBUwOWAUNbsYQgElaqXJKe
|
||||||
|
XZ6M44+oBvRsCsnf7j3hfKti4u/Qy9nDejJ/15R6I6A5JdYOxwIDAQABoyMwITAO
|
||||||
|
BgNVHQ8BAf8EBAMCAqwwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC
|
||||||
|
AQEAU2Rp4T7iWomEsCC8nrQPXh/6AlVnfb/vhC7aCq+g6CF+LvksfM3Uj+JLQ5rM
|
||||||
|
QNavSXowqe11vNb1Qu7LcQT5ff76XEoK0dKA8uMs60wUkHttfPzXM522rdv+i8EF
|
||||||
|
QwVirN85W5i2q669MQ2BeJ37gQ6vQAOLvHXTuspDo1qrfT3zkeGiLEXRM4k4d6OT
|
||||||
|
BnZNYvfdTTZX7OlvHfw5hdcRtoOTBmTAh+UKJvOUIQ2g/Mp2VBxNNC5zhJHTwEXj
|
||||||
|
ssHyR24e9+GODLviep2H1uB+mHZQ5Yvzxxlkz8NTDx+mUmBSF1gGuDNdmKrCrP92
|
||||||
|
bJZY0LcRrXX0aqPymVZrINDvtA==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
Reference in New Issue
Block a user