From 44bdf300da2000b6de046bd58e3c64f6294ca91b Mon Sep 17 00:00:00 2001
From: Klaus Fischer <klaus.fischer@eloware.com>
Date: Wed, 7 Sep 2022 13:23:00 +0200
Subject: [PATCH] WIP: Revocation Status unclear

---
 FitConnect/Encryption/CertificateHelper.cs | 19 ++++----
 IntegrationTests/IntegrationTests.csproj   | 54 ++++++++++++++++++----
 2 files changed, 56 insertions(+), 17 deletions(-)

diff --git a/FitConnect/Encryption/CertificateHelper.cs b/FitConnect/Encryption/CertificateHelper.cs
index 132dad52..0db9b3c3 100644
--- a/FitConnect/Encryption/CertificateHelper.cs
+++ b/FitConnect/Encryption/CertificateHelper.cs
@@ -4,6 +4,7 @@ using System.Text.Unicode;
 using Microsoft.Extensions.Logging;
 using Microsoft.IdentityModel.Tokens;
 using Microsoft.Win32.SafeHandles;
+using Newtonsoft.Json;
 
 namespace FitConnect.Encryption;
 
@@ -24,25 +25,27 @@ public class CertificateHelper {
         LogLevel logLevel = LogLevel.Warning) {
         var certificateChain = new X509Chain();
 
- //       certificate.ExportToPem($"./temp/{Guid.NewGuid().ToString()}.pem");
+//        certificate.ExportToPem($"./temp/{Guid.NewGuid().ToString()}");
         _logger?.LogDebug("Issuers: {Issuer}", certificate.Issuer);
 
         if (rootCertificate != null) {
             certificateChain.ChainPolicy.TrustMode = X509ChainTrustMode.CustomRootTrust;
             certificateChain.ChainPolicy.CustomTrustStore.AddRange(rootCertificate);
-            certificateChain.ChainPolicy.RevocationMode = X509RevocationMode.Offline;
-            certificateChain.ChainPolicy.RevocationFlag = X509RevocationFlag.ExcludeRoot;
+            certificateChain.ChainPolicy.ExtraStore.AddRange(rootCertificate);
+            certificateChain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
+            certificateChain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
             certificateChain.ChainPolicy.DisableCertificateDownloads = false;
-            certificateChain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags;
+            certificateChain.ChainPolicy.VerificationFlags =
+                X509VerificationFlags.IgnoreEndRevocationUnknown;
             _logger?.LogDebug("Using custom root certificate");
         }
         else {
             certificateChain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
             certificateChain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
+            certificateChain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
+            certificateChain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 30);
         }
 
-        certificateChain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
-        certificateChain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 30);
 
         var result = certificateChain.Build(certificate);
 
@@ -71,7 +74,6 @@ public class CertificateHelper {
         // }
         // root ??= new X509Certificate2(Convert.FromBase64String(key.X5t));
 
-
         var valid = certificates.Aggregate(true,
             (result, cert) => result
                               && ValidateCertificate(cert, out _, root, logLevel)
@@ -90,6 +92,7 @@ public static class X509Certificate2Extensions {
         builder.AppendLine("-----END CERTIFICATE-----");
         var content = builder.ToString();
 
-        File.WriteAllText(fileName, content);
+        File.WriteAllText(fileName + ".pem", content);
+        File.WriteAllText(fileName + ".json", JsonConvert.SerializeObject(certificate));
     }
 }
diff --git a/IntegrationTests/IntegrationTests.csproj b/IntegrationTests/IntegrationTests.csproj
index 567f9503..99182c0c 100644
--- a/IntegrationTests/IntegrationTests.csproj
+++ b/IntegrationTests/IntegrationTests.csproj
@@ -48,21 +48,12 @@
         <None Update="certificates\revokedEncJWK.json">
           <CopyToOutputDirectory>Always</CopyToOutputDirectory>
         </None>
-        <None Update="certificates\ca.30244.der">
-          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
-        </None>
         <None Update="temp\readme.md">
           <CopyToOutputDirectory>Always</CopyToOutputDirectory>
         </None>
         <None Update="certificates\invalidEncJwkWithLessThan3Certificates.json">
           <CopyToOutputDirectory>Always</CopyToOutputDirectory>
         </None>
-        <None Update="certificates\ca.26281.der">
-          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
-        </None>
-        <None Update="certificates\ca.26305.der">
-          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
-        </None>
         <None Update="certificates\roots\ca.21636.der">
           <CopyToOutputDirectory>Always</CopyToOutputDirectory>
         </None>
@@ -102,6 +93,51 @@
         <None Update="certificates\roots\ca.29387.der">
           <CopyToOutputDirectory>Always</CopyToOutputDirectory>
         </None>
+        <None Update="certificates\root\ca.26281.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\root\ca.26305.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\root\ca.30244.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\root\root.pem">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\roots\ca.1534.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\roots\ca.1553.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\roots\ca.1570.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\roots\ca.1587.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\roots\ca.1604.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\roots\ca.1622.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\roots\ca.1639.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\roots\ca.1656.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\roots\ca.1673.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\roots\ca.26281.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+        <None Update="certificates\roots\ca.26305.der">
+          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
     </ItemGroup>
 
 </Project>
-- 
GitLab