PowerShellを使用して証明書登録ポリシーを有効にし、証明書を要求する


9

現在、CEPサーバーに証明書を要求するために次のことを行っています。

  • gpedit.mscを開きます
  • [コンピューターの構成]> [Windowsの設定]> [セキュリティの設定]> [公開キーのポリシー]で、[証明書サービスクライアント-証明書の登録ポリシー]をダブルクリックします。
  • 有効にする
  • CEP URIを入力してください
  • ユーザー名/パスワード認証に切り替え
  • 検証(信用の提供)
  • MMCを開き、証明書スナップインをインポートします
  • [証明書]> [個人]に移動します
  • 右クリック>新しい証明書のリクエスト
  • 「詳細情報」(CN、DNS名など)を入力します
  • 信用を提供する

この後、CEPから証明書を取得しました。ただし、これは手動で行うには面倒なプロセスです。Server 2008(および2012)でこれを自動化する方法はありますか?これについて私が見つけることができるすべての情報は、サーバーを登録ポリシーサーバーにするためにCEPサービスをインストールする方法を示しています(実際に新しい証明書を要求したり、クライアント側で有効にすることについては何もありません)。これを自動化することは可能ですか?

このプロセスにより、HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Cryptographyの下に多くのデータが追加されるようです。これを手動で追加できますか(GUID / ServiceIDを偽装できますか)?


1
私もすべてのものをパワーシェルしたいので、あなたの熱意を落とさないでください!!!!!! しかし、グループポリシーのコマンドレットは、まだ絶対に恐ろしいされており、PKIコマンドレットは、多くのV3を超えるV4に改善されているので... :(しかし、私はPowerShellのモジュールについては、このサードパーティのPKIモジュールを見つけるのですか便利な、それはいくつかのかかる場合がありますあなたがやろうとしていることを手作業で行う必要がある
HopelessN00b

回答:


3

証明書のリクエストはテンプレートを使用して行われたと思います。その場合は、Public Key Policies/Certificate Services Client - Auto-Enrollment SettingsGPOを使用して自動登録を適用します。また、テンプレートACLがドメインコンピュータまたはドメインユーザー(または対象とする対象者に応じて任意のACLオブジェクト)に対してマークされEnrollAutoEnrollマークされていることを確認する必要がありますプッシュしようとしている証明書またはユーザー証明書。登録は、GPOがリンクされて適用された後、ポリシーがプッシュされると(通常は約15分)すぐに開始されます。


2
まあ、まあ。PowerShellの部分に夢中になって、何年にもわたって証明書の登録を自動化するために、多くのGPOをセットアップしたという事実にまったく触れませんでした。やった!良いキャッチ。
HopelessN00b 2014

これは間違いなくオプション(おそらく最良のオプション)ですが、ローカルグループポリシーを設定したいのですが、可能ですか?
EGr 2014

2
@EGrなぜ世界でそれをしたいのですか?
MDMoore313 2014

@ HopelessN00b私は同じことをしましたが、少なくともトラブルシューティングの目的でそれを行うためのpowershellの方法があればクールなので、それでもかなり良い質問です。
MDMoore313 2014

1

これは、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

  1. 証明書MMCを開きます
  2. 個人証明書ストアにドリルダウンする
  3. 「証明書」を右クリックして、すべてのタスク/高度な操作/管理を選択します
  4. コンテキストメニューからの登録ポリシー
  5. 「追加」ボタンをクリック
  6. 登録ポリシーのURLを貼り付けます
  7. 認証タイプとしてユーザー名/パスワードを選択します
  8. 「Validate Server」ボタンをクリックして、ドメインを含むドメイン資格情報を入力します
  9. 検証に成功したと仮定して、「追加」ボタンをクリックします
  10. 登録ポリシーを選択し、[プロパティ]ボタンをクリックします
  11. [自動登録と更新を有効にする]チェックボックスがオンになっていることを確認します
  12. 「登録時に強力な検証が必要」をチェックしたことがないので、それが何をするのかわかりません

0

完全な解決策はありませんが、出発点をアドバイスできます。私のPowerShellのPKIモジュールは、 Windows 7の/ Windowsサーバー2008 R2(Windows Server 2008のは、登録サービスをサポートしていないことに注意してください)で始まる登録サービスエンドポイントを登録する機能を持っています。以下は、ポリシーを登録する方法の例です。http//en-us.sysadmins.lv/Lists/Posts/Post.aspx?ID = 101

登録に関して。このブログ投稿シリーズでは、CertEnroll COMインターフェイスを使用してPowerShellで証明書の登録を実行する方法についての洞察が得られる場合があります。(残念ながら)登録Webサービスについては何もありませんが、手法は同じです。次のインターフェースから始める必要があります:IX509CertificateRequestPkcs10V2

HTH

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.