Zertifikate nach gültigkeit auslesen

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Neu

    @petaod Habs jetzt mit einem Breakpoint probiert, es war jedes mal ein anderes Zertifikat, es lag wahrscheinlich daran, das die Textbox immer nur 1 Zertifikat genommen hat. Hab daraus jetzt eine List-Box gemacht, mein fehler.
    Kann man auch automatisch nur die abgelaufenen ausgeben?

    Hab aber ein Proble, dort ist nicht das Zertifikat dabei, das ich suche.
    Man braucht für das auch übrigens einen Schlüssel

    Neu

    Jimpo schrieb:

    es war jedes mal ein anderes Zertifikat
    Natürlich ist das jedes Mal ein anderes Zertifikat.
    Die Schleife läuft alle Zertifikate im Store durch.

    Jimpo schrieb:

    Kann man auch automatisch nur die abgelaufenen ausgeben?
    Du musst halt prüfen, ob das Ablaufdatum in der Vergangenheit liegt

    VB.NET-Quellcode

    1. Dim Expired = Cert.NotAfter < DateTime.Now
    und nur diese anzeigen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Neu

    @Jimpo Wie beschaffe ich mir Informationen?
    Informiere Du uns bitte mal, was es alles für Möglichkeiten bei StoreName und StoreLocation gibt.
    Hier ist nicht so sehr die Antwort, sondern die Herangehensweise wichtig, die kann Dir auch bei anderen Problemen helfen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    @RodFromGermany Ich hab schon einige Sachen asuprobiert, leidr sind meine programmierkentnisse nicht so ausgereift, dass ich alleine das Problem finden könnte.

    StoreName ist der Zertifikatsspeicher, der halt geöffnet werden soll und StoreLocation gibt den Speicherort also Pfad des Zertifikatsspeichers an.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Jimpo“ ()

    Neu

    Jimpo schrieb:

    Dim Store As New X509Store(StoreName.Root, StoreLocation.CurrentUser)
    Store.Open(OpenFlags.ReadOnly)
    For Each Cert In Store.Certificates
    TextBox1.Text = ($"{StoreName.My} -- {Cert.NotAfter}")
    Next
    Ich glaube, du hast da grundlegend was falsch verstanden.
    Du sollst mit den Parametern in der ersten Zeile variieren (StoreName.*, StoreLocation.*).
    In Zeile 4 sollst du jeweils die Parameter Cert.FriendlyName und Cert.NotAfter anzeigen.
    Und wenn du das in einer TextBox willst, musst du die Daten dort anhängen, sonst wird die immer überschrieben und am Ende nur der letzte Eintrag angezeigt.

    Wenn du mein Beispiel aus Post #14 verwendest, hast du alle Zertifikate im Direktfenster stehen.
    Wenn dann dein Zertifikat noch nicht dabei ist, musst du halt mit den StoreName und StoreLocation Parametern variieren.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Neu

    Hab gerade herumprobiert und es ging.

    Ich dankeech beiden vielmals für eure Hilfe, esis genau so wie ich es mir vorgestellt hab.

    @petaod
    @RodFromGermany


    Lösung:

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Security.Cryptography
    3. Imports System.Security.Cryptography.X509Certificates
    4. Imports System.IO
    5. Public Class Form2
    6. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    7. Dim Store As New X509Store(StoreName.My, StoreLocation.CurrentUser)
    8. Store.Open(OpenFlags.ReadOnly)
    9. For Each Cert In Store.Certificates
    10. Dim Expired = Cert.NotAfter < DateTime.Now
    11. ' If Expired = True Then
    12. ListBox1.Items.Add(($"{StoreName.My} -- {Cert.NotAfter}"))
    13. ' End If
    14. Next
    15. End Sub
    16. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    17. End Sub
    18. End Class[url='https://www.vb-paradise.de/index.php/User/10037-RodFromGermany/'][/url]



    Edit: @petaod Da gibt es noch etwas, was ich nicht bedacht habe, kann man abfragen, ob der Eigene Zertifikat Ordner leer ist, also wenn dort keine Zertifikate sind?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Jimpo“ ()

    Neu

    Jimpo schrieb:

    ListBox1.Items.Add(($"{StoreName.My} -- {Cert.NotAfter}"))
    So kriegst du doch gar nicht raus, welches Zertifikat es ist.

    VB.NET-Quellcode

    1. ListBox1.Items.Add(($"{Cert.FriendlyName} -- {Cert.NotAfter}")


    Jimpo schrieb:

    kann man abfragen, ob der Eigene Zertifikat Ordner leer ist
    Store.Certificates.Count
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Neu

    Jimpo schrieb:

    Ich hab schon einige Sachen asuprobiert
    Insbesondere hast Du weggelassen, mal den ObjectBrowser zu befragen, Frau Google zu befragen usw.
    docs.microsoft.com/en-us/dotne…rtificates_StoreLocation_
    StoreLocation ist ein Enum mit dem Werten CurrentUser und LocalMachine.
    OpenFlags ist ein Enum mit dem Werten IncludeArchived, MaxAllowed, OpenExistingOnly, ReadOnly und ReadWrite.
    Da kommst Du hin, indem Du X509Store(StoreName.Root, StoreLocation.CurrentUser) bei Frau Google einträgst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!