Est-ce que quelqu'un sait comment je pourrais trouver quand un certificat pour l'utilisateur est expiré? Je sais que je peux me tirer tous les certificats pour un utilisateur donné par usin le code suivant:Savoir quand le certificat d'un utilisateur va expirer
Set objUserTemplate = _
GetObject("LDAP://cn=userTemplate,OU=Management,dc=NA,dc=fabrikam,dc=com")
arrUserCertificates = objUserTemplate.GetEx("userCertificate")
Mais alors comment dois-je procéder vote à la date d'expiration d'un certificat donné? Je ne vois ce code java ici: 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!";
mais je ne sais pas si je peux utiliser la méthode getNotAfter
au sein de VB, ou comment j'allais à le faire. Quelqu'un a-t-il une idée? Si possible, je voudrais aider à faire cette requête dans VBScript/VB.Net/VBA, etc.
J'ai trouvé ce VBScript code here qui semble faire ce que j'essaye d'accomplir, mais qui semble assez complexe , où le code java semblait beaucoup plus simple. Y at-il un moyen plus facile de faire cette requête dans une certaine saveur de VB?
Sur le site Cruto:
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
Mise à jour je ne voyais que je pouvais import the certificate into the CAPICOM objet à retourner la ValidToDate propriété, mais apparemment le format inwhich il est stocké dans AD est de format incorrect selon cette poster ici: http://www.powershellcommunity.org/Forums/tabid/54/aff/4/aft/1639/afv/topic/Default.aspx
Est-ce que quelqu'un sait quel format est attendu de la fonction d'importation CAPICOM?
J'ai vu ce code PowerShell (http://bit.ly/9IdB8) où il a montré comment je pouvais le faire en utilisant Capicom, mais encore une fois le code ne fonctionnait pas pour lui car il renvoyait le CERT dans un format que Capicom n'a pas pu reconnaître: $ pfad = "LDAP: // serveur/cn =" + $ tnummer + ", ou = operationsaccounts, ou = useraccounts, dc = domaine, dc = net" $ utilisateur = Nouveau-Objet DirectoryServices.DirectoryEntry ($ pfad) $ userCerts = $ utilisateur.GetEX ("userCertificate") !!! peut dans cette ligne je reçois le mauvais format $ oCert = New-Object -com "CAPICOM.Certificate" foreach ($ Certificat en $ userCerts) { $ oCert.import ($ Certificate) $ oCert.ValidToDate } – mrTomahawk