Pour en savoir lorsque le certificat d'un utilisateur va expirer

voix
0

Est-ce que quelqu'un sait comment je pourrais faire pour savoir quand un certificat d'utilisateur doit expirer? Je sais que je peux me tirer tous les certificats pour un utilisateur donné par usin le code suivant:

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 l' ai vu 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 getNotAfterméthode dans 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 ici qui semble faire ce que je suis en train d'accomplir, mais il est semble assez complexe, alors que le code java semblait beaucoup plus simple. Est - il 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 importer le certificat dans le CAPICOM objet à retourner la ValidToDate propriété, mais apparemment le format inwhich il est stocké dans AD est de format incorrect selon ce commentaire ici: http: //www.powershellcommunity. org / Forums / tabid / 54 / AFF / 4 / arrière / 1639 / AFV / sujet / Default.aspx

Est-ce que quelqu'un sait ce que le format est attendu de la fonction d'importation CAPICOM?

Créé 20/05/2009 à 17:58
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Microsoft a un contrôle ActiveX appelé CAPICOM qui vous permet d'accéder à diverses propriétés du programme du certificat. L' article MSDN CAPICOM détaille ces fonctions. Le SDK de la plate - forme (lié à partir du Où trouver ce lien) comprend des échantillons, la documentation et le contrôle redistribuable. Les échantillons comprennent des exemples VBScript. J'ai trouvé le téléchargement du SDK de la plate - forme ici .

En bref, une fois que vous avez récupéré le certificat, vous êtes à la recherche pour les ValidFromDate et ValidToDate propriétés.

Créé 20/05/2009 à 18:16
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more