Aktifkan Kebijakan Pendaftaran Sertifikat dan Minta Sertifikat menggunakan PowerShell

9

Saat ini, saya sedang melakukan hal berikut untuk meminta sertifikat dari server CEP:

  • Buka gpedit.msc
  • Di bawah Konfigurasi Komputer> Pengaturan Windows> Pengaturan Keamanan> Kebijakan Kunci Publik, klik dua kali "Klien Layanan Sertifikat - Kebijakan Pendaftaran Sertifikat"
  • Memungkinkan
  • Masukkan CEP URI
  • Beralih ke Otentikasi Nama Pengguna / Kata Sandi
  • Validasi (Berikan Kredit)
  • Buka MMC, dan impor Sertifikat masuk
  • Buka Sertifikat> Pribadi
  • Klik kanan> Minta Sertifikat Baru
  • Masukkan "informasi lebih lanjut" (CN, Nama DNS, dll.)
  • Berikan Kredit

Setelah ini saya memiliki sertifikat dari CEP; Namun, ini adalah proses yang menyakitkan untuk dilakukan secara manual. Apakah ada cara untuk mengotomatisasi ini di Server 2008 (dan 2012)? Semua informasi yang dapat saya temukan tentang ini memberitahu cara menginstal layanan CEP untuk membuat server server kebijakan pendaftaran (tidak ada yang benar-benar meminta sertifikat baru, atau mengaktifkannya di sisi klien). Apakah mungkin untuk mengotomatisasi ini?

Sepertinya proses ini menambahkan banyak data di bawah HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Cryptography. Bisakah saya menambahkan ini secara manual (dan menipu GUID / ServiceID)?

EGr
sumber
1
Bukan untuk mencegah antusiasme Anda, karena saya juga suka POWERSHELL SEMUA HAL !!!!!! tetapi cmdlet kebijakan grup masih benar-benar mengerikan, dan cmdlet PKI jauh lebih baik di v4 lebih dari v3, jadi ... :( Namun, saya menemukan modul PKI pihak ke-3 ini untuk modul PowerShell berguna, dan mungkin butuh beberapa manual menghilangkan apa yang Anda coba lakukan
HopelessN00b

Jawaban:

3

Saya kira permintaan sertifikat Anda dibuat menggunakan templat. Jika demikian, gunakan Public Key Policies/Certificate Services Client - Auto-Enrollment SettingsGPO untuk memberlakukan pendaftaran otomatis. Anda juga ingin memastikan templat ACL telah Enrolldan AutoEnrollditandai untuk komputer domain atau pengguna domain (atau objek acl apa pun, tergantung pada audiens yang dituju) Ada kebijakan konfigurasi pengguna dan konfigurasi komputer untuk meningkatkan tergantung pada apakah mesin itu atau tidak. cert atau cert pengguna yang Anda coba push. Pendaftaran dimulai segera setelah kebijakan didorong (biasanya sekitar 15 menit) setelah GPO ditautkan dan diberlakukan.

Colyn1337
sumber
2
Baiklah, duh. Saya sangat terpaku pada bagian PowerShell, saya benar-benar kecewa pada kenyataan bahwa saya telah menyiapkan banyak, banyak GPO untuk mengotomatiskan pendaftaran sertifikat selama bertahun-tahun. Doh! Tangkapan yang bagus.
HopelessN00b
Ini jelas merupakan suatu pilihan (mungkin opsi terbaik), tetapi saya lebih suka untuk menetapkan pengaturan kebijakan grup lokal .. apakah ini mungkin?
EGr
2
@EGr mengapa di dunia Anda ingin melakukan itu?
MDMoore313
@ HopelessN00b Saya melakukan hal yang sama, namun akan lebih baik untuk memiliki cara powershell melakukannya untuk keperluan pemecahan masalah setidaknya, jadi itu masih pertanyaan yang cukup bagus.
MDMoore313
1

Ini adalah proses yang saya gunakan pada Windows 2012 R2 dan lebih tinggi. Semua kode PowerShell dijalankan dari prompt PowerShell yang ditinggikan. Otomatisasi lengkap dibiarkan sebagai latihan bagi pengguna.

Prasyarat

Pastikan Anda memiliki Templat di Server Sertifikat yang memiliki tombol radio "Supply in the request" yang dipilih di tab Subjek. Karena ini bukan mesin AD, server sertifikat tidak dapat secara memadai meminta Active Directory untuk mendapatkan informasi.

Ekspor Root

Ekspor Sertifikat Otoritas Sertifikasi Root Tepercaya di Server Sertifikat Anda dan kemudian salin file sertifikat itu ke Server Target Anda

certutil --% -ca.cert <name of certificate file>

Percayai Root

Impor sertifikat itu ke Otoritas Sertifikasi Root Tepercaya di Server Target Anda

$PathToCertificate=<name of certificate file>
$RootCertificate=Get-PfxCertificate -FilePath $PathToCertificate
$AlreadyExists=Get-ChildItem -Path "Cert:\LocalMachine\Root" | Where-Object { $_.Thumbprint -eq $RootCertificate.Thumbprint }
if ($AlreadyExists -eq $null) { Import-Certificate -CertStoreLocation "Cert:\LocalMachine\Root" -FilePath $PathToCertificate }
else { Write-Warning "Root certificate already installed" }

Penyedia Kebijakan Direktori Aktif

Tentukan URL untuk Penyedia Kebijakan Direktori Aktif

# Get AD Configuration Context
$RootDSE=[System.DirectoryServices.DirectoryEntry]::new("LDAP://RootDSE")
$ConfigContext="CN=Enrollment Services,CN=Public Key Services,CN=Services,"+$RootDSE.configurationNamingContext
# Get name of Enterprise Root Certificate Autority server
$Server=Get-ADObject -SearchBase $ConfigContext -Filter "*"
if ($Server.Count -eq 1) { throw "No Enterprise Root Certificate Autority server exists" }
else { $Server=$Server[1].Name }
# Get Enrollment URL
$ConfigContext="CN=$Server,"+$ConfigContext
$EnrollmentURL=(Get-ADObject -SearchBase $ConfigContext -Filter "*" -Properties "msPKI-Enrollment-Servers" | Select-Object -ExpandProperty "msPKI-Enrollment-Servers").Split("`n") | Where-Object { $_ -like "http*" }
if ($EnrollmentURL -eq $null) { $EnrollmentURL="" }
# Get AD Enrollment Policy URL
$Server=$Server+$RootDSE.configurationNamingContext.Value.Replace("CN=Configuration","").Replace(",DC=",".")
$WMI=Get-WmiObject -ComputerName $Server -Namespace "root\WebAdministration" -Class Application | Where-Object { $_.Path -eq "/ADPolicyProvider_CEP_UsernamePassword" }
if ($WMI -ne $null) { $PolicyURL="https://"+$Server+$WMI.Path+"/service.svc/CEP" }
else { $PolicyURL="" }
Write-Output "Enrollment URL = $EnrollmentURL"
Write-Output "Policy URL = $PolicyURL"

Kebijakan Pendaftaran

Tambahkan Kebijakan Pendaftaran ke Server Target (Ini hanya berfungsi pada Windows 2012 dan lebih tinggi. Untuk instruksi GUI, lihat di bawah). Pastikan bahwa Kebijakan ditambahkan setelah Anda membuat templat non-domain, jika tidak akan muncul karena kebijakan tidak disegarkan.

$User="<your domain name>\<your domain user name>"
$Pass="<Your domain password>"
$SecPass=ConvertTo-SecureString -String $Pass -AsPlainText -Force
$Cred=[System.Management.Automation.PSCredential]::new($User,$SecPass)
Add-CertificateEnrollmentPolicyServer -Url $PolicyURL -context Machine -NoClobber -AutoEnrollmentEnabled -Credential $Cred

Dapatkan sertifikatnya

Anda sekarang harus dapat mendaftarkan sertifikat menggunakan templat yang diinginkan

$DNS="<FQDN of your server>"
$URL=Get-CertificateEnrollmentPolicyServer -Scope All -Context Machine | Select-Object -ExpandProperty Url | Select-Object -ExpandProperty AbsoluteUri
$Enrollment=Get-Certificate -Url $URL -Template "<Template name (not display name)>" -SubjectName "CN=$DNS" -DnsName $DNS -Credential $Cred -CertStoreLocation cert:\LocalMachine\My
$Enrollment.Certificate.FriendlyName=$DNS

Kebijakan Pendaftaran Pra-Windows 2012 R2

  1. Buka MMC sertifikat
  2. Telusuri ke Personal Certificate Store
  3. Klik kanan "Sertifikat" dan pilih Semua Tugas / Operasi Lanjutan / Kelola
  4. Kebijakan Pendaftaran dari menu konteks
  5. Klik tombol "Tambah"
  6. Rekatkan URL untuk kebijakan pendaftaran
  7. Pilih Nama Pengguna / kata sandi sebagai jenis Otentikasi
  8. Klik tombol "Validasi Server" dan masukkan kredensial domain Anda, termasuk domain
  9. Dengan asumsi Anda telah berhasil memvalidasi, klik tombol "Tambah"
  10. Pilih kebijakan pendaftaran dan klik tombol "Properties"
  11. Pastikan bahwa kotak "Aktifkan untuk pendaftaran dan perpanjangan otomatis" dicentang
  12. Saya belum pernah memeriksa "Memerlukan validasi kuat selama pendaftaran" jadi saya tidak tahu apa fungsinya
Slogmeister Luar Biasa
sumber
0

Saya tidak punya solusi lengkap, namun, saya bisa memberi saran poin awal. Modul PowerShell PKI saya memiliki kemampuan untuk mendaftarkan titik akhir layanan pendaftaran yang dimulai dengan Windows 7 / Windows Server 2008 R2 (perhatikan bahwa Windows Server 2008 tidak mendukung layanan pendaftaran). Berikut adalah contoh cara mendaftarkan suatu kebijakan: http://en-us.sysadmins.lv/Lists/Posts/Post.aspx?ID=101

tentang pendaftaran. Seri posting blog ini dapat memberi Anda wawasan tentang cara memanfaatkan antarmuka COM CertEnroll untuk melakukan pendaftaran sertifikat di PowerShell. Tidak ada apa-apa tentang layanan web pendaftaran (sayangnya), tetapi tekniknya sama. Anda harus mulai dengan antarmuka ini: IX509CertificateRequestPkcs10V2

HTH

Crypt32
sumber