Skip to content

Commit 3643250

Browse files
authored
use net5 certificate api instead of 3rd api (#733)
* use net api for cert loading * codeql happy?
1 parent e7de93d commit 3643250

File tree

9 files changed

+71
-9
lines changed

9 files changed

+71
-9
lines changed

.github/workflows/codeql-analysis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ on:
1212
jobs:
1313
analyze:
1414
name: Analyze
15-
runs-on: ubuntu-latest
15+
runs-on: windows-latest
1616

1717
strategy:
1818
fail-fast: false

src/KubernetesClient/CertUtils.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
using k8s.Exceptions;
2+
#if !NET5_0_OR_GREATER
23
using Org.BouncyCastle.Crypto;
34
using Org.BouncyCastle.OpenSsl;
45
using Org.BouncyCastle.Pkcs;
56
using Org.BouncyCastle.Security;
67
using Org.BouncyCastle.X509;
8+
#endif
79
using System;
810
using System.IO;
911
using System.Security.Cryptography.X509Certificates;
12+
using System.Text;
1013

1114
namespace k8s
1215
{
@@ -22,6 +25,9 @@ public static X509Certificate2Collection LoadPemFileCert(string file)
2225
var certCollection = new X509Certificate2Collection();
2326
using (var stream = FileUtils.FileSystem().File.OpenRead(file))
2427
{
28+
#if NET5_0_OR_GREATER
29+
certCollection.ImportFromPem(new StreamReader(stream).ReadToEnd());
30+
#else
2531
var certs = new X509CertificateParser().ReadCertificates(stream);
2632

2733
// Convert BouncyCastle X509Certificates to the .NET cryptography implementation and add
@@ -31,6 +37,7 @@ public static X509Certificate2Collection LoadPemFileCert(string file)
3137
{
3238
certCollection.Add(new X509Certificate2(cert.GetEncoded()));
3339
}
40+
#endif
3441
}
3542

3643
return certCollection;
@@ -48,6 +55,44 @@ public static X509Certificate2 GeneratePfx(KubernetesClientConfiguration config)
4855
throw new ArgumentNullException(nameof(config));
4956
}
5057

58+
#if NET5_0_OR_GREATER
59+
string keyData = null;
60+
string certData = null;
61+
62+
if (!string.IsNullOrWhiteSpace(config.ClientCertificateKeyData))
63+
{
64+
keyData = Encoding.UTF8.GetString(Convert.FromBase64String(config.ClientCertificateKeyData));
65+
}
66+
67+
if (!string.IsNullOrWhiteSpace(config.ClientKeyFilePath))
68+
{
69+
keyData = File.ReadAllText(config.ClientKeyFilePath);
70+
}
71+
72+
if (keyData == null)
73+
{
74+
throw new KubeConfigException("keyData is empty");
75+
}
76+
77+
if (!string.IsNullOrWhiteSpace(config.ClientCertificateData))
78+
{
79+
certData = Encoding.UTF8.GetString(Convert.FromBase64String(config.ClientCertificateData));
80+
}
81+
82+
if (!string.IsNullOrWhiteSpace(config.ClientCertificateFilePath))
83+
{
84+
certData = File.ReadAllText(config.ClientCertificateFilePath);
85+
}
86+
87+
if (certData == null)
88+
{
89+
throw new KubeConfigException("certData is empty");
90+
}
91+
92+
93+
return X509Certificate2.CreateFromPem(certData, keyData);
94+
#else
95+
5196
byte[] keyData = null;
5297
byte[] certData = null;
5398

@@ -121,6 +166,7 @@ public static X509Certificate2 GeneratePfx(KubernetesClientConfiguration config)
121166
return new X509Certificate2(pkcs.ToArray());
122167
}
123168
}
169+
#endif
124170
}
125171

126172
/// <summary>

src/KubernetesClient/KubernetesClient.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
<PackageReference Include="AutoMapper" Version="10.1.1" />
3434
<PackageReference Include="Fractions" Version="7.0.0" />
3535
<PackageReference Include="Nerdbank.GitVersioning" Version="3.4.240" PrivateAssets="all" />
36-
<PackageReference Include="Portable.BouncyCastle" Version="1.8.10" />
36+
<PackageReference Include="Portable.BouncyCastle" Version="1.8.10" Condition="'$(TargetFramework)' == 'netstandard2.1'" />
3737
<PackageReference Include="Microsoft.Rest.ClientRuntime" Version="2.3.23" />
3838
<PackageReference Include="prometheus-net" Version="5.0.1" />
3939
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.13.1" />

tests/E2E.Tests/E2E.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<IsPackable>false</IsPackable>
44
<SignAssembly>true</SignAssembly>
55
<RootNamespace>k8s.E2E</RootNamespace>
6-
<TargetFramework>net5.0</TargetFramework>
6+
<TargetFrameworks>net5.0;netcoreapp3.1</TargetFrameworks>
77
</PropertyGroup>
88

99
<ItemGroup>

tests/KubernetesClient.Tests/KubernetesClient.Tests.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<LangVersion>8</LangVersion>
55
<SignAssembly>true</SignAssembly>
66
<RootNamespace>k8s.Tests</RootNamespace>
7-
<TargetFrameworks>net5</TargetFrameworks>
7+
<TargetFrameworks>net5;netcoreapp3.1</TargetFrameworks>
88
</PropertyGroup>
99

1010
<ItemGroup>
@@ -14,6 +14,7 @@
1414
<PackageReference Include="System.IO.Abstractions.TestingHelpers" Version="13.2.47" />
1515
<PackageReference Include="System.Reactive" Version="5.0.0" />
1616
<PackageReference Include="Nito.AsyncEx" Version="5.1.2" />
17+
<PackageReference Include="Portable.BouncyCastle" Version="1.8.10"/>
1718
</ItemGroup>
1819

1920
<ItemGroup>
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
-----BEGIN EC PRIVATE KEY-----
2-
MHcCAQEEIPRgTfIRnvc0IUzur8Hty7BKyGxyeKgy3PTymy+HdCG9oAoGCCqGSM49
3-
AwEHoUQDQgAEtwldWFvRSvTgNo0s+bhL/58WoBObRCfbBYzc7ynSkm0Eywkni7Rl
4-
i6LlpOrg9xRwLwNblSgCjO15S3Nvue2WbQ==
2+
MIHcAgEBBEIAgsWy6kCIIGCuedLfU0zqElm7H9VwpzKWK3ITjtG8QPEJfw0vEqVL
3+
Ly4aVsZ8dH7lP6Ykz90lAxLPwMJTL7fht9qgBwYFK4EEACOhgYkDgYYABADJVVPm
4+
PwRHH96uMREAJMrznGswswqMerCY8wqGjAMDHCWE/bvbGROhRzZM5WNuI/C7d5oV
5+
YpagbVVgIi3L4Jr+hgDuAmK4AExQYcZWVcPqLe/kv7i5xxAT2MJwuto7QJeR7ffh
6+
YzbpOXqgQBrJW2Fdgh/mTAKHrtP/nDOsioRWzxl2zQ==
57
-----END EC PRIVATE KEY-----
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICBTCCAWYCFDt3JLija7g4s9TNSFI8p9topHs4MAoGCCqGSM49BAMCMEExCzAJ
3+
BgNVBAYTAlVTMQswCQYDVQQIDAJXQTEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UE
4+
CgwKS3ViZXJuZXRlczAeFw0yMTEwMjAwMDA2MDdaFw0yMTExMTkwMDA2MDdaMEEx
5+
CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJXQTEQMA4GA1UEBwwHU2VhdHRsZTETMBEG
6+
A1UECgwKS3ViZXJuZXRlczCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAMlVU+Y/
7+
BEcf3q4xEQAkyvOcazCzCox6sJjzCoaMAwMcJYT9u9sZE6FHNkzlY24j8Lt3mhVi
8+
lqBtVWAiLcvgmv6GAO4CYrgATFBhxlZVw+ot7+S/uLnHEBPYwnC62jtAl5Ht9+Fj
9+
Nuk5eqBAGslbYV2CH+ZMAoeu0/+cM6yKhFbPGXbNMAoGCCqGSM49BAMCA4GMADCB
10+
iAJCAL8VpSq+rs+h/BmNu/z0KCWsfQv7zOZOTOqYJ/5NzaBlEhejj8ktfvWTJ3SR
11+
jHIMWdK+SAJva1v1tzaTi5z7KiYuAkIApijJv9yr/Ex4okg6zB/LgsTio67fm4DG
12+
9Yrw9KVtUbskcYjcpLVbT78cQjeDyDg1dYtHpdl7Z7p+jga/nPb/HKU=
13+
-----END CERTIFICATE-----

tests/KubernetesClient.Tests/assets/kubeconfig.additional-properties.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,5 @@ users:
6060
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdkdSRUNxTXh6dC9DM3h1SXFhbDJiU2p0Nmh3blAxYm1lZFdiMGNtNXpjd1dqVzlqCm9VdUtqSU9OYzZWclA4Q3djdkg4RHEyWWZNeHFLTkpjbmdMZ1NUemwxdlNaTk5vVGJGZTNhWTJxV0YwdmlLNk8KemFpMmw5TW8zZFdJbmlHbnFMSmxwVzZINHFlYkNzTEZBZTVYUThxNGdTQUd0ZE9sMmpjZlhhT2p4N2k5MjV2bgpzRzRuWVJQVEQweG5Ic21LSklNekpZNG84L3J6TmtiTW9EWUszY1UvRVBQeFF3NzM4RWhYMDRSWG1xOTZ3L3hRClJYbDZCZmRNODZabVgyV2kvYTRISEFpYkFtMFgyVzgyRkV3MEU4K3J2bVVGMDdZcEprdndzTDhCMXBDKzVZVCsKYndETmsyUXl3V2dMZFBUTWJZalEwbFlVRW1FN3dJeVJYdkN0b1FJREFRQUJBb0lCQUNCYk9EUjdndnA5QkFNOQp2Mk1rYitxZnRQMFlpTVVnTDhXTklvNE5qNVFCRVg2Sk94dGcxaEw4SlRkUG1mUUJMRTBSc3JEeXI5WC9aZHhOCkJRcytnemNROW9qTXllT0I4UVFTckxXOFZ4MkdJN3ZkL3pqaldUa0tVMktHWWtpR2p6MHlKck1iSU11VTdkUVQKVDdMZE5LKzRDYWhqejhNNjdxbGova2NlNitwSlRLdHZKR2tNSDRYUXJyMFRmU3hLMmEwUUNmNkZwSXp2OFFEMApISE9HbFJaWlBYK1dXYVA2UFpFU3JSZG1vbmFKaTJlRG03b1Y1WU1DMExWTHJzMVprZS9FT01CODZYOVlraGJUCmJsRkxRZjlNR1hTdWtGeW1MSnFSd01DUjJxZytKSXpEU1BuYzkzbjNwcHl4Nys3UkhFeXZNMFVNOVhyeHQrNHcKUkd3ZVZlRUNnWUVBeElkaFRCdW4rRk52YkVhSHZUdlpzNkVCa1lJUXUyV0NDR3dWN1lPbTZzc0hzczJBaldrVgprQ0pMajhZMTFpMHd0Y21yOG9DcE1EN0FDRWxMSWFEK3RubW5CTzlkQ2NnTzJoNXFCSkY1UytJeFlGcVZ5ZVBsCnptQkE2VzFvdzB2Y1hsYmkrVUg4SWF3WnNLaFlMaklscmdmQ3YwaU9LNzBYaEF3YzZ6Vlk4TjhDZ1lFQTlXYUUKMklkNjJEaGxLWVRaNW5yY3g1aVN3WU1jaitMTE5FYTFZMlZFNEhZZktvbjFkRnNSa2NKV1YyRVpoRGlqcVIyaQpXZEdEVldiMVVaVEpiM3BZWW1NakJFQXhFbEJXTSt0SzhialRqMWhxbXJPQWhLU0ZYUjg4RkNEanVkcStSbmo4CklyZFlWanNCdDA5RkVkT2RqdVFseGgyRVdQWDNPdVFhRXd5WnNYOENnWUJzekNtZ0VadHVqUG9kTGZxTlZ5blIKR0t3ZW1xdWFvcnBXNFVkT1l0aXdHTS9kTzRrVVAvMlErbnRzVDZXVU9SWkRQUzgwbytlRjd1Y3VieXpwcEEvKwpndUJraWdLdW5KTWtTendUNVZrS0dtR05YdmlYZU5QSzZWeG1IWXltdVVONDhvN2F3SjNOSWxKaWl2K3VLMUxTCndqY2M0QlRjditUWjFEN2FNNEZXYndLQmdHY1MyNE96VEJiYmdTb3lRZS83OVJYazhPZFU4YjlCN0VZVjJRUloKdWRkcDVlZFJNUWJoWlh6S21zZHk0bXZWK25BRElYa0dkbHA5dDFhLzN1ZnpCSUsyenpOdTN1MnBUcnZaL1kyUQpLMVJQTjkrb3U3ZDYvd1ZCSkZQMENKSzgzU1R1bGtEaXI3andhZVViNTQvNFNYcUdPNU4rUEdPOVZFMnBGNGFlCnlVTnpBb0dCQUptMU1vcFQ4N0llelBmQ010ck51cXVqQjFpdStvb1lIYm9IbGJXZUNxS3RSRnNYMWhXOWpTY1UKQ0ZRanhSVCtPcENVWndjbDdkY2xsTUlxQTRWQ1NmUUFRMW9CMU41WENRWE8xVFlXOHU1K1BRTUdUcFEvQlVEawp6WmRJZzZqQkFXd3R6YkNzKzRjVkFoclN3cDRBSXFvcndTZU1qRmdsTmNoNzgxMEF6emNJCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
6161
- name: elliptic-user
6262
user:
63-
client-certificate: assets/client.crt
63+
client-certificate: assets/elliptic.crt
6464
client-key: assets/elliptic-client.key

tests/KubernetesClient.Tests/assets/kubeconfig.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,5 @@ users:
5858
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdkdSRUNxTXh6dC9DM3h1SXFhbDJiU2p0Nmh3blAxYm1lZFdiMGNtNXpjd1dqVzlqCm9VdUtqSU9OYzZWclA4Q3djdkg4RHEyWWZNeHFLTkpjbmdMZ1NUemwxdlNaTk5vVGJGZTNhWTJxV0YwdmlLNk8KemFpMmw5TW8zZFdJbmlHbnFMSmxwVzZINHFlYkNzTEZBZTVYUThxNGdTQUd0ZE9sMmpjZlhhT2p4N2k5MjV2bgpzRzRuWVJQVEQweG5Ic21LSklNekpZNG84L3J6TmtiTW9EWUszY1UvRVBQeFF3NzM4RWhYMDRSWG1xOTZ3L3hRClJYbDZCZmRNODZabVgyV2kvYTRISEFpYkFtMFgyVzgyRkV3MEU4K3J2bVVGMDdZcEprdndzTDhCMXBDKzVZVCsKYndETmsyUXl3V2dMZFBUTWJZalEwbFlVRW1FN3dJeVJYdkN0b1FJREFRQUJBb0lCQUNCYk9EUjdndnA5QkFNOQp2Mk1rYitxZnRQMFlpTVVnTDhXTklvNE5qNVFCRVg2Sk94dGcxaEw4SlRkUG1mUUJMRTBSc3JEeXI5WC9aZHhOCkJRcytnemNROW9qTXllT0I4UVFTckxXOFZ4MkdJN3ZkL3pqaldUa0tVMktHWWtpR2p6MHlKck1iSU11VTdkUVQKVDdMZE5LKzRDYWhqejhNNjdxbGova2NlNitwSlRLdHZKR2tNSDRYUXJyMFRmU3hLMmEwUUNmNkZwSXp2OFFEMApISE9HbFJaWlBYK1dXYVA2UFpFU3JSZG1vbmFKaTJlRG03b1Y1WU1DMExWTHJzMVprZS9FT01CODZYOVlraGJUCmJsRkxRZjlNR1hTdWtGeW1MSnFSd01DUjJxZytKSXpEU1BuYzkzbjNwcHl4Nys3UkhFeXZNMFVNOVhyeHQrNHcKUkd3ZVZlRUNnWUVBeElkaFRCdW4rRk52YkVhSHZUdlpzNkVCa1lJUXUyV0NDR3dWN1lPbTZzc0hzczJBaldrVgprQ0pMajhZMTFpMHd0Y21yOG9DcE1EN0FDRWxMSWFEK3RubW5CTzlkQ2NnTzJoNXFCSkY1UytJeFlGcVZ5ZVBsCnptQkE2VzFvdzB2Y1hsYmkrVUg4SWF3WnNLaFlMaklscmdmQ3YwaU9LNzBYaEF3YzZ6Vlk4TjhDZ1lFQTlXYUUKMklkNjJEaGxLWVRaNW5yY3g1aVN3WU1jaitMTE5FYTFZMlZFNEhZZktvbjFkRnNSa2NKV1YyRVpoRGlqcVIyaQpXZEdEVldiMVVaVEpiM3BZWW1NakJFQXhFbEJXTSt0SzhialRqMWhxbXJPQWhLU0ZYUjg4RkNEanVkcStSbmo4CklyZFlWanNCdDA5RkVkT2RqdVFseGgyRVdQWDNPdVFhRXd5WnNYOENnWUJzekNtZ0VadHVqUG9kTGZxTlZ5blIKR0t3ZW1xdWFvcnBXNFVkT1l0aXdHTS9kTzRrVVAvMlErbnRzVDZXVU9SWkRQUzgwbytlRjd1Y3VieXpwcEEvKwpndUJraWdLdW5KTWtTendUNVZrS0dtR05YdmlYZU5QSzZWeG1IWXltdVVONDhvN2F3SjNOSWxKaWl2K3VLMUxTCndqY2M0QlRjditUWjFEN2FNNEZXYndLQmdHY1MyNE96VEJiYmdTb3lRZS83OVJYazhPZFU4YjlCN0VZVjJRUloKdWRkcDVlZFJNUWJoWlh6S21zZHk0bXZWK25BRElYa0dkbHA5dDFhLzN1ZnpCSUsyenpOdTN1MnBUcnZaL1kyUQpLMVJQTjkrb3U3ZDYvd1ZCSkZQMENKSzgzU1R1bGtEaXI3andhZVViNTQvNFNYcUdPNU4rUEdPOVZFMnBGNGFlCnlVTnpBb0dCQUptMU1vcFQ4N0llelBmQ010ck51cXVqQjFpdStvb1lIYm9IbGJXZUNxS3RSRnNYMWhXOWpTY1UKQ0ZRanhSVCtPcENVWndjbDdkY2xsTUlxQTRWQ1NmUUFRMW9CMU41WENRWE8xVFlXOHU1K1BRTUdUcFEvQlVEawp6WmRJZzZqQkFXd3R6YkNzKzRjVkFoclN3cDRBSXFvcndTZU1qRmdsTmNoNzgxMEF6emNJCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
5959
- name: elliptic-user
6060
user:
61-
client-certificate: assets/client.crt
61+
client-certificate: assets/elliptic.crt
6262
client-key: assets/elliptic-client.key

0 commit comments

Comments
 (0)