app.config verschlüsseln

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    app.config verschlüsseln

    Hallo zusammen,

    ich möchte gern einen Teil meiner app.config verschlüsseln.

    Leider klappt das nicht wie geplant.

    Ein Teil der app.config sieht so aus und soll verschlüsselt werden.

    Quellcode

    1. <connectionStrings>
    2. <add name="DBString"
    3. connectionString="blablabla"
    4. providerName="blablabla"/>
    5. </connectionStrings>


    Die Datei liegt im .....\bin\Debug - Verzeichnis. Und soll nach dem Start der Anwendung verschlüsselt werden.

    Ich probiere es derzeit mit dem diesem Code:

    Quellcode

    1. Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
    2. Dim section As ConnectionStringsSection = TryCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
    3. If Not IsNothing(section) = True Then
    4. If section.SectionInformation.IsLocked = False Then
    5. If section.SectionInformation.RequirePermission = False Then
    6. section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider")
    7. section.SectionInformation.ForceSave = True
    8. config.Save(ConfigurationSaveMode.Full, True)
    9. End If
    10. End If
    11. End If


    Bin für jede Hilfe dankbar.

    Dirk
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @Dirk2006
    Ich verschlüssle meinen Connectionstring immer so:

    VB.NET-Quellcode

    1. Private Shared Sub ProtectConfig(Optional Protect As Boolean = True)
    2. Dim conf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
    3. Dim sect = conf.GetSection("connectionStrings") '("appSettings")
    4. If sect IsNot Nothing Then
    5. If Not sect.IsReadOnly() Then
    6. With sect.SectionInformation 'DataProtectionConfigurationProvider, RsaProtectedConfigurationProvider, DpapiProtectedConfigurationProvider
    7. If Protect = .IsProtected Then Return
    8. If Protect Then .ProtectSection("DataProtectionConfigurationProvider") Else .UnprotectSection()
    9. .ForceSave = True
    10. End With
    11. conf.Save(ConfigurationSaveMode.Modified)
    12. End If
    13. End If
    14. End Sub

    msdn.microsoft.com/de-de/library/ms254494(v=vs.110).aspx
    Hat zufällig jemand von euch mit der EnterpriseLibrary erfahrung?
    Meine bisherigen Versuche die app.config zu verschlüsseln haben dazu geführt, dass diese den ConnectionString nicht mehr lesen kann, da dieser wohl schon vor Aufruf der Main() gelesen wird, und ich so keine Chance habe den ConnectionString rechtzeitig zu entschlüsseln.
    Erstmal vielen Dank für die Antworten....

    mrMo....sicher auch eine Möglichkeit, aber ich arbeite lieber mit Konfigurationsdateien......

    VB1963....das Beispiel werde ich heute Abend mal testen .... vielen Dank......

    EaranMaleasi....keine Ahnung :(.......

    exc-jdbi.....schade, den Artikel hätte ich gern gelesen.......

    Dirk
    Bei mir klappt das einfach nicht.....

    Wo hast Du denn die app.config liegen?

    Auch im Verzeichnis .....bin\debug mit der "Projekt.exe" ??

    Hast Du unter den Eigenschaften der app.config die Einstellung - Datei immer kopieren ??

    Ich habe es mal anders probiert:

    Quellcode

    1. Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
    2. Dim section As ConnectionStringsSection = TryCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
    3. If Not IsNothing(section) = True Then
    4. If section.SectionInformation.IsLocked = False Then
    5. If section.SectionInformation.RequirePermission = False Then
    6. If section.SectionInformation.IsDeclared = True Then => Fehler
    7. section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider")
    8. section.SectionInformation.ForceSave = True
    9. config.Save(ConfigurationSaveMode.Full, True)
    10. end if
    11. end if
    12. endif
    13. end if


    Jetzt bekomme ich den Fehler, dass er in der app.config den "section-Teil" nicht findet!?

    Dirk
    Finde ich komisch. Die app.config muss Build Action = None haben.

    Die app.config kann man ganz normal mit rechte MAusklick auf das Projekt >> Add >> New Item >> XML-File erstellen, und dann den oben erwähnten <connectionStrings> eifügen.

    Der Rest steht im Link wie von @VB1963 erwähnt noch gut beschrieben.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    Bei mir lauft alles so, wie ich es mir vorstelle. Das sogar im Debug-Modus.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Xml
    4. Imports System.Windows.Forms
    5. Imports System.Configuration
    6. Public Module Module1
    7. Public Sub Main()
    8. Dim ConfigNameExe As String = Application.ExecutablePath
    9. 'WICHTIG: Vercrypten (=True)
    10. ProtectConfig(ConfigNameExe, False)
    11. GetData(ConfigNameExe)
    12. Console.ReadLine()
    13. End Sub
    14. Private Sub ProtectConfig(ByVal ConfigNameExe As String, ByVal Protect As Boolean)
    15. Dim conf = ConfigurationManager.OpenExeConfiguration(ConfigNameExe)
    16. Dim sect = DirectCast(conf.GetSection("connectionStrings"), ConnectionStringsSection)
    17. If sect IsNot Nothing Then
    18. If Not sect.IsReadOnly() Then
    19. With sect.SectionInformation
    20. If Protect = .IsProtected Then Return
    21. If Protect Then
    22. .ProtectSection("DataProtectionConfigurationProvider")
    23. Else : .UnprotectSection()
    24. End If
    25. .ForceSave = True
    26. End With
    27. conf.Save(ConfigurationSaveMode.Modified)
    28. Console.WriteLine("Protected={0}", sect.SectionInformation.IsProtected)
    29. End If
    30. End If
    31. End Sub
    32. Private Sub GetData(ByVal ConfigNameExe As String)
    33. Using reader As New XmlTextReader(ConfigNameExe & ".config")
    34. While reader.Read()
    35. Select Case reader.NodeType
    36. Case XmlNodeType.Element : Console.WriteLine("<" + reader.Name & ">")
    37. Case XmlNodeType.Text : Console.WriteLine(reader.Value)
    38. Case XmlNodeType.None : Stop
    39. Case XmlNodeType.EndElement ': Console.WriteLine
    40. End Select
    41. End While
    42. Console.WriteLine()
    43. End Using
    44. End Sub
    45. End Module


    Freundliche Grüsse

    exc-jdbi
    Die "Verschlüsselung" ist wohl ein Witz.
    Ich hab jetzt einen ConfigReader gebastelt, der kann configs anderer Anwendungen öffnen.
    Und auslesen, inklusive der connectionstring-section, ob die nun "verschlüsselt" oder nicht.

    Die Sache ist super-primitiv: einfach per openfileDialog die exe(!) wählen, mit ConfigurationManager deren config holen, davon die connectionstring-Section einem Propertygrid übergeben:

    VB.NET-Quellcode

    1. Private Sub SelectConfig()
    2. If OpenFileDialog1.ShowDialog <> DialogResult.OK Then Return
    3. Dim conf = ConfigurationManager.OpenExeConfiguration(OpenFileDialog1.FileName)
    4. PropertyGrid1.SelectedObject = conf.ConnectionStrings
    5. End Sub
    Und dann kann man schön die Connectionstrings angugge 8|
    So, habe jetzt meine Experimente auf einen anneren Rechner transferiert, und kann deine Aussage genau bestätigen: Nur der User, der die ConfigSection protected hat, kann sie auch wieder entschlüsseln.

    DAmit hänge ich aber wieder am Problem aussm vorigen Post: Ist es dann doch nicht über diesen Weg möglich, eine Anwendung zu verteilen, ohne zb unverschlüsselte DB-Passworte mitzugeben?
    Oder würde man im Setup eine Routine einbauen, die die entpackte config dann gleich erstmal verschlüsselt?

    Auf Arbeit arbeiten wir auch mit Webservices - deren Configs sind auch unverschlüsselt - mich beschleicht ein bischen das Gefühl, dass man da auch was unternehmen müsstete...

    ErfinderDesRades schrieb:

    die entpackte config dann gleich erstmal verschlüsselt?
    Ich denke, es kommt darauf an, wer der Kunde ist?
    Ist es ein Admin, der das Programmpaket nachher betreut, dann soll der vollen Zugriff auf die Configs haben und entscheiden können,
    wann er's verschlüsselt - die User solltens nicht entschlüsseln können...

    ErfinderDesRades schrieb:

    und das geht?
    Ich habe dein kleines Tool ausprobiert:
    Bei mir wird dort eine ganz andere Verbindungszeichenfolge angezeigt - nicht die, die ich fabriziert habe? Egal, ob ich's verschlüsselt habe oder nicht? 8|
    Mache ich da mit deinem Tool etwas falsch :whistling: