Просмотр исходного кода

Add certificate callback for influx2

Nick Babcock 2 лет назад
Родитель
Сommit
701c72c1ec

+ 1 - 2
OhmGraphite.Test/InfluxTest.cs

@@ -238,13 +238,12 @@ namespace OhmGraphite.Test
             await tlsContainer.StartAsync();
 
             var baseUrl = $"https://{tlsContainer.Hostname}:{tlsContainer.GetMappedPublicPort(8087)}";
-            var configMap = new ExeConfigurationFileMap { ExeConfigFilename = "assets/influx2.config" };
+            var configMap = new ExeConfigurationFileMap { ExeConfigFilename = "assets/influx2-ssl.config" };
             var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
             config.AppSettings.Settings["influx2_address"].Value = baseUrl;
             var customConfig = new CustomConfig(config);
             var results = MetricConfig.ParseAppSettings(customConfig);
 
-            MetricConfig.InstallCertificateVerification("false");
             try
             {
                 using var writer = new Influx2Writer(results.Influx2, "my-pc");

+ 1 - 0
OhmGraphite.Test/OhmGraphite.Test.csproj

@@ -22,6 +22,7 @@
     <None Include="..\assets\prometheus.config" Link="assets/prometheus.config" CopyToOutputDirectory="PreserveNewest" />
     <None Include="..\assets\influx.config" Link="assets/influx.config" CopyToOutputDirectory="PreserveNewest" />
     <None Include="..\assets\influx2.config" Link="assets/influx2.config" CopyToOutputDirectory="PreserveNewest" />
+    <None Include="..\assets\influx2-ssl.config" Link="assets/influx2-ssl.config" CopyToOutputDirectory="PreserveNewest" />
     <None Include="..\assets\default.config" Link="assets/default.config" CopyToOutputDirectory="PreserveNewest" />
     <None Include="..\assets\graphite.config" Link="assets/graphite.config" CopyToOutputDirectory="PreserveNewest" />
     <None Include="..\assets\static-name.config" Link="assets/static-name.config" CopyToOutputDirectory="PreserveNewest" />

+ 3 - 0
OhmGraphite/Influx2Config.cs

@@ -51,6 +51,9 @@ namespace OhmGraphite
             }
             builder.Org(org);
 
+            var validation = MetricConfig.CertificateValidationCallback(config["certificate_verification"] ?? "True");
+            builder.RemoteCertificateValidationCallback(validation);
+
             return new Influx2Config(builder.Build());
         }
     }

+ 9 - 7
OhmGraphite/MetricConfig.cs

@@ -133,31 +133,33 @@ namespace OhmGraphite
             }
         }
 
-        public static void InstallCertificateVerification(string type)
+        public static RemoteCertificateValidationCallback CertificateValidationCallback(string type)
         {
             switch (type.ToLowerInvariant())
             {
                 // Do not change default .net behavior when given True
                 case "true":
-                    break;
+                    return null;
 
                 // Do not verify certificate
                 case "false":
-                    ServicePointManager.ServerCertificateValidationCallback =
-                        (sender, certificate, chain, errors) => true;
-                    break;
+                    return (sender, certificate, chain, errors) => true;
 
                 // Else assume that it points to a file path of a self signed
                 // certificate that we will check against
                 default:
                     var cert = new X509Certificate2(type);
-                    ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) =>
+                    return (sender, certificate, chain, errors) =>
                         errors == SslPolicyErrors.None ||
                         string.Equals(cert.Thumbprint, certificate.GetCertHashString(), StringComparison.InvariantCultureIgnoreCase);
-                    break;
             }
         }
 
+        public static void InstallCertificateVerification(string type)
+        {
+            ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallback(type);
+        }
+
         public bool TryGetAlias(string v, out string alias) => Aliases.TryGetValue(v, out alias);
         public bool IsHidden(string id) => HiddenSensors.Any(x => x.IsMatch(id));
     }

+ 12 - 0
assets/influx2-ssl.config

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <appSettings>
+    <add key="type" value="influx2" />
+    <add key="influx2_address" value="http://localhost:8086" />
+    <add key="influx2_org" value="myorg" />
+    <add key="influx2_bucket" value="mydb" />
+    <add key="influx2_token" value="thisistheinfluxdbtoken" />
+    <add key="interval" value="5" />
+    <add key="certificate_verification" value="false" />
+  </appSettings>
+</configuration>