> For the complete documentation index, see [llms.txt](https://docs.scepman.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.scepman.com/fr/gestion-des-certificats/api-certificates/api-enrollment/linux-server.md).

# Serveur Linux

{% hint style="info" %}
Cette fonctionnalité nécessite la version **2.3.689** ou supérieure.
{% endhint %}

{% hint style="warning" %}
SCEPman Enterprise Edition uniquement
{% endhint %}

Alors que les autres cas d’utilisation de SCEPman offrent la possibilité d’authentifier de manière interactive un utilisateur afin de ne lui permettre ensuite d’inscrire que des certificats utilisateur pour son compte ou ses appareils, vous souhaiterez peut-être pouvoir inscrire des certificats de manière non interactive pour des sujets arbitraires.

Pour ce faire, nous pouvons authentifier un Service Principal et lui permettre d’exploiter l’API REST d’inscription de SCEPman.

## Prérequis

Veuillez vous référer à l’article sur l’inscription via l’API pour savoir comment créer un Service Principal pouvant être utilisé pour l’authentification :

{% content-ref url="/pages/9c02c2d84b9f5cb46dd91ef987350d59110b089c" %}
[Inscription via l'API](/fr/gestion-des-certificats/api-certificates/api-enrollment.md)
{% endcontent-ref %}

## Module PowerShell SCEPmanClient

### Demandes initiales

Vous pouvez utiliser le module PowerShell SCEPmanClient pour demander des certificats sur votre serveur Linux :

```powershell
$Parameters = @{
    'Url'              = 'scepman.contoso.com'
    'ClientId'         = '569fbf51-aa63-4b5c-8b26-ebbcfcde2715'
    'TenantId'         = '8aa3123d-e76c-42e2-ba3c-190cabbec531'
    'ClientSecret'     = 'csa8Q~aVaWCLZTzswIBGvhxUiEvhptuqEyJugb70'
    'Subject'          = 'CN=LinuxServer'
    'IP'               = '10.22.11.8'
    'ExtendedKeyUsage' = 'ServerAuth'
    'SaveToFolder'     = '/etc/ssl/scepman'
    'IncludeRootCA'    = $true
}

New-SCEPmanCertificate @Parameters
```

### Renouvellement du certificat

Vous pouvez également utiliser le module PowerShell pour renouveler des certificats déjà existants. Cela évitera également d’avoir à utiliser un Service Principal pour l’authentification :

```powershell
$Parameters = @{
    'CertificateFromFile' = '/home/user/.certs/server.pem'
    'KeyFromFile'         = '/home/user/.certs/server.key'
    'SaveToFolder'        = '/home/user/.certs'
}

New-SCEPmanCertificate @Parameters
```

## Script d’inscription et de renouvellement

Si le module PowerShell n’est pas une option pour vous, le [enrollrenewcertificate.sh](https://github.com/scepman/csr-request/blob/main/enroll-certificate/enrollrenewcertificate.sh) script peut être utilisé pour obtenir initialement un certificat ainsi que pour le vérifier et tenter un renouvellement s’il est sur le point d’expirer.

### Prérequis client

Les prérequis suivants doivent être présents sur le client/hôte exécutant pour pouvoir utiliser l’API REST d’inscription.

#### [**Azure CLI**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) **( version 2.61 et supérieure)**

Azure CLI est utilisé pour authentifier l’utilisateur en cours d’inscription afin de vérifier son éligibilité et de récupérer le jeton d’accès.

#### cURL

Utilisé pour envoyer le CSR créé au point de terminaison de l’API d’inscription SCEPman et recevoir le certificat.

#### OpenSSL

OpenSSL est utilisé pour générer une clé privée et créer un CSR pour l’inscription ou le renouvellement d’un certificat.

Exemple :

{% code overflow="wrap" %}

```bash
./enrollrenewcertificate.sh -s https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 ~/certs/ "myCertificate" "myKeyName" 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b "/CN=SubjectName,O=Organization" "DNS:webserver.contoso.com"
```

{% endcode %}

#### 1. Commande

Définit le comportement du script

Pour ce cas d’utilisation, nous pouvons utiliser les options suivantes :

**-s** pour un certificat de serveur avec détection automatique d’une inscription initiale ou d’un renouvellement

**-y** pour l’inscription initiale d’un certificat de serveur

**-c** pour soumettre une demande de signature de certificat existante

Pour les cas d’utilisation d’authentification client, voir :

{% content-ref url="/pages/19dd43c598789475b9360e742c421839fb8c16d9" %}
[Client Linux non géré](/fr/gestion-des-certificats/api-certificates/self-service-enrollment/unmanaged-linux-client.md)
{% endcontent-ref %}

#### 2. URL du service d’application

L’URL du service d’application SCEPman.

*Exemple : "<https://scepman.contoso.net/>"*

#### 3. Portée de l’API

Il s’agit de ***URI de l’ID d’application*** de la ***SCEPman-api*** inscription d’application dans votre environnement.

*Exemple : "api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436"*

<figure><img src="https://129332256-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2FtjlK9CzLeLcLmbu0nK3b%2Fimage.png?alt=media&amp;token=a7af923f-c790-416e-bb9d-9e640d391c44" alt=""><figcaption></figcaption></figure>

#### 4. Nom de fichier du certificat

Le nom de fichier (sans extension) du certificat qui sera créé ou lu pour le renouvellement.

*Exemple : "myCertificate"*

#### 5. Répertoire du certificat

Le répertoire dans lequel le certificat sera créé ou dans lequel une tentative de renouvellement sera effectuée.

*Exemple : \~/certs/*

#### 8. Seuil de renouvellement

Le nombre de jours avant l’expiration à partir duquel le script commencera le processus de renouvellement.

*Exemple : 30*

### *Paramètres supplémentaires pour les certificats de serveur :*

#### 9. ID client du Service Principal

L’ID d’application (client) de l’inscription d’application que nous voulons authentifier.

#### 10. Secret client du Service Principal

Le secret client créé de l’inscription d’application que nous voulons authentifier.

#### 11. ID de Tenant du Service Principal

L’ID de Tenant de notre inscription d’application.

#### 12. Sujet du certificat

Le sujet avec lequel vous souhaitez inscrire le certificat.

*Format : /CN=SubjectName,O=Organization*

#### 13. Extension du certificat

Cela sera ajouté en tant que nom alternatif du sujet

*Exemple : DNS:webserver.contoso.com*

### *Exemple d’utilisation pour la signature d’une CSR (commande -c)*

{% code overflow="wrap" %}

```bash
# Générer une clé privée
openssl genrsa -out myKey.rsa 4096

# Créer une CSR pour un certificat utilisateur destiné à l’authentification client
openssl req -new -key myKey.rsa -sha256 -out myCSR -subj "/CN=John Smith" -addext "subjectAltName=otherName:1.3.6.1.4.1.311.20.2.3;UTF8:john.smith@contoso.net" -addext "extendedKeyUsage=1.3.6.1.5.5.7.3.2"

./enrollrenewcertificate.sh -c https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 ~/certs "myCertificate" myKey.rsa 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b myCSR

```

{% endcode %}

#### Considérations

* Ce script ne chiffre pas les clés générées (cela nécessite la saisie d’une phrase de passe, donc le chiffrement a été omis pour permettre le renouvellement automatique.)
* Si vous renouvelez des certificats protégés par une phrase de passe provenant de Certificate Master, vous devrez saisir cette phrase de passe afin de les renouveler.

## Configurer le renouvellement automatique

Lorsque le script bash ci-dessus est exécuté et détecte qu’un certificat a déjà été inscrit, il renouvellera le certificat (s’il est proche de son expiration) en utilisant mTLS. Si le script est exécuté régulièrement, cela garantira que le certificat est renouvelé lorsqu’il approche de son expiration. Vous pouvez configurer une tâche cron pour y parvenir. La commande ci-dessous est un exemple de la manière dont cela pourrait être fait. Elle configurera une tâche cron pour exécuter la commande quotidiennement (si le système est sous tension) et une tâche cron pour exécuter la commande au redémarrage.

{% code overflow="wrap" %}

```
(crontab -l ; echo @daily /path/to/enrollrenewcertificate.sh -s https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 /path/to/certs "myCertificate" "myKeyName" 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b "/CN=SubjectName,O=Organization" "DNS:webserver.contoso.com" ; echo @reboot /path/to/enrollrenewcertificate.sh -s https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 /path/to/certs "myCertificate" "myKeyName" 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b "/CN=SubjectName,O=Organization" "DNS:webserver.contoso.com") | crontab -
```

{% endcode %}

Comme les commandes exécutées par Cron ne seront pas nécessairement lancées depuis le répertoire où se trouvent le script/les certificats, il est important de fournir les chemins absolus vers le script/les certificats.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.scepman.com/fr/gestion-des-certificats/api-certificates/api-enrollment/linux-server.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
