2016-06-20 9 views
0

Ich stecke auf etwas, von dem ich wahrscheinlich weitergehen sollte, aber es macht mich verrückt ... Ich kann das SSL-Zertifikat programmatisch aktualisieren Verwendung von Informationen für einen selbst gehosteten WCF-Dienst:Programmgesteuertes Ändern von web.config für einen selbst gehosteten Dienst (nicht über Änderungen in applicationHost.config)

Dim config As Microsoft.Web.Administration.Configuration = _ 
    serverManager.GetApplicationHostConfiguration 
site.Bindings.Clear() 
Dim binding = site.Bindings.Add(ipport, cert.GetCertHash, store.Name) 
serverManager.CommitChanges() 

und kann auch Abschnitte meines lokalen web.config ändern, um einen bekannten Dateipfades beginnend mit der Verwendung von:

Dim cfg As System.Configuration.Configuration = _ 
    System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(ConfigFileMap, target) 

aber wenn ich versuche, nach unten zu bohren zu system.webServer/Sicherheit/Zugriff mit:

Dim accessSection = cfg.GetSection("system.webServer/security") 

ich nichts/null und weiter graben helfend diesen Status für den Abschnitt „System.Configuration.IgnoreSection“ erzeugt, die offenbar darauf hinweisen, dass System.Configuration will nicht mit diesem speziellen Stück schön spielen - auch obwohl es Zugriff in Anwendung nicht verweigert wirdHost so nah wie ich sagen kann.

Auf der anderen Seite, wenn ich versuche, Microsoft.Web.Administration zu verwenden, kann ich nur herausfinden, wie die Änderung in applicationHost.config, nicht in der lokalen web.config.

Die einzige Sache, die die Clientzertifikatanforderung (sslFlags-Einstellung) in die lokale web.config zu legen scheint, ist der IIS-Manager (der die Einstellung auch nicht korrekt anzeigt, wenn sie sich in applicationHost.config befindet).

Offensichtlich gibt es alle möglichen Wege, dies zu tun, aber ich kann nicht glauben, dass es keine einfache Punktnetzweise gibt (anders als das Bearbeiten des xml). Weiß jemand, was zum Teufel ich falsch mache?

+0

Sie erkennen, dass, wenn Sie die web.config zur Laufzeit ändern, wird die Anwendung neu starten? – Tim

+0

Ich will es - es ist keine öffentlich zugängliche Website. Außerdem, wenn das SSL-Zertifikat abgelaufen ist, würde es sowieso nicht funktionieren :-) – saminpa

+0

Sie könnten sich jedoch in einer Endlosschleife finden - starten Sie die App, ändern Sie die Konfigurationsdatei, App startet neu, ändert die Konfigurationsdatei, wiederholen. Es sei denn, Sie haben Logik, um zu verhindern, dass sie in diesen Zustand eintritt. – Tim

Antwort

0

Doh !!! Anscheinend muss ich lernen, das Handbuch zu lesen (obwohl MS es nicht einfach macht).

Sie können einfach tun:

Using serverManager As New ServerManager 
    Dim config As Microsoft.Web.Administration.Configuration = _ 
     serverManager.GetWebConfiguration("site name", "/application") 
    Dim accessSection As Microsoft.Web.Administration.ConfigurationSection = _ 
     config.GetSection("system.webServer/security/access") 
    accessSection("sslFlags") = "Ssl,SslRequireCert" 
    serverManager.CommitChanges() 
End Using 

Rückwirkend offensichtliche Verbindung: Relevant StackOverflow Question