Bật Chính sách đăng ký chứng chỉ và yêu cầu chứng chỉ bằng PowerShell


9

Ngay bây giờ, tôi đang làm như sau để yêu cầu chứng chỉ từ máy chủ CEP:

  • Mở gpedit.msc
  • Trong Cấu hình máy tính> Cài đặt Windows> Cài đặt bảo mật> Chính sách khóa công khai, nhấp đúp vào "Máy khách dịch vụ chứng chỉ - Chính sách đăng ký chứng chỉ"
  • Kích hoạt
  • Nhập URI CEP
  • Chuyển sang xác thực tên người dùng / mật khẩu
  • Xác thực (Cung cấp chuồng)
  • Mở MMC và nhập chứng chỉ
  • Chuyển đến Chứng chỉ> Cá nhân
  • Nhấp chuột phải> Yêu cầu chứng chỉ mới
  • Nhập "thêm thông tin" (CN, Tên DNS, v.v.)
  • Cung cấp chuồng

Sau này tôi có chứng chỉ từ CEP; tuy nhiên, đây là một quá trình đau đớn để làm thủ công. Có cách nào để tự động hóa điều này trong Server 2008 (và 2012) không? Tất cả thông tin mà tôi có thể tìm thấy về điều này cho biết cách cài đặt dịch vụ CEP để biến máy chủ thành máy chủ chính sách đăng ký (không có gì thực sự yêu cầu chứng chỉ mới hoặc bật nó ở phía máy khách). Có thể tự động hóa điều này?

Có vẻ như quá trình này thêm rất nhiều dữ liệu trong HKEY_LOCAL_MACHINE \ SOFTWARE \ Chính sách \ Microsoft \ Mật mã. Tôi có thể tự thêm phần này (và giả mạo GUID / ServiceID) không?


1
Không làm nản lòng sự nhiệt tình của bạn, vì tôi cũng thích POWERSHELL TẤT CẢ NHỮNG ĐIỀU !!!!!! nhưng các lệnh ghép ngắn chính sách nhóm vẫn hoàn toàn khủng khiếp và các lệnh ghép ngắn PKI được cải thiện nhiều ở v4 so với v3, vì vậy ... :( Tuy nhiên, tôi thấy mô-đun PKI của bên thứ 3 này cho mô-đun PowerShell hữu ích và có thể mất một số làm đau bằng tay những gì bạn đang cố gắng làm
HoplessN00b

Câu trả lời:


3

Tôi đoán yêu cầu chứng chỉ của bạn được thực hiện bằng cách sử dụng một mẫu. Nếu đó là trường hợp sau đó sử dụng Public Key Policies/Certificate Services Client - Auto-Enrollment SettingsGPO để thực thi đăng ký tự động. Bạn cũng muốn đảm bảo ACL mẫu có EnrollAutoEnrollđược đánh dấu cho cả máy tính miền hoặc người dùng miền (hoặc bất kỳ đối tượng acl nào, tùy thuộc vào đối tượng dự định) Có chính sách cấu hình người dùng và cấu hình máy tính để tận dụng tùy thuộc vào việc đó có phải là máy không cert hoặc user cert bạn đang cố gắng đẩy. Ghi danh bắt đầu ngay khi chính sách được đẩy (thường là khoảng 15 phút) sau khi GPO được liên kết và thi hành.


2
Vâng, duh. Tôi đã rất bận tâm về phần PowerShell, tôi hoàn toàn không biết thực tế là tôi đã thiết lập nhiều, nhiều GPO để tự động đăng ký chứng chỉ trong nhiều năm. Ôi! Nắm bắt tốt.
HoplessN00b

Đây chắc chắn là một tùy chọn (có thể là tùy chọn tốt nhất), nhưng tôi muốn đặt cài đặt chính sách nhóm cục bộ .. điều này có khả thi không?
EGr

2
@EGr tại sao trên thế giới bạn muốn làm điều đó?
MDMoore313

@ HoplessN00b Tôi đã làm điều tương tự, tuy nhiên sẽ rất tuyệt nếu có cách thức quyền hạn để thực hiện cho mục đích khắc phục sự cố ít nhất, vì vậy đây vẫn là một câu hỏi khá hay.
MDMoore313

1

Đây là quá trình tôi đã sử dụng trên Windows 2012 R2 trở lên. Tất cả mã PowerShell đã được chạy từ dấu nhắc PowerShell nâng cao. Hoàn toàn tự động hóa là một bài tập cho người dùng.

Điều kiện tiên quyết

Đảm bảo rằng bạn có Mẫu trên Máy chủ Chứng chỉ có nút radio "Cung cấp trong yêu cầu" được chọn trong tab Chủ đề. Vì đây không phải là máy AD, nên máy chủ chứng chỉ không thể truy vấn đầy đủ Active Directory để biết thông tin.

Xuất gốc

Xuất chứng chỉ xác thực gốc đáng tin cậy trên máy chủ chứng chỉ của bạn và sau đó sao chép tệp chứng chỉ đó vào máy chủ mục tiêu của bạn

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

Tin tưởng vào Root

Nhập chứng chỉ đó cho Cơ quan chứng nhận gốc đáng tin cậy trên máy chủ mục tiêu của bạn

$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" }

Nhà cung cấp chính sách Active Directory

Xác định URL cho Nhà cung cấp chính sách Active Directory

# 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"

Chính sách tuyển sinh

Thêm Chính sách đăng ký vào Máy chủ mục tiêu (Điều này chỉ hoạt động trên Windows 2012 trở lên. Để biết hướng dẫn về GUI, xem bên dưới). Đảm bảo rằng Chính sách được thêm sau khi bạn tạo mẫu không thuộc miền, nếu không, chính sách sẽ không xuất hiện vì chính sách không được làm mới.

$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

Nhận chứng chỉ

Bây giờ bạn có thể đăng ký chứng chỉ bằng mẫu mong muốn

$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

Chính sách tuyển sinh Pre-Windows 2012 R2

  1. Mở chứng chỉ MMC
  2. Đi sâu vào Cửa hàng Chứng chỉ Cá nhân
  3. Nhấp chuột phải vào "Chứng chỉ" và chọn tất cả Nhiệm vụ / Hoạt động nâng cao / Quản lý
  4. Chính sách tuyển sinh từ menu ngữ cảnh
  5. Nhấp vào nút "Thêm"
  6. Dán URL cho chính sách đăng ký
  7. Chọn Tên người dùng / mật khẩu làm loại Xác thực
  8. Nhấp vào nút "Xác thực máy chủ" và nhập thông tin xác thực tên miền của bạn, bao gồm tên miền
  9. Giả sử bạn đã có thể xác thực thành công, hãy nhấp vào nút "Thêm"
  10. Chọn chính sách đăng ký và nhấp vào nút "Thuộc tính"
  11. Đảm bảo rằng hộp "Bật để đăng ký và gia hạn tự động" được chọn
  12. Tôi chưa bao giờ kiểm tra "Yêu cầu xác nhận mạnh mẽ trong khi đăng ký" vì vậy tôi không biết nó làm gì

0

Tôi không có giải pháp hoàn chỉnh, tuy nhiên, tôi có thể tư vấn điểm bắt đầu. Mô-đun PKI PowerShell của tôi có khả năng đăng ký điểm cuối dịch vụ đăng ký bắt đầu với Windows 7 / Windows Server 2008 R2 (lưu ý rằng Windows Server 2008 không hỗ trợ dịch vụ đăng ký). Dưới đây là một ví dụ về cách đăng ký chính sách: http://en-us.sysadmins.lv/Lists/Posts/Post.aspx?ID=101

liên quan đến tuyển sinh. Loạt bài đăng trên blog này có thể cung cấp cho bạn một số thông tin chi tiết về cách sử dụng các giao diện COM của CertEnroll để thực hiện đăng ký chứng chỉ trong PowerShell. Không có gì về dịch vụ web ghi danh (không may), nhưng các kỹ thuật là như nhau. Bạn sẽ cần bắt đầu với giao diện này: IX509Cert veRequestPkcs10V2

HTH

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.