> 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/de/zertifikatsverwaltung/api-certificates/api-enrollment/linux-server.md).

# Linux-Server

{% hint style="info" %}
Diese Funktion erfordert Version **2.3.689** oder höher.
{% endhint %}

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

Während die anderen Anwendungsfälle von SCEPman die Möglichkeit bieten, einen Benutzer interaktiv zu authentifizieren, um ihm dann nur zu erlauben, Benutzerzertifikate für sein Konto oder seine Geräte zu registrieren, möchten Sie vielleicht Zertifikate für beliebige Subjects nicht interaktiv registrieren können.

Um dies zu erreichen, können wir einen Service Principal authentifizieren und ihm erlauben, die Enrollment-REST-API von SCEPman zu nutzen.

## Voraussetzungen

Bitte lesen Sie den Artikel zur API-Enrollment, um zu erfahren, wie ein Service Principal erstellt wird, der zur Authentifizierung verwendet werden kann:

{% content-ref url="/pages/c6e9b6e18fdecafb14aaae14587abd1f7a62b135" %}
[API-Registrierung](/de/zertifikatsverwaltung/api-certificates/api-enrollment.md)
{% endcontent-ref %}

## PowerShell-Modul SCEPmanClient

### Erste Anfragen

Sie können das PowerShell-Modul SCEPmanClient verwenden, um Zertifikate auf Ihrem Linux-Server anzufordern:

```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
```

### Zertifikatserneuerung

Sie können das PowerShell-Modul auch verwenden, um bereits vorhandene Zertifikate zu erneuern. Dadurch entfällt außerdem die Notwendigkeit, für die Authentifizierung einen Dienstprinzipal zu verwenden:

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

New-SCEPmanCertificate @Parameters
```

## Registrierungs- und Erneuerungsskript

Wenn das PowerShell-Modul für Sie keine Option ist, kann das [enrollrenewcertificate.sh](https://github.com/scepman/csr-request/blob/main/enroll-certificate/enrollrenewcertificate.sh) Skript verwendet werden, um zunächst ein Zertifikat zu beziehen sowie es zu überprüfen und im Falle eines baldigen Ablaufs eine Erneuerung zu versuchen.

### Client-Voraussetzungen

Die folgenden Voraussetzungen müssen auf dem ausführenden Client/Host vorhanden sein, um die Enrollment REST API verwenden zu können.

#### [**Azure CLI**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) **(Version 2.61 und höher)**

Die Azure CLI wird verwendet, um den authentifizierenden Benutzer zu verifizieren, seine Berechtigung zu prüfen und das Zugriffstoken abzurufen.

#### cURL

Wird verwendet, um das erstellte CSR an den SCEPman Enrollment API-Endpunkt zu senden und das Zertifikat zu empfangen.

#### OpenSSL

OpenSSL wird verwendet, um einen privaten Schlüssel zu erzeugen und ein CSR für die Ausstellung oder Erneuerung eines Zertifikats zu erstellen.

Beispiel:

{% 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. Befehl

Definiert das Verhalten des Skripts

Für diesen Anwendungsfall können wir die folgenden Optionen verwenden:

**-s** für Serverzertifikate mit automatischer Erkennung, ob es sich um eine Erstregistrierung oder Verlängerung handelt

**-y** für die Erstregistrierung eines Serverzertifikats

**-c** zum Einreichen eines vorhandenen Certificate Signing Request

Zu Anwendungsfällen der Client-Authentifizierung siehe:

{% content-ref url="/pages/216077169aed6463d49604a7b9279fb7cd6d628b" %}
[Nicht verwalteter Linux-Client](/de/zertifikatsverwaltung/api-certificates/self-service-enrollment/unmanaged-linux-client.md)
{% endcontent-ref %}

#### 2. App Service-URL

Die URL des SCEPman-App-Services.

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

#### 3. API-Scope

Dies ist die ***Application ID URI*** des ***SCEPman-api*** App-Registrierung in Ihrer Umgebung erstellen können.

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

<figure><img src="https://2075553437-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. Zertifikats-Dateiname

Der Dateiname (ohne Erweiterung) des Zertifikats, das erstellt oder zur Erneuerung gelesen wird.

*Beispiel: "myCertificate"*

#### 5. Zertifikatsverzeichnis

Das Verzeichnis, in dem das Zertifikat erstellt oder dessen Erneuerung versucht wird.

*Beispiel: \~/certs/*

#### 8. Verlängerungsschwelle

Die Anzahl der Tage, die das Zertifikat noch gültig sein muss, damit das Skript den Erneuerungsprozess startet.

*Beispiel: 30*

### *Zusätzliche Parameter für Serverzertifikate:*

#### 9. Service Principal Client-ID

Die Anwendungs-(Client)-ID der App-Registrierung, die wir authentifizieren möchten.

#### 10. Service Principal Client-Geheimnis

Das erstellte Client-Geheimnis der App-Registrierung, die wir authentifizieren möchten.

#### 11. Service Principal Tenant-ID

Die Tenant-ID unserer App-Registrierung.

#### 12. Certificate Subject

Das Subject, mit dem Sie das Zertifikat registrieren möchten.

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

#### 13. Zertifikatserweiterung

Dies wird als Subject Alternative Name hinzugefügt

*Beispiel: DNS:webserver.contoso.com*

### *Verwendungsbeispiel für CSR-Signierung (Befehl -c)*

{% code overflow="wrap" %}

```bash
# Erzeugen Sie einen privaten Schlüssel
openssl genrsa -out myKey.rsa 4096

# Erstellen Sie einen CSR für ein Benutzerzertifikat zur Client-Authentifizierung
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 %}

#### Hinweise

* Dieses Skript verschlüsselt die erzeugten Schlüssel nicht (dafür ist eine Passphrase-Eingabe erforderlich, daher wurde auf Verschlüsselung verzichtet, um eine automatische Erneuerung zu ermöglichen.)
* Wenn Sie passphrasegeschützte Zertifikate aus Certificate Master erneuern, müssen Sie diese Passphrase eingeben, um sie zu erneuern.

## Automatische Erneuerung einrichten

Wenn das obige Bash-Skript ausgeführt wird und erkennt, dass ein Zertifikat bereits registriert wurde, wird es das Zertifikat (falls es kurz vor dem Ablauf steht) mithilfe von mTLS erneuern. Wenn das Skript regelmäßig ausgeführt wird, wird dadurch sichergestellt, dass das Zertifikat erneuert wird, wenn es sich dem Ablauf nähert. Sie können dazu einen Cronjob einrichten. Der folgende Befehl ist ein Beispiel dafür, wie dies erledigt werden könnte. Er richtet einen Cronjob ein, der den Befehl täglich ausführt (wenn das System eingeschaltet ist), und einen Cronjob, der den Befehl beim Neustart ausführt.

{% 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 %}

Da Befehle, die von Cron ausgeführt werden, nicht unbedingt aus dem Verzeichnis ausgeführt werden, in dem sich das Skript/die Zertifikate befinden, ist es wichtig, die absoluten Pfade zum Skript/zu den Zertifikaten anzugeben.


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.scepman.com/de/zertifikatsverwaltung/api-certificates/api-enrollment/linux-server.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
