Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Certificate ExpirationDate auslesen

Certificate ExpirationDate auslesen
02.03.2024 17:27:13
ExcelBaer
Hallo liebe Excel-Fans,
ich möchte per VBA das Gültigkeitsdatum des Zertifikates abfragen.
Dazu habe ich https://learn.microsoft.com/de-at/office/vba/api/Office.SignatureInfo.GetCertificateDetail gefunden.
"objSignatureInfo.GetCertificateDetail(certdetExpirationDate)" liefert Laufzeitfehler 438 "Objekt unterstützt diese Eigenschaft oder Methode nicht".
Wie setze ich das Objekt "objSignatureInfo"?
Hat jemand einen Tipp, was ich tun könnte?
Ciao Bär

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Certificate ExpirationDate auslesen
02.03.2024 18:59:20
schauan
Hallöchen,

DU brauchst da z.B. einen Verweis auf die Microsoft Outlook - Bibliothek
AW: Certificate ExpirationDate auslesen
02.03.2024 19:12:33
Onur
" das Gültigkeitsdatum des Zertifikates" ? WELCHES Zertifikates denn?
AW: Certificate ExpirationDate auslesen
02.03.2024 19:19:20
ExcelBaer
Es geht um die Signatur des VBA-Projektes.
AW: Certificate ExpirationDate auslesen
02.03.2024 19:33:10
Onur
Kannst du es denn nicht unter Trust-Center/"Vertrauenswürdige Herausgeber" sehen ?
AW: Certificate ExpirationDate auslesen
02.03.2024 20:08:41
ExcelBaer
Ja persönlich kann man es unter Trust-Center/"Vertrauenswürdige Herausgeber" einsehen.
Nachdem aber die Nutzer meiner EXCELs nicht regelm. Nachschauen, kommt der Ablauf immer überraschend (z.B. Monatsbericht). Daher will ich via VBA beim Öffnen einen bevorstehenden (z.B. nur mehr 60 Tage) Ablauf via MessageBox aktiv anzeigen.
Anzeige
AW: Certificate ExpirationDate auslesen
03.03.2024 12:36:55
schauan
Hallöchen,

Pobier mal so was:

Sub SignatureTest()

Dim sSig As Signature
Dim sSigSet As SignatureSet
'Signaturen uebernehmen
Set sSigSet = ThisWorkbook.Signatures
'Schleife ueber alle Signaturen
For Each sSig In sSigSet.Parent.Signatures
MsgBox sSig.Details.SignatureText
MsgBox sSig.Details.IsCertificateExpired
MsgBox sSig.Details.Certificate.ExpirationDate
MsgBox sSig.Details.Creator
sSig.ShowDetails
'Schleife beim Test erst mal verlassen
Exit For
'Ende Schleife ueber alle Signaturen
Next
End Sub
Anzeige
AW: Certificate ExpirationDate auslesen
03.03.2024 12:44:11
ExcelBaer
Leider wird die FOR-Schleife sofort verlassen.
sSigSet.Parent.Signatures.count = 0
AW: Certificate ExpirationDate auslesen
03.03.2024 16:04:07
schauan
Hallöchen,

bekommst Du damit eine Aussage - Wahr bzw. >0 ?

MsgBox ThisWorkbook.VBASigned
MsgBox ThisWorkbook.Signatures.Count

AW: Certificate ExpirationDate auslesen
03.03.2024 17:19:24
ExcelBaer
Im Direktfenster bekomme ich:
?ThisWorkbook.VBASigned
Wahr
?ThisWorkbook.Signatures.Count
0
AW: Certificate ExpirationDate auslesen
04.03.2024 11:39:32
schauan
ok, dann ist das Zertifikat nicht in der Workbooks-Auflistung :-(
eventuell müsste man dann über einen externen Umweg auf die persönlichen Zertifikate zugreifen z.B. per Powershell

Du kannst mal schauen, ob es in der hierbei ausgegebenen csv steht. Ausgelesen werden damit die user-zertifikate.
Powershell starten, Kommandos nacheinader ausführen

$mycertificates = Get-ChildItem -Path Cert:\CurrentUser\My\
$mycertificates | Export-Csv -Path C:\Temp\certificates.csv -NoTyp


Anzeige
AW: Certificate ExpirationDate auslesen
04.03.2024 14:11:40
ExcelBaer
Hallo,
ich habe noch nie die PowerShell gestartet?
Kannst du mir bitte noch eine Anleitung dazu geben.
Ich habe nur EXCEL 2016 mit integrierten VBA Editor >F11>.

2. Punkt: Nachdem der VBA-Code der EXCEL-Datei signiert wird, sollte es doch eine Eigenschaft des Woorkbooks sein, oder?
AW: Certificate ExpirationDate auslesen
04.03.2024 14:14:26
ExcelBaer
VBA Editor [ALT] [F11] war gemeint.
AW: Certificate ExpirationDate auslesen
04.03.2024 16:43:09
schauan
Hallöchen,

Warum auch immer ist das VBE-Zertifikat nicht in der Auflistung vom Workbook. Dort sind dann wohl nur die Datei betreffende.
Dass das Projekt signiert ist, kannst Du aber z.B. auch im File sehen - dazu änderst Du die Dateierweiterung auf zip und gehst dann mit dem Explorer in die zip in den Ordner xl.

Powershell:

Du gehst mal unten bei Windows in das Suchfeld und gibst powershell ein. Sollte dann gefunden werden - es öffnet sich ein Fenster ähnlich wie bei cmd.
Dort fügst Du dann nacheinander die beiden Codezeilen ein.

Unter C:\Temp sollte dann eine csv liegen mit den Zertifiktsdaten. Wenn Deins darin enthalten ist, dann könnte man die Daten per Powershell abfragen.
Wenn nicht, hisse ich erst mal die weiße Fahne :-( Ich brauche Urlaub - morgen geht's los :-)

Anzeige
AW: Certificate ExpirationDate auslesen
04.03.2024 17:50:36
ExcelBaer
Besten Dank, Powershell gefunden. Nachdem ich keine Admin-Rechte im Windows habe und zudem auch noch in Citrix arbeite, habe ich kein C: Laufwerk. Frage schon den Help-Desk, wie das Mapping in Cirtix ist, Antwort vermutlich erst morgen.
In der Powershell sieht das so aus: "PS C:\Windows\system32> PS C:\Windows\system32> $mycertificates = Get-ChildItem -Path Cert:\CurrentUser\My\"

Aber wie integriere ich den Powershell-Aufruf im VBA?

Nochmals vielen Dank für intensiven Recherchen und Unterstützung.
Schönen Urlaub :)
AW: Certificate ExpirationDate auslesen
04.03.2024 17:58:28
ExcelBaer
C: durch U: zu ersetzen hat nicht funktioniert (siehe unten).
Ich verstehe die beiden Kommandos nicht, daher kann ich wenig selbst experimentieren.

PS C:\Windows\system32> $mycertificates | Export-Csv -Path U:\Temp\certificates.csv -NoTyp
Export-Csv : Ein Teil des Pfades "U:\Temp\certificates.csv" konnte nicht gefunden werden.
In Zeile:1 Zeichen:19
+ $mycertificates | Export-Csv -Path U:\Temp\certificates.csv -NoTyp
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (:) [Export-Csv], DirectoryNotFoundException
+ FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.ExportCsvCommand
Anzeige
AW: Certificate ExpirationDate auslesen
04.03.2024 18:03:48
ExcelBaer
Mein Fehler, Powershell wird ausgeführt, kein Fehler, wenn das Verzeichnis auch existiert.
Aber nur neuer Prompt (PS C:\Windows\system32>) in Powershell, ohne irgend ein Ergebnis (bzw. neue Datei) zu sehen.
AW: Certificate ExpirationDate auslesen
04.03.2024 19:07:13
schauan
Hallöchen,

1)
Gibt es auf U auch ein Temp?

2)
mit
Get-ChildItem Cert:\CurrentUser\My\
bekommst Du in Powershell auch schon ein Ergebnis, in der csv stehen aber mehr Informationen

AW: Certificate ExpirationDate auslesen
04.03.2024 19:19:56
ExcelBaer
Super, habe die CSV-Datei und mein Name kommt vor.
Und auch "NotAfter=28.01.25 11:19" kommt vor.

Stellt sich die Frage, ob beim Nicht Signatur-Owner (d.h. anderer PC) das ganze auch so funktioniert.

Stellt sich nur die Frage, wie ich das alles in ein VBA bekomme.
Besagte CSV-Datei öffnen und Datum herausparsen, bekomme ich hin.

Anzeige
AW: Certificate ExpirationDate auslesen
04.03.2024 20:42:16
schauan
Hallöchen,

so, hier wäre erst mal ein Code, mit dem Du die Daten direkt, ohne CSV, einlesen kannst. Du müsstest nun mal schauen, ob der auszuführen geht und ob das Ergebnis dann auch die Daten enthält. Dann könntest Du das auch auf einem anderen Rechner ausprobieren. Der Code trägt das Ergebnis in Tabelle1, A1, ein.

Sub PowerShell_ReadCert()

Dim strCommand$, objWshShell As Object, objWshShellExec As Object
strCommand = "Powershell -command Get-ChildItem -Path Cert:\CurrentUser\My\"
Set objWshShell = CreateObject("WScript.Shell")
Set objWshShellExec = objWshShell.Exec(strCommand)
strOutput = objWshShellExec.StdOut.ReadAll
Sheets("Tabelle1").Range("A1").Value = strOutput
End Sub
Anzeige
AW: Certificate ExpirationDate auslesen
04.03.2024 21:19:42
ExcelBaer
Funktioniert fast traumhaft :)
Leider schneidet die Zelle bei 449 Zeichen ab.
Auch strOutput als Variant bringt nicht den gesamten String, gerade das Ablaufdatum fehlt.
AW: Certificate ExpirationDate auslesen
04.03.2024 21:55:47
schauan
Hallöchen,

nimm mal als Kommando

strCommand = "Powershell -command Get-ChildItem -Path Cert:\CurrentUser\My\ | Format-List"

AW: Certificate ExpirationDate auslesen
04.03.2024 22:25:48
ExcelBaer
Mein Traum ist vollendet.

Mit "=TEIL(A1;SUCHEN("NotAfter";A1)+15;8)" bekomme ich das Ablauf-Datum (ohne Uhrzeit) heraus.
Offen bleibt noch, ob das Datumsformat durch die Systemsteuerung (z.B. TT.MM.JJJJ vs. TT.MM.JJ) beeinflusst wird.
Interessant sind auch die Delimiter zwischen "NotAfter" und ":".
Evtl. Blank oder Tab, ich hab's noch nicht geprüft.

Weiters stellt sich noch die Frage, ob das Ablaufdatum des Singators (auf dem Win-PC) oder die der EXCEL-Datei angezeigt wird.
Ich tippe auf Signator.

Jedenfalls herzlichen Dank und schönen Urlaub :)
Anzeige
AW: Certificate ExpirationDate auslesen
11.03.2024 12:58:06
ExcelBaer
Meine Tests haben ergeben, dass das Certificate des Signators ausgelesen wird und nicht die der EXCEL-Datei.
AW: Certificate ExpirationDate auslesen
11.03.2024 15:26:21
schauan
Hallöchen,

ja, aber wenn Du das Zertifikat der Datei installierst, welches hoffentlich ein anderes ist als die sonst noch auf dem Rechner verwendeten, sollte es passen ....

AW: Certificate ExpirationDate auslesen
11.03.2024 16:22:14
ExcelBaer
Mein bisheriger Ansatz war, dass ich bei jedem EXCEL-Öffnen abfrage, wann das Certifcate abläuft und so auch Nachsignierungen mitbekomme.

Wenn ich das Signieren des VBA-Projektes durch den Signatur als Event im VBA abfangen könnte, dann kann ich das Ablaufdatum im Event-Handler via VBA abfangen und in die EXCEL-Datei das ExpirationDate schreiben und in weiterer Folge vorzeitig den Ablauf bei EXCEL-Öffnen mitteilen. Damit wäre beim Öffnen keine neuerliche Abfrage des ExpirationDate notwendig, da das einmalige Abfragen zum Zeitpunkt der Signatur ausreichen würde.

PS: Wann werden Forumbeiträge archiviert? Ich sehe einen Teil im Archiv und die aktuellen Chats im Forum?
Bin noch nicht solange dabei, daher weiß ich es nicht :)
Anzeige
AW: Certificate ExpirationDate auslesen
11.03.2024 17:57:19
schauan
Hallöchen,

die Beiträge sind eine Woche im Forum und werden dann verschoben.
Wenn Du das Datum in die Datei schreiben willst, dann brauchst Du das Zertifikat doch gar nicht abrufen? Mach das beim Erstellen oder Ändern der Datei, bevor Du sie in Umlauf gibst ...
AW: Certificate ExpirationDate auslesen
11.03.2024 18:13:21
ExcelBaer
Ja, wenn ich es alleine wäre, ginge das sicherlich so.

Aber im Unternehmen können dies verschiedene Personen, welche die Vorgabe der manuellen Erfassung beim Signieren manchmal vergessen werden. Damit würde dann vermeintlich ein Ablauf des ExpirationDate mitgeteilt werden und in weiterer Folge erwarte ich mir, dass sich -aufgrund der Fehleranfälligkeit- niemand darauf verlassen wird. -> also kein Benefit entsteht.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige