これは、Windows 2012 R2以降で使用したプロセスです。すべてのPowerShellコードは、昇格したPowerShellプロンプトから実行されました。完全な自動化は、ユーザーの課題として残されています。
前提条件
[証明書]に、[件名]タブで[リクエストに指定]ラジオボタンが選択されているテンプレートがあることを確認します。これはADマシンではないため、証明書サーバーはActive Directoryに情報を適切に照会できません。
ルートをエクスポートする
信頼されたルート証明機関の証明書を証明書サーバーにエクスポートし、その証明書ファイルをターゲットサーバーにコピーします。
certutil --% -ca.cert <name of certificate file>
ルートを信頼する
その証明書をターゲットサーバーの信頼されたルート証明機関にインポートします
$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" }
Active Directoryポリシープロバイダー
Active DirectoryポリシープロバイダーのURLを決定する
# 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"
登録ポリシー
登録ポリシーをターゲットサーバーに追加します(これはWindows 2012以降でのみ機能します。GUIの手順については、以下を参照してください)。非ドメインテンプレートを作成した後でポリシーが追加されていることを確認してください。追加されていない場合は、ポリシーが更新されないため表示されません。
$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
証明書を取得する
これで、目的のテンプレートを使用して証明書を登録できるはずです。
$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
登録ポリシーPre-Windows 2012 R2
- 証明書MMCを開きます
- 個人証明書ストアにドリルダウンする
- 「証明書」を右クリックして、すべてのタスク/高度な操作/管理を選択します
- コンテキストメニューからの登録ポリシー
- 「追加」ボタンをクリック
- 登録ポリシーのURLを貼り付けます
- 認証タイプとしてユーザー名/パスワードを選択します
- 「Validate Server」ボタンをクリックして、ドメインを含むドメイン資格情報を入力します
- 検証に成功したと仮定して、「追加」ボタンをクリックします
- 登録ポリシーを選択し、[プロパティ]ボタンをクリックします
- [自動登録と更新を有効にする]チェックボックスがオンになっていることを確認します
- 「登録時に強力な検証が必要」をチェックしたことがないので、それが何をするのかわかりません