Zertifikate nach gültigkeit auslesen

  • VB.NET

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

    Zertifikate nach gültigkeit auslesen

    Hi,
    Ich hab schon gefühlt das halbe Internet danach durchsucht...
    Ich suche nach einer Möglichkeit "eigene Zertifikate" auszulesen, eher gesagt die Gültigkeit.

    Ich würde es dann gerne in einer Textbox anzeigen lassen

    z.b

    Zertifikat xxx ist bis zum yyy gültig oder Zertifikat [beliebiges eigenes Zertifikat] läuft am [ablaufdatum] ab.

    Ich würde mich richtig über hilfe freuen, ich währe dafür sehr dankbar.
    MfG Jimpo ;)

    p.s das hier hab ich schon gesehen: docs.microsoft.com/de-de/dotne…-selection-and-validation

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

    @Jimpo In Deinem Post kommt 4 (vier) Mal xxx in unterschiedlicher Bedeutung vor.
    Poste ein richtiges Textbeispiel, gern kannst Du "Müller" oder so durch "Rumpelstielzchen" ersetzen, allerdings sollten andersartige Trennzeichen stehen bleiben.
    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!

    Jimpo schrieb:

    naja ich glaube jeder versteht, was damit gemeint wird.
    OK, ich bin nicht jeder.
    Was davonn willst Du denn nun auslesen?
    Splitte mal den String am Leerzeichen.
    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!

    Jimpo schrieb:

    Bei welchem Lerrzeichen, da sind mehrere.
    docs.microsoft.com/de-de/dotne…string.split?view=net-5.0
    Über welche Programmiererfahrung verfügst Du :?:
    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!
    Bei einer Skala von 1 bis 100 (1: heute angefangen, 100: Erfahrungen eines @ErfinderDesRades, @Nofear23m oder @RodFromGermany), dann kann ich die 5 akzeptieren.
    Ich würde mich selbst auch nur bei 20 bis vlt. 30 sehen, je nach Thema auch bei 0. Jedenfalls diesem Thread nach allein kann ich locker behaupten, du leidest an Selbstüberschätzung.
    Gut, dann kannst du @RodFromGermany seinen Versuch dir zu helfen doch auch locker umsetzen.
    Das Stichwort von ihm war String.Split, eine gut dokumentierte Methode. Wenn du den Code auf der Seite nicht verstehst, dann kannst du den Code auch oben auf der Seite umstellen, angeboten sind da die Sprachen C#, VB (.Net), C++ und F#.
    Wie splittet man einen String, kommt drauf an welches Muster zum Splitten im String vorhanden ist, oder? Gut, den @RodFromGermany hat dir auch den Hinweis gegeben, den String doch am Leerzeichen zu splitten.
    Deine wenig geistreiche Bemerkung dazu war: Bei welchem Lerrzeichen, da sind mehrere.. Nun, gemeint war so etwas (aus dem Kopf und nicht getestet):

    VB.NET-Quellcode

    1. Dim words As String() = "Zertifikat xxx ist bis zum yyy gültig oder Zertifikat [beliebiges eigenes Zertifikat] läuft am [ablaufdatum] ab.".Split(New Char() {" "c})

    Wenn du dir jetzt noch die Mühe machst zu verstehen was words ist (Datentyp) und welches Element das gewünschte Ergebnis enthält, bist du einen Schritt weiter.
    Also mit deiner Einschätzung Dann wohl wher ne solide 3 bin ich einverstanden, bei aus 100.
    @Dksksm

    words ist doch die variable und beinhaltet den Text rechts neben dran.

    Der text schneidet bei jedem Leerzeichen das Wort ab z.b "Zertifikat" "xxx" "ist" usw. das hab ich soweit verstanden. Ich habe leider nur nicht genau verstanden
    das @RodFromGermany es so gemeint hat.

    Würde es aber nicht auch so gehen?

    VB.NET-Quellcode

    1. Dim test as String
    2. Dim xxx as String
    3. Dim yyy as Integer
    4. test = "Zertifikat"
    5. xxx = (placeholder)
    6. yyy = (placeholder)
    7. Textbox1.text = "Zertifikat " & xxx & " ist bis zum" & yyy & " gültig"



    Nja wie auch immer.
    Wir währe es halt wichtig wie man xxx oder yyy herausfindet.

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

    Jimpo schrieb:

    Wir währe es halt wichtig wie man xxx oder yyy herausfindet.
    Wenn Du das Array der einzelnen Teile Deines Strings hast, gib das Element mit dem interessierenden Index aus.
    Zum Test gibst Du das Array in einer ListBox aus.
    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!

    Jimpo schrieb:

    von wo bekommt man die Zertifikate?

    VB.NET-Quellcode

    1. Dim Store As New X509Store(StoreName.Root, StoreLocation.LocalMachine)
    2. Store.Open(OpenFlags.ReadOnly)
    3. For Each Cert In Store.Certificates
    4. Debug.Print($"{Cert.FriendlyName} -- {Cert.NotAfter}")
    5. Next

    benötigt Imports System.Security.Cryptography.X509Certificates
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Jimpo schrieb:

    von wo bekommt man die Zertifikate?
    Jeder, der diesen Thread von Beginn an verfolgt, setzt implizit voraus, dass Du das bereits weißt.
    Ansonsten machst Du ja den zweiten Schritt vor dem ersten.
    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!
    @RodFromGermany

    Das mit den Zertifikaten war ja meine Hauptfrage.
    Aber danke für die mühe

    @petaod

    Vielen dank, das ist genau das wonach ich suche.
    Fragen:
    Kann man auch irgendwie den Namen des Zertifikates bekommen?
    Wo genau steht in dem code der Parameter, wo man aussucht, welches Zertifikat ausgelesen wird?


    Leider wird aber ein anderer Zertifikat-Ordner ausgewählt, weil dort steht bei mir ein anderes Datum als bei dem Zertifikat, das ich auslesen will.
    Ich suche es für "Eigene Zertifikate". Und ich glaube es wird nur das Datum gezeigt, wann das Zertifikat erstellt wurde.

    Vielen vielen dank für die Mühe Leute

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

    Jimpo schrieb:

    Kann man auch irgendwie den Namen des Zertifikates bekommen?
    ?? Ist Cert.FriendlyName nicht das, was du suchst?

    Jimpo schrieb:

    Wo genau steht in dem code der Parameter, wo man aussucht, welches Zertifikat ausgelesen wird?
    Gar nicht.
    Es werden alle Zertifikate gelistet, die im KeyStore enthalten sind.

    Jimpo schrieb:

    es wird nur das Datum gezeigt, wann das Zertifikat erstellt wurde
    Es wird das Ablaufdatum angezeigt (Cert.NotAfter).

    Jimpo schrieb:

    Ich suche es für "Eigene Zertifikate".
    Ich weiss nicht, wie dein Zertifikatsspeicher aufgebaut ist.
    Musst halt die einzelnen Möglichkeiten durchgehen.
    Oder mit dem Keystore Explorer analysieren.
    Versuchs mal mit Storename.My
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    hi, @petaod

    Storename.My zeigt gensu das gleiche an.

    Ich kann es ja ungefähr erklären, wie es bei mir aufgebaut ist.


    Wenn ich bei Windows auf Benutzerzertifikate Verwalten gehe,
    dann ist bei mir ein Ordner: Zertifikate - Aktueller Benutzer.
    In diesem Ordner fnde ich den Ordner Eigene Zertifikate und diese will ich auslesen.
    Rechts steht immer oben "Name des Logischen speichers"

    Irgendwie wenn ich auch z.b StoreName.Disallowed eingebe ist immer wieder das gleiche Datum

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

    @petaod Wo genau soll es eingefügt werden?
    Ach habs herausgefunden.

    Da wird aber immernoch das gleiche Datum, wie bei den anderen angezeigt.

    Auch wenn ich

    VB.NET-Quellcode

    1. StoreLocation.CurrentUser
    komplett entferne, ändert es irgendwie nichts.


    Bei mir siehts grad so aus:

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim Store As New X509Store(StoreName.Root, StoreLocation.CurrentUser)
    4. Store.Open(OpenFlags.ReadOnly)
    5. For Each Cert In Store.Certificates
    6. TextBox1.Text = ($"{StoreName.My} -- {Cert.NotAfter}")
    7. Next
    8. End Sub
    9. End Class

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