Skip to content

Commit 591b330

Browse files
feat: no longer bypassing server certs (#794)
1 parent 50e4a31 commit 591b330

5 files changed

Lines changed: 50 additions & 11 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,4 @@ application/CohortManager/.vscode/
8484
# Ignore generated feature bindings
8585
*.feature.cs
8686
tests/smoke-tests/dtos-cohort-manager-smoke-tests/Config/appsettings-local.json
87+
*.crt

application/CohortManager/src/Functions/CaasIntegration/RetrieveMeshFile/Program.cs

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using Microsoft.Extensions.Logging;
1010
using NHS.Screening.RetrieveMeshFile;
1111
using HealthChecks.Extensions;
12-
using Microsoft.Extensions.HealthChecks;
1312

1413

1514
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
@@ -20,13 +19,16 @@
2019
var host = new HostBuilder();
2120

2221
X509Certificate2 cert = null;
22+
X509Certificate2Collection caCerts = new X509Certificate2Collection();
23+
24+
var KeyVaultConnectionString = Environment.GetEnvironmentVariable("KeyVaultConnectionString");
2325

2426
host.AddConfiguration<RetrieveMeshFileConfig>(out RetrieveMeshFileConfig config);
2527

26-
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("KeyVaultConnectionString")))
28+
if (!string.IsNullOrEmpty(KeyVaultConnectionString))
2729
{
2830
logger.LogInformation("Pulling Mesh Certificate from KeyVault");
29-
var client = new CertificateClient(vaultUri: new Uri(Environment.GetEnvironmentVariable("KeyVaultConnectionString")), credential: new DefaultAzureCredential());
31+
var client = new CertificateClient(vaultUri: new Uri(KeyVaultConnectionString), credential: new DefaultAzureCredential());
3032
var certificate = await client.DownloadCertificateAsync(config.MeshKeyName);
3133
cert = certificate.Value;
3234
}
@@ -36,6 +38,36 @@
3638
cert = new X509Certificate2(config.MeshKeyName, config.MeshKeyPassphrase);
3739
}
3840

41+
if (!string.IsNullOrEmpty(KeyVaultConnectionString))
42+
{
43+
var client = new CertificateClient(new Uri(KeyVaultConnectionString), new DefaultAzureCredential());
44+
var allCertificates = client.GetPropertiesOfCertificates();
45+
46+
foreach (var certificateProperties in allCertificates)
47+
{
48+
if (certificateProperties.Name.StartsWith("CaCert"))
49+
{
50+
var certificateWithPolicy = await client.DownloadCertificateAsync(certificateProperties.Name);
51+
caCerts.Add(certificateWithPolicy.Value);
52+
}
53+
}
54+
}
55+
else if (!string.IsNullOrEmpty(config.ServerSideCerts))
56+
{
57+
var pemCerts = File.ReadAllText(config.ServerSideCerts)
58+
.Split(new string[] { "-----END CERTIFICATE-----" }, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
59+
.Select(pem => pem + "\n-----END CERTIFICATE-----")
60+
.Select(pem => new X509Certificate2(Convert.FromBase64String(
61+
pem.Replace("-----BEGIN CERTIFICATE-----", "")
62+
.Replace("-----END CERTIFICATE-----", "")
63+
.Replace("\n", "")
64+
)))
65+
.ToArray();
66+
67+
caCerts.AddRange(pemCerts);
68+
}
69+
70+
3971
host.ConfigureFunctionsWebApplication();
4072
host.ConfigureServices(services =>
4173
{
@@ -47,7 +79,8 @@
4779
{
4880
Password = config.MeshPassword,
4981
SharedKey = config.MeshSharedKey,
50-
Cert = cert
82+
Cert = cert,
83+
serverSideCertCollection = caCerts
5184
})
5285
.Build();
5386
services.AddSingleton<IBlobStorageHelper, BlobStorageHelper>();

application/CohortManager/src/Functions/CaasIntegration/RetrieveMeshFile/RetrieveMeshFile.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
<None Update="meshpfx.pfx">
2424
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2525
</None>
26+
<None Update="meshServerSideCerts.crt">
27+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
28+
</None>
2629
<None Update="local.settings.json">
2730
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2831
<CopyToPublishDirectory>Never</CopyToPublishDirectory>

application/CohortManager/src/Functions/CaasIntegration/RetrieveMeshFile/RetrieveMeshFileConfig.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@ namespace NHS.Screening.RetrieveMeshFile;
44

55
public class RetrieveMeshFileConfig
66
{
7-
public string MeshApiBaseUrl {get; set;}
7+
public string MeshApiBaseUrl { get; set; }
88
[Required]
9-
public string BSSMailBox {get; set;}
9+
public string BSSMailBox { get; set; }
1010
[Required]
11-
public string MeshPassword {get; set;}
11+
public string MeshPassword { get; set; }
1212
[Required]
13-
public string MeshSharedKey {get; set;}
14-
public string MeshKeyPassphrase {get; set;}
15-
public string MeshKeyName {get; set;}
13+
public string MeshSharedKey { get; set; }
14+
public string MeshKeyPassphrase { get; set; }
15+
public string MeshKeyName { get; set; }
16+
17+
public string ServerSideCerts { get; set; }
1618

1719
}

0 commit comments

Comments
 (0)