-- =================================================================================================================== -- SQLI-SYN-003: TLS-certifikatet udløber snart -- =================================================================================================================== -- Regel-id: SQLI-SYN-003 -- Titel: TLS-certifikatet udløber snart -- Alvor: Medium; High inden for CertificateCriticalDays; Critical når det er udløbet. -- Versioner: Alle HTTPS-servere (TLS 1.2 og nyere fra agentens server). -- -- Hvad tjekkes, og hvorfor: -- Når certifikatet på en HTTPS-adresse udløber, afviser browsere og integrationer forbindelsen (eller viser en -- sikkerhedsadvarsel), og siden er i praksis nede. Udløbsdatoen læses ved hvert HTTPS-tjek – også når certifikatet -- afvises (fx selvsigneret). -- -- Vurdering (sker i C# ud fra de indsamlede data, ikke på den overvågede server): -- Kun HTTP-tjek med https://. Den nyeste kørsel, der har set et certifikat, bruges: dage til udløb = NotAfter − nu. -- Uden set certifikat endnu: "ikke målbar". Andre tjek: "ikke relevant". -- -- Grænseværdier (agentens appsettings.json): -- SQLInsight:SyntheticChecks:CertificateWarningDays standard 21 (fund når certifikatet udløber inden for så mange dage) -- SQLInsight:SyntheticChecks:CertificateCriticalDays standard 7 (Høj inden for så mange dage) -- -- Rettigheder: -- Ingen ud over netværksadgang fra agentens server til adressen. -- -- Data kommer fra (collector, fil – medlemmer, interval): -- src/SQLInsight.Servers/Synthetic/SyntheticCheckRunner.cs – HttpAsync (RemoteCertificateValidationCallback gemmer -- certifikatets NotAfter og Subject), fra src/SQLInsight.Agent/Servers/SyntheticCheckService.cs – RunCheckAsync. -- Regelkode: src/SQLInsight.Rules/Servers/SyntheticCheckRules.cs : CertificateExpiryRule -- -- Read-only: Ja. Reglen sender ingen SQL og ændrer intet; filen indeholder kun kommentarer. -- =================================================================================================================== -- Reglen bruger ikke SQL. Tjekket er en HTTPS GET; filen indeholder kun kommentarer og ændrer intet. -- -- Efterprøv med PowerShell (skrivebeskyttet; kør på agentens server): -- $c = New-Object System.Net.Sockets.TcpClient('ep.firma.local', 443) -- $s = New-Object System.Net.Security.SslStream($c.GetStream(), $false, { $true }) -- $s.AuthenticateAsClient('ep.firma.local'); $s.RemoteCertificate.GetExpirationDateString(); $c.Close()