# SCEPmanClient

SCEPmanClient est un module PowerShell destiné à interagir avec l’API REST de SCEPman. Indépendant de la plateforme et compatible avec Windows PowerShell v5, vous pouvez utiliser ce module pour demander des certificats pour tous les cas d’utilisation pris en charge par l’API REST :

* Émission automatique de certificats de serveur
* Certificats clients pour appareils non gérés
* Inscription de certificats sur des appareils Linux

## Installation

Le module SCEPmanClient est disponible dans la PowerShell Gallery et peut être installé à l’aide de la commande suivante :

```powershell
Install-Module -Name SCEPmanClient
```

{% hint style="info" %}
Suivez le guide Microsoft sur la manière d’installer PowerShell sur [Linux](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-linux?view=powershell-7.5) ou [MacOS](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.5).
{% endhint %}

## Prérequis

Pour que le module fonctionne comme prévu, vous devrez apporter une petite modification à votre déploiement SCEPman :

{% stepper %}
{% step %}

### Ajouter l’URL de la page d’accueil

Ajoutez l’URL du service d’application de SCEPman : accédez à la `Branding & Properties` section de l’inscription d’application. Ajoutez l’URL du service d’application de SCEPman au champ URL de la page d’accueil :

<figure><img src="https://129332256-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2FpvtsVJmycjyIgaQh2sHd%2Fimage.png?alt=media&#x26;token=9b9a7a21-4516-4718-9e32-346b39f9775a" alt=""><figcaption></figcaption></figure>

Ceci est nécessaire pour que le module puisse rechercher automatiquement l’ID client de l’inscription d’application, qui est requis pour récupérer le jeton d’accès.
{% endstep %}

{% step %}

### Autoriser Azure PowerShell à interagir avec l’inscription d’application

Dans l’inscription d’application, accédez à *Expose an API* et créez une portée personnalisée qui peut être utilisée pour autoriser l’ID client `1950a258-227b-4e31-a9cf-717495945fc2` (Microsoft Azure PowerShell)

<figure><img src="https://129332256-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2F46u0uC5d4K6YAQ3zh7YO%2Fimage.png?alt=media&#x26;token=82a318d0-5b3c-442a-887d-a064ff5e19be" alt=""><figcaption><p>Exemple d’informations pour une portée d’API personnalisée</p></figcaption></figure>

Après avoir créé une portée d’API, l’application Azure PowerShell peut être autorisée :

<figure><img src="https://129332256-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2Fp3C0zdof95GBMKox19RZ%2Fimage.png?alt=media&#x26;token=bc916c87-9233-4f11-82b1-33307e241e08" alt=""><figcaption><p>Application Microsoft Azure PowerShell autorisée</p></figcaption></figure>
{% endstep %}

{% step %}

### Activer le point de terminaison EST

{% endstep %}
{% endstepper %}

## Autorisations

SCEPman dispose de différents rôles permettant d’inscrire différents types de certificats. Vous pouvez les attribuer dans l’ *SCEPman-api* Enterprise Application (nom par défaut) :

#### CSR DB Requesters

Par défaut, ce rôle ne peut être attribué qu’aux principaux de service (par exemple les inscriptions d’application) et permet de demander des certificats avec des sujets et des usages arbitraires.

{% content-ref url="api-enrollment" %}
[api-enrollment](https://docs.scepman.com/fr/gestion-des-certificats/api-certificates/api-enrollment)
{% endcontent-ref %}

#### CSR Self Service

Ce rôle peut être attribué aux utilisateurs et permettra d’inscrire des certificats avec les restrictions suivantes :

* EKU ClientAuth uniquement
* Les certificats utilisateur doivent correspondre au UPN de l’utilisateur, soit dans le sujet, soit dans le nom alternatif du sujet UPN
* Les certificats d’appareil doivent avoir un sujet ou un SAN que SCEPman peut associer à un objet d’appareil détenu par l’utilisateur authentifié

{% content-ref url="self-service-enrollment" %}
[self-service-enrollment](https://docs.scepman.com/fr/gestion-des-certificats/api-certificates/self-service-enrollment)
{% endcontent-ref %}

## Exemples d’utilisation

### Utiliser l’authentification Azure

#### Authentification interactive

Lors de la demande d’un nouveau certificat sans spécifier le mécanisme d’authentification, l’utilisateur sera authentifié de manière interactive par défaut. En utilisant le `-SubjectFromUserContext` paramètre, le sujet du certificat et le SAN UPN seront renseignés automatiquement en fonction du contexte de l’utilisateur connecté :

```powershell
New-SCEPmanCertificate -Url 'scepman.contoso.com' -SubjectFromUserContext -SaveToStore CurrentUser
```

#### Connexion de l’appareil

Si vous souhaitez demander un nouveau certificat sur un système sans environnement de bureau, vous pouvez utiliser le `-DeviceCode` paramètre pour effectuer l’authentification réelle dans une autre session :

```powershell
New-SCEPmanCertificate -Url 'scepman.contoso.com' -DeviceCode -SubjectFromUserContext -SaveToFolder /home/user/certificates
```

#### Authentification par principal de service

Dans les scénarios entièrement automatisés, une inscription d’application peut être utilisée pour l’authentification. Il ne sera pas possible, dans ce cas, de déduire le sujet à partir du contexte authentifié.

L’utilisation du splatting de paramètres rendra également l’exécution plus lisible :

```powershell
$Parameters = @{
    'Url'              = 'scepman.contoso.com'
    'ClientId'         = '569fbf51-aa63-4b5c-8b26-ebbcfcde2715'
    'TenantId'         = '8aa3123d-e76c-42e2-ba3c-190cabbec531'
    'ClientSecret'     = 'csa8Q~aVaWCLZTzswIBGvhxUiEvhptuqEyJugb70'
    'Subject'          = 'CN=WebServer'
    'DNSName'          = 'Webserver.domain.local'
    'ExtendedKeyUsage' = 'ServerAuth'
    'SaveToStore'      = 'LocalMachine'
}

New-SCEPmanCertificate @Parameters
```

### Authentifier à l’aide de certificats

Une fois qu’un certificat a été émis à l’aide d’un contexte authentifié, nous pouvons l’utiliser pour le renouveler sans fournir à nouveau de contexte.

#### CertificateBySubject

*L’interaction avec les magasins de clés n’est possible que sous Windows*

Lorsque vous fournissez le `CertificateBySubject` paramètre, le module essaiera automatiquement de trouver un certificat approprié à renouveler dans les magasins de clés *CurrentUser* et *LocalMachine* .

La valeur saisie sera comparée par expression régulière aux sujets de tous les certificats disponibles.

```powershell
New-SCEPmanCertificate -CertificateBySubject 'WebServer' -SaveToStore 'LocalMachine'
```

#### Fournir un certificat spécifique

```powershell
$Certificate = Get-ChildItem Cert:\LocalMachine\My | Where-Object Thumbprint -eq '9B08EA68B16773CEF3C49D5D95BE50B784638984'

New-SCEPmanCertificate -Certificate $Certificate -SaveToStore LocalMachine
```

#### CertificateFromFile

Sur les systèmes Linux, un renouvellement de certificat peut être effectué en fournissant les chemins d’un certificat existant et de sa clé privée.

```powershell
New-SCEPmanCertificate -CertificateFromFile '~/certs/myCert.pem' -KeyFromFile '~/certs/myKey.key' -SaveToFolder '~/certs'
```

Lors de l’utilisation d’une clé privée chiffrée, il vous sera demandé le mot de passe. Vous pouvez également fournir directement le mot de passe de la clé à l’aide du `PlainTextPassword` paramètre.

#### Utiliser SCEPman avec Azure Web Application Firewall

Avec les profils SSL activés, le WAF mettra fin aux connexions TLS. Cela interrompra à son tour les renouvellements de certificats utilisant EST, car la procédure repose sur mTLS pour l’authentification. Dans ce cas, le `UseSCEPRenewal` paramètre peut être utilisé pour effectuer à la place un renouvellement de certificat conforme au protocole SCEP.

```powershell
New-SCEPmanCertificate -CertificateBySubject 'WebServer' -SaveToStore 'LocalMachine' -UseSCEPRenewal
```

Veuillez noter que cela nécessite une configuration supplémentaire de SCEPman concernant le point de terminaison SCEP statique :

* AppConfig:StaticValidation:Enabled : true
* AppConfig:StaticValidation:AllowRenewals : true
* AppConfig:StaticValidation:ReenrollmentAllowedCertificateTypes: Static (Selon les types prévus pour le renouvellement)
