Generowanie żądania certyfikatu w imieniu innego użytkownika

Już kiedyś prezentowałem jak można zarządzać szablonami certyfikatów w ramach usługi AD CS. Dziś natomiast zaprezentuję jak wykorzystać wspomnianą usługę do automatycznego generowania certyfikatów w imieniu innego użytkownika.

W pierwszej kolejności musimy się upewnić czy posiadamy wymagany certyfikat z szablonu EnrollmentAgent. Jest on wymagany aby możliwe było zgłaszanie żądań certyfikatów w imieniu innego użytkownika.

Gdy administrator posiada wspomniany certyfikat możliwe jest przejście do sedna problemu, czyli skryptowego generowania żądań certyfikatów. Mianowicie cały proces możemy podzielić na 4 etapy. Pierwszym z nich jest wskazanie szablonu żądanego certyfikatu. W niniejszym celu tworzymy obiekt typu CX509CertificateRequestPkcs10 i wskazujemy dla niego odpowiedni szablon.

$PKCS10 = New-Object -ComObject X509Enrollment.CX509CertificateRequestPkcs10
$PKCS10.InitializeFromTemplateName(0x1,"User")
$PKCS10.Encode()

W drugim kroku konieczne jest wskazanie docelowego odbiorcy żądanego certyfikatu. W niniejszym celu tworzymy obiekt typu CX509CertificateRequestPkcs7 i wskazujemy dla niego wcześniej utworzony obiekt z szablonem jak i odbiorcę certyfikatu.

$PKCS7 = New-Object -ComObject X509enrollment.CX509CertificateRequestPkcs7
$PKCS7.InitializeFromInnerRequest($PKCS10)
$PKCS7.RequesterName = "contoso\mgajda"

Trzecim etapem jest pobranie certyfikatu administrator typu EnrollmentAgent, w celu podpisania żądania. Certyfikat powinien znajdować się z domyślnej lokalizacji, czyli magazynie certyfikatów użytkownika, maszyny na której wykonywane są operacje.

$cert = Get-ChildItem Cert:\CurrentUser\My | Where-Object {$_.Extensions | Where-Object {$_.Oid.Value -eq "2.5.29.37" -and $_.EnhancedKeyUsages["1.3.6.1.4.1.311.20.2.1"]}}
$Base64 = [Convert]::ToBase64String($Cert.RawData)
$signer = New-Object -ComObject X509Enrollment.CSignerCertificate
$signer.Initialize(0,0,1,$Base64)
$PKCS7.SignerCertificate = $signer

Ostatnim krokiem jest zgłoszenie wcześniej przygotowanego żądania certyfikatu.

$Request = New-Object -ComObject X509Enrollment.CX509Enrollment
$Request.InitializeFromRequest($PKCS7)
$Request.Enroll()

Źródła:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa377863(v=vs.85).aspx

Advertisements

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s