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?
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