0

Weiß jemand, wie ich herausfinden könnte, wenn ein Zertifikat für Benutzer abläuft? Ich weiß, kann ich alle Zertifikate für einen bestimmten Benutzer ziehen lassen, indem Sie den folgenden Code usin:Finden Sie heraus, wann das Zertifikat eines Benutzers abläuft

Set objUserTemplate = _ 
    GetObject("LDAP://cn=userTemplate,OU=Management,dc=NA,dc=fabrikam,dc=com") 
arrUserCertificates = objUserTemplate.GetEx("userCertificate") 

Aber wie gehe ich Abfrage über das Ablaufdatum für ein bestimmtes Zertifikat? Ich habe diesen Java-Code sehen hier: http://forums.novell.com/novell-developer-forums/dev-ldap/364977-q-retrieving-users-public-key-over-ldap.html,

X509Certificate cert = (X509Certificate)it.next(); 
java.util.Date expires = cert.getNotAfter(); 
GregorianCalendar calNow = new GregorianCalendar(); 
GregorianCalendar calExp = new GregorianCalendar(); 
calExp.setTime(expires); 
//issuerDN = cert.getIssuerDN().getName(); 
int daysTilExp = com.willeke.utility.DateUtils.daysPast(calExp); 
long diffDays = com.willeke.utility.DateUtils.diffDayPeriods(calNow, 
calExp); 
if(diffDays <= 0) 
{ 
String mex = " Will expire in: " + diffDays + " days!"; 

aber ich bin nicht sicher, ob ich die getNotAfter Methode innerhalb VB verwenden kann, oder wie ich gehen würde dagegen zu tun. Hat jemand irgendwelche Ideen? Wenn möglich, würde ich gerne Hilfe bei der Durchführung dieser Abfrage in VBScript/VB.Net/VBA, etc.

Ich habe dieses VBScript code here gefunden, die zu tun scheint, was ich versuche zu erreichen, aber scheint ziemlich komplex , wo der Java-Code viel einfacher erschien. Gibt es einen einfacheren Weg, um diese Abfrage in einigen Geschmack von VB zu tun?

Vom Cruto Website:

On Error Resume Next 

Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D 
Const ForWriting = 2 
Const WshRunning = 0 

Set objUser = GetObject _ 
    ("GC://cn=MyerKen,ou=Management,dc=NA,dc=fabrikam,dc=com") 
objUser.GetInfoEx Array("userCertificate"), 0 
arrUserCertificates = objUser.GetEx("userCertificate") 

If Err.Number = E_ADS_PROPERTY_NOT_FOUND Then 
    WScript.Echo "No assigned certificates" 
    WScript.Quit 
Else 
    Set objShell = CreateObject("WScript.Shell") 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    strPath = "." 
    intFileCounter = 0 

    For Each arrUserCertificate in arrUserCertificates 
     strFileName = "file" & intFileCounter 
     strFullName = objFSO.BuildPath(strPath, strFileName) 
     Set objFile = objFSO.OpenTextFile(strFullName, ForWriting, True) 

     For i = 1 To LenB(arrUserCertificate) 
      ReDim Preserve arrUserCertificatesChar(i - 1) 
      arrUserCertificatesChar(i-1) = _ 
       Hex(AscB(MidB(arrUserCertificate, i, 3))) 
     Next 

     intCounter=0 
     For Each HexVal in arrUserCertificatesChar 
      intCounter=intCounter + 1 
      If Len(HexVal) = 1 Then 
       objFile.Write(0 & HexVal & " ") 
      Else 
       objFile.Write(HexVal & " ") 
      End If 
     Next 
     objFile.Close 
     Set objFile = Nothing 

     Set objExecCmd1 = objShell.Exec _ 
      ("certutil -decodeHex " & strFileName & " " & strFileName & ".cer") 
     Do While objExecCmd1.Status = WshRunning 
      WScript.Sleep 100 
     Loop 
     Set objExecCmd1 = Nothing 

     Set objExecCmd2 = objShell.Exec("certutil " & strFileName & ".cer") 
     Set objStdOut = objExecCmd2.StdOut 
     Set objExecCmd2 = Nothing 

     WScript.Echo VbCrLf & "Certificate " & intFileCounter + 1 
     While Not objStdOut.AtEndOfStream 
      strLine = objStdOut.ReadLine 
      If InStr(strLine, "Issuer:") Then 
       WScript.Echo Trim(strLine) 
       WScript.Echo vbTab & Trim(objStdOut.ReadLine) 
      End If 
      If InStr(strLine, "Subject:") Then 
       Wscript.Echo Trim(strLine) 
       WScript.Echo vbTab & Trim(objStdOut.ReadLine) 
      End If 
      If InStr(strLine, "NotAfter:") Then 
       strLine = Trim(strLine) 
       WScript.Echo "Expires:" 
       Wscript.Echo vbTab & Mid(strLine, 11) 
      End If 
     Wend 

     objFSO.DeleteFile(strFullName) 
     objFSO.DeleteFile(strPath & "\" & strFileName & ".cer") 

     intFileCounter = intFileCounter + 1 
    Next 
End If 

aktualisieren Ich habe, dass ich import the certificate into the CAPICOM Objekt könnte die ValidToDate Eigenschaft, aber anscheinend das Format inwhich es in AD ist nach dieser von falschen Format gespeichert wird, um wieder zurück Buchung hier: http://www.powershellcommunity.org/Forums/tabid/54/aff/4/aft/1639/afv/topic/Default.aspx

Weiß jemand, welches Format von der CAPICOM Importfunktion erwartet wird?

Antwort

1

Microsoft verfügt über ein ActiveX-Steuerelement namens CAPICOM, mit dem Sie programmgesteuert auf verschiedene Eigenschaften des Zertifikats zugreifen können. Die MSDN CAPICOM article Details diese Funktionen. Das Platform SDK (verlinkt aus dem Link Wo es zu bekommen ist) enthält Beispiele, Dokumentation und die weitervertreibbare Kontrolle. Die Beispiele enthalten VBScript-Beispiele. Ich habe den Download für das Platform SDK here gefunden.

Kurz gesagt, wenn Sie das Zertifikat abgerufen haben, können Sie für die ValidFromDate suchen und ValidToDate Eigenschaften.

+0

Ich sah diesen Powershell-Code (http://bit.ly/9IdB8), wo er zeigte, wie ich es möglicherweise mit Capicom machen könnte, aber wieder funktionierte der Code nicht für ihn, da er das Cert in einem Format zurückgab welche Capicom konnte nicht erkennen: $ pfad = "LDAP: // Server/cn =" + $ tummer + ", ou = operationalaccounts, ou = useraccounts, dc = Domäne, dc = net" $ user = New-Object DirectoryServices.DirectoryEntry ($ pfad) $ userCerts = $ user.GeEX ("userCertificate") !!! kann in dieser Zeile bekomme ich das falsche Format $ oCert = New-Objekt -com "CAPICOM.Certificate" foreach ($ Zertifikat in $ userCerts) { $ oCert.import ($ Zertifikat) $ oCert.ValidToDate } – mrTomahawk

Verwandte Themen