SYSTOLA
Aus der Praxis
Kurzlebige X509-Zertifikate erstellen
Manchmal muss man etwas tun, das mit üblichen Administrations-Tools nicht geht. Dann bleibt einem nichts anderes übrig als tiefer in die Materie einzutauchen, und möglicherweise findet man bei der Suche etwas völlig anderes, als man erwartet hatte.
Kirill Kovalenko @ 13.11.2013
Follow Kirill Kovalenko on LinkedIn
Wenn Sie jemals mit der Microsoft Zertifizierungsstelle und vor allem mit den Zertifikatsvorlagen gearbeitet haben, wissen Sie vermutlich, dass die kleinste Zeiteinheit, die man für die Gültigkeitsdauer setzen kann, mit normalen Verwaltungstools eine Stunde beträgt.
Hm, aber was ist, wenn Sie aus irgendeinem Grund eine kürzere Gültigkeitsdauer brauchen? Nun, hier fängt das Abenteuer an ...

Zunächst einmal gilt es herauszufinden, wo die Vorlagen für die Zertifikate liegen. Im Falle der Authentifizierungsstelle eines Unternehmens lautet der Pfad in der Active Directory Konfigurationspartition: CN=Certificate Templates,CN=Public Key Services,CN=Services.

Also öffnen Sie den Ordner mit einem Tool Ihrer Wahl, finden die Vorlage sehr schnell anhand des Namens, schauen sich die Attribute an ... Doch was ist das? Die sind binär!

Jetzt ist es an der Zeit für ein RTFM. Das MSDN schreibt dazu: „Das Attribut ist ein 8-Byte-Oktett, das die FILETIME-Struktur initialisiert." Das ist neu, zwar ist FILETME in Active Directory weit verbreitet, aber normalerweise nicht als OCTETSTRING (Oktett), sondern als LARGEINTEGER (große ganze Zahl). Die „FF FF FF ..." sehen schon deshalb merkwürdig aus, weil der Wert nicht zu groß oder negativ sein kann, denn das würde der Semantik des „Period"-Wertes widersprechen.

Der Trick ist: Das Attribut behinhaltet aus welchen Gründen auch immer tatsächlich einen negativen FILETIME-Wert, und diese Tatsache muss beim Arbeiten mit solchen Attributen berücksichtigt werden.

Das folgende Skript hilft Ihnen dabei, den nötigen Wert (in Minuten) zu setzen. Es sind zwei Parameter nötig: der tatsächliche Name der betreffenden Vorlage (Achtung: nicht der Anzeigename!) und die Gültigkeitsdauer in Minuten.
PowerShell

param 
(
  [Parameter(Mandatory=$true, Position = 0)]
  [String] $TemplateName,
  [Parameter(Mandatory=$true, Position = 1)]
  [Int32] $Minutes
)

Import-Module ActiveDirectory

$path  = "CN=Certificate Templates,CN=Public Key Services,CN=Services"
$dn    = "CN=$TemplateName,$path," + (Get-ADRootDSE).ConfigurationNamingContext
$value = [TimeSpan]::FromMinutes($Minutes).TotalSeconds * -10000000
$value = [BitConverter]::GetBytes([Int64]$value)

Set-ADObject -Identity $dn -Replace @{pKIExpirationPeriod=$value}
Bitte beachten: Es müssen immer mindestens zehn Minuten mehr als gewünscht angegeben werden, weil der Server der Authentifizierungsstelle den Beginn der Gültigkeit für das Zertifikat um zehn Minuten zurücksetzen wird.