# Linux-Server

{% hint style="info" %}
Dieses Feature 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 beantragen, möchten Sie möglicherweise Zertifikate für beliebige Subjekte nicht-interaktiv ausstellen.

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

## Voraussetzungen

Bitte beziehen Sie sich auf den API Enrollment-Artikel, wie man einen Service Principal erstellt, der zur Authentifizierung verwendet werden kann:

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

## Powershell-Modul SCEPmanClient

### Erstanfragen

Sie können das SCEPmanClient PowerShell-Modul 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
```

### Zertifikatsverlängerung

Sie können das PowerShell-Modul auch verwenden, um bereits vorhandene Zertifikate zu erneuern. Dadurch entfällt außerdem die Notwendigkeit, einen Dienstprinzipal für die Authentifizierung 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 Verlängerungsskript

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 erhalten sowie um es zu überprüfen und im Falle des drohenden Ablaufs eine Verlängerung zu versuchen.

### Client-Voraussetzungen

Nach Abschluss der Konfiguration stellen Sie sicher, die SCEP-Server-URL in Ihrem/ Ihren SCEP-Profil(en) in Intune zu aktualisieren. Die neue URL sollte die von Ihnen erstellte benutzerdefinierte Domain mit "/certsrv/mscep/mscep.dll" am Ende sein.

{% 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 Serverzertifikat mit automatischer Erkennung, ob es sich um eine Erstregistrierung oder eine Erneuerung handelt

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

**-c** zum Einreichen einer vorliegenden Certificate Signing Request (CSR)

Für Anwendungsfälle der Client-Authentifizierung siehe:

{% content-ref url="../self-service-enrollment/unmanaged-linux-client" %}
[unmanaged-linux-client](https://docs.scepman.com/de/zertifikatsverwaltung/api-certificates/self-service-enrollment/unmanaged-linux-client)
{% endcontent-ref %}

#### 2. App-Service-URL

Die URL des SCEPman-App-Services.

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

#### 3. API-Bereich

Dies ist die ***Application ID URI*** nächsten Schritt ***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%2F9B88qmSsU3P2pcacwkHK%2Fimage.png?alt=media&#x26;token=26ea1304-d3d6-4fbf-a65b-27191a7be232" alt=""><figcaption></figcaption></figure>

#### 4. Zertifikat-Dateiname

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

*Beispiel: "myCertificate"*

#### 5. Zertifikat-Verzeichnis

Das Verzeichnis, in dem das Zertifikat erstellt oder versucht wird zu verlängern.

*Beispiel: \~/certs/*

#### 8. Erneuerungs-Schwelle

Die Anzahl der Tage bis zum Ablauf des Zertifikats, bei der das Skript den Verlängerungsprozess zu starten beginnt.

*Beispiel: 30*

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

#### 9. Service Principal Client Id

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

#### 10. Service Principal Client Secret

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

#### 11. Service Principal Tenant Id

Die Tenant-Id unserer App-Registrierung.

#### 12. Zertifikat-Subject

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

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

#### 13. Zertifikat-Erweiterung

Dies wird als subject alternative name hinzugefügt

*Beispiel: DNS:webserver.contoso.com*

### *Anwendungsbeispiel für CSR-Signierung (-c Befehl)*&#x20;

{% code overflow="wrap" %}

```bash
# Erzeugen eines privaten Schlüssels
openssl genrsa -out myKey.rsa 4096

# Erstellen einer CSR für ein Benutzerzertifikat für die 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 %}

#### Überlegungen

* Dieses Skript verschlüsselt die erzeugten Schlüssel nicht (dies erfordert die Eingabe einer Passphrase, daher wurde die Verschlüsselung weggelassen, um automatische Verlängerungen zu ermöglichen).
* Wenn Sie passphrase-geschützte Zertifikate vom Certificate Master verlängern, müssen Sie diese Passphrase eingeben, um sie zu erneuern.

## Automatische Verlängerung einrichten

Wenn das oben genannte Bash-Skript ausgeführt wird und feststellt, dass ein Zertifikat bereits registriert wurde, erneuert es das Zertifikat (wenn es nahe am Ablauf ist) mit mTLS. Wenn das Skript regelmäßig ausgeführt wird, stellt dies sicher, dass das Zertifikat erneuert wird, wenn es dem Ablauf nahe kommt. Sie können einen Cronjob einrichten, um dies zu erreichen. Der unten stehende Befehl ist ein Beispiel dafür, wie dies erfolgen 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 Cron-Aufrufe nicht zwingend aus dem Verzeichnis ausgeführt werden, in dem sich das Skript/die Zertifikate befinden, ist es wichtig, die absoluten Pfade zum Skript/den Zertifikaten anzugeben.&#x20;
