0

ユーザーの証明書が期限切れになったときを知る方法を知っている人はいますか?私は、次のコードusinによって与えられたユーザの証明書のすべてを引っ張る得ることができます知っている:ユーザーの証明書が期限切れになるときを調べる

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

をしかし、その後、どのように私は、ポーリングについては、指定された証明書の有効期限を行くのですか?

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!"; 

http://forums.novell.com/novell-developer-forums/dev-ldap/364977-q-retrieving-users-public-key-over-ldap.htmlが、私はVB内getNotAfterメソッドを使用できるかどうか、または私はそれをやって行くだろうかわからない:私はここで、このJavaコードを参照してくださいでした。誰にもアイデアはありますか?可能であれば、VBScript/VB.Net/VBAなどでこのクエリを実行する際に助けが必要な場合は

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

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 

アップデートは私がimport the certificate into the CAPICOMオブジェクトValidToDateプロパティをバック返すことができることを見ましたが、どうやらADに格納され、それinwhichフォーマットはこれに応じて、間違ったフォーマットである:crutoサイトから

ここに投稿する: http://www.powershellcommunity.org/Forums/tabid/54/aff/4/aft/1639/afv/topic/Default.aspx

CAPICOMインポート関数からどのようなフォーマットが期待されていますか?

答えて

1

マイクロソフトには、証明書のさまざまなプロパティにプログラムでアクセスできるCAPICOMというActiveXコントロールがあります。 MSDN CAPICOM articleには、これらの機能の詳細が記載されています。プラットフォームSDK(リンク先リンクからリンク)には、サンプル、ドキュメント、再配布可能なコントロールが含まれています。サンプルにはVBScriptの例が含まれています。 Platform SDK hereのダウンロードが見つかりました。要するに

証明書を取得したら、あなたはValidFromDateValidToDateプロパティを探しています。

+0

私はCapicomを使ってどうやってそれをやることができるかを示したこのpowershellコード(http://bit.ly/9IdB8)を見ましたが、フォーマットでcertを返すので、コードは彼にとってはうまくいきませんでしたCapicomは認識できませんでした: $ pfad = "LDAP:// server/cn =" + $ tnummer "、ou = operationalaccounts、ou = useraccounts、dc = domain、dc = net" $ user = New-Objectこの行には、間違った形式があります。 $ oCert = New-Object -com "CAPICOM.Certificate" foreach($ pfad) $ userCerts = $ user.GetEX( "userCertificate" $ userCertsの証明書){ $ oCert.import($証明書) $ oCert.ValidToDate } – mrTomahawk

関連する問題