Activer la stratégie d'inscription des certificats et demander un certificat à l'aide de PowerShell

9

En ce moment, je fais ce qui suit pour demander un certificat à un serveur CEP:

  • Ouvrez gpedit.msc
  • Sous Configuration ordinateur> Paramètres Windows> Paramètres de sécurité> Stratégies de clé publique, double-cliquez sur "Client des services de certificats - Stratégie d'inscription des certificats"
  • Activer
  • Entrez l'URI CEP
  • Passer à l'authentification par nom d'utilisateur / mot de passe
  • Valider (fournir des crédits)
  • Ouvrez la console MMC et importez les certificats dans le composant logiciel enfichable
  • Accédez à Certificats> Personnel
  • Clic droit> Demander un nouveau certificat
  • Entrez "plus d'informations" (CN, nom DNS, etc.)
  • Fournir des crédits

Après cela, j'ai un certificat du CEP; cependant, c'est un processus douloureux à faire manuellement. Existe-t-il un moyen d'automatiser cela dans Server 2008 (et 2012)? Toutes les informations que je peux trouver à ce sujet indiquent comment installer les services CEP pour faire d'un serveur un serveur de politique d'inscription (rien sur la demande effective d'un nouveau certificat ou son activation côté client). Est-il possible d'automatiser cela?

Il semble que ce processus ajoute beaucoup de données sous HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Cryptography. Puis-je l'ajouter manuellement (et usurper un GUID / ServiceID)?

EGr
la source
1
Ne pas décourager votre enthousiasme, car j'aime aussi POWERSHELL TOUTES LES CHOSES !!!!!! mais les applets de commande de stratégie de groupe sont toujours absolument horribles, et les applets de commande PKI sont bien améliorées en v4 par rapport à v3, donc ... :( Cependant, je trouve ce module PKI tiers pour le module PowerShell utile, et cela peut prendre une partie de la douleur manuelle sur ce que vous essayez de faire.
HopelessN00b

Réponses:

3

Je suppose que vos demandes de certificat sont effectuées à l'aide d'un modèle. Si tel est le cas, utilisez l' Public Key Policies/Certificate Services Client - Auto-Enrollment Settingsobjet de stratégie de groupe pour appliquer l'inscription automatique. Vous devrez également assurer le modèle ACL a Enrollet AutoEnrollmarqué soit pour les ordinateurs de domaine ou les utilisateurs de domaine (ou quel que soit acl objet, en fonction du public visé) Il y a une configuration utilisateur et la politique de configuration informatique à l' effet de levier en fonction de si oui ou non il est une machine cert ou cert utilisateur que vous essayez de pousser. L'inscription commence dès que la stratégie est poussée (généralement environ 15 minutes) après que le GPO est lié et appliqué.

Colyn1337
la source
2
Eh bien, duh. Je suis tellement accroché à la partie PowerShell, j'ai totalement masqué le fait que j'ai configuré de très nombreux GPO pour automatiser l'inscription des certificats depuis de nombreuses années. Oh! Bonne prise.
HopelessN00b
C'est certainement une option (probablement la meilleure option), mais je préférerais définir un paramètre de stratégie de groupe local. Est-ce possible?
EGr
2
@EGr pourquoi dans le monde voudriez - vous faire?
MDMoore313
@ HopelessN00b J'ai fait la même chose, mais ce serait cool d'avoir une façon PowerShell de le faire à des fins de dépannage à tout le moins, donc c'est toujours une assez bonne question.
MDMoore313
1

C'est le processus que j'ai utilisé sur Windows 2012 R2 et supérieur. Tout le code PowerShell a été exécuté à partir d'une invite PowerShell élevée. L'automatisation complète est laissée en exercice à l'utilisateur.

Prérequis

Assurez-vous que vous disposez d'un modèle sur votre serveur de certificats sur lequel le bouton radio «Fournir dans la demande» est sélectionné dans l'onglet Objet. Étant donné qu'il ne s'agit pas d'une machine AD, le serveur de certificats ne peut pas interroger correctement Active Directory pour obtenir les informations.

Exporter la racine

Exportez le certificat de l'autorité de certification racine de confiance sur votre serveur de certificats, puis copiez ce fichier de certificat sur votre serveur cible

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

Faites confiance à la racine

Importez ce certificat vers l'autorité de certification racine de confiance sur votre serveur cible

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

Fournisseur de stratégie Active Directory

Déterminer l'URL du fournisseur de stratégies 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"

Politique d'inscription

Ajoutez la stratégie d'inscription au serveur cible (cela ne fonctionne que sur Windows 2012 et supérieur. Pour les instructions de l'interface graphique, voir ci-dessous). Assurez-vous que la stratégie est ajoutée après avoir créé le modèle hors domaine, sinon il n'apparaîtra pas car la stratégie n'est pas actualisée.

$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

Obtenez le certificat

Vous devriez maintenant pouvoir vous inscrire pour un certificat en utilisant le modèle souhaité

$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

Politique d'inscription avant Windows 2012 R2

  1. Ouvrez les certificats MMC
  2. Accéder au magasin de certificats personnels
  3. Faites un clic droit sur "Certificats" et sélectionnez Toutes les tâches / Opérations avancées / Gérer
  4. Politiques d'inscription dans le menu contextuel
  5. Cliquez sur le bouton "Ajouter"
  6. Collez l'URL de la politique d'inscription
  7. Sélectionnez le nom d'utilisateur / mot de passe comme type d'authentification
  8. Cliquez sur le bouton "Valider le serveur" et entrez vos informations d'identification de domaine, y compris le domaine
  9. En supposant que vous avez réussi à valider, cliquez sur le bouton "Ajouter"
  10. Sélectionnez la politique d'inscription et cliquez sur le bouton "Propriétés"
  11. Assurez-vous que la case "Activer pour l'inscription et le renouvellement automatiques" est cochée
  12. Je n'ai jamais coché la case "Exiger une validation forte lors de l'inscription" donc je ne sais pas ce que ça fait
Slogmeister Extraordinaire
la source
0

Je n'ai pas de solution complète, cependant, je peux vous conseiller des points de départ. Mon module PKI PowerShell a la possibilité d'enregistrer le point de terminaison du service d'inscription à partir de Windows 7 / Windows Server 2008 R2 (notez que Windows Server 2008 ne prend pas en charge les services d'inscription). Voici un exemple d'enregistrement d'une stratégie: http://en-us.sysadmins.lv/Lists/Posts/Post.aspx?ID=101

concernant l'inscription. Cette série de billets de blog peut vous donner un aperçu de l'utilisation des interfaces COM CertEnroll pour effectuer l'inscription de certificats dans PowerShell. Il n'y a rien sur les services Web d'inscription (malheureusement), mais les techniques sont les mêmes. Vous devrez commencer avec cette interface: IX509CertificateRequestPkcs10V2

HTH

Crypt32
la source