0

ユーザーの証明書の有効期限がいつ切れるかを知る方法を知っている人はいますか? 次のコードを使用して、特定のユーザーのすべての証明書を取得できることを知っています。

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

しかし、特定の証明書の有効期限をポーリングするにはどうすればよいでしょうか? ここでこの Java コードを見ました: 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!";

しかし、getNotAfterVB 内でこのメソッドを使用できるかどうか、またはどのように実行するかはわかりません。誰にもアイデアはありますか?可能であれば、VBScript/VB.Net/VBA などでこのクエリを実行する際に助けてください。

私が達成しようとしていることを実行しているように見えるこの VBScriptコードをここで見つけましたが、かなり複雑に見えますが、Java コードははるかに単純に見えました。VB のフレーバーでこのクエリを実行する簡単な方法はありますか?

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

更新証明書を CAPICOM オブジェクトにインポートしてValidToDateプロパティを返すことができることを確認しましたが、AD に保存されている形式は明らかに間違った形式です。組織/フォーラム/tabid/54/aff/4/aft/1639/afv/topic/Default.aspx

CAPICOM インポート機能で期待される形式を知っている人はいますか?

4

1 に答える 1

1

Microsoft には、CAPICOM と呼ばれる ActiveX コントロールがあり、証明書のさまざまなプロパティにプログラムでアクセスできます。MSDN CAPICOMの記事では、これらの機能について詳しく説明しています。プラットフォーム SDK (入手先リンクからリンク) には、サンプル、ドキュメント、および再配布可能なコントロールが含まれています。サンプルには、VBScript の例が含まれています。ここでプラットフォーム SDK のダウンロードを見つけました。

つまり、証明書を取得したら、ValidFromDateおよびValidToDateプロパティを探します。

于 2009-05-20T19:16:32.497 に答える