> For the complete documentation index, see [llms.txt](https://docs.kiloiot.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kiloiot.io/kilo-docs-de/kilo-center/kilo-mioty-service-center/security/security-basics.md).

# Grundlagen der Sicherheit

KiloCenter-Sicherheitsgrundlagen — zu ändernde Standardzugangsdaten, TLS-Zertifikatspfade und Mindest-Härtung für gemeinsam genutzte Bereitstellungen.

### Ziel

Schaffen Sie eine sichere Grundlage für KiloCenter-Deployments.

### Standardanmeldedaten

Die lokale Entwicklung umfasst praktische Anmeldedaten, die in jeder gemeinsam genutzten oder produktiven Umgebung geändert werden müssen:

| Dienst      | Standardwert                               | Hinweise                                                |
| ----------- | ------------------------------------------ | ------------------------------------------------------- |
| PostgreSQL  | Benutzer `kilocenter`, Passwort `changeme` | Ändern in `config.yaml` und Docker Compose              |
| MQTT-Broker | Benutzer `admin`, Passwort `KiloCenter`    | Ändern in der Mosquitto-Konfiguration und `config.yaml` |

### TLS für die Kommunikation zwischen Basisstation und Application Center

BSSCI erfordert TLS 1.2 oder höher. SCACI erfordert TLS 1.3 oder höher. Jede Verbindung zu KC-Core verwendet TLS-Verschlüsselung.

#### CA-Vertrauensmodell

KiloCenter verwendet eine selbstsignierte Zertifizierungsstelle (CA), um alle Zertifikate auszustellen:

| Zertifikat                | Zweck                                        | Standardgültigkeit | Standort                  |
| ------------------------- | -------------------------------------------- | ------------------ | ------------------------- |
| CA-Zertifikat             | Vertrauenswurzel; an Basisstationen verteilt | 20 Jahre           | `certificates/ca.crt`     |
| Privater CA-Schlüssel     | Signiert Server- und Client-Zertifikate      | --                 | `certificates/ca.key`     |
| Serverzertifikat          | TLS-Listener von KC-Core für BSSCI/SCACI     | 1 Jahr             | `certificates/server.crt` |
| Privater Server-Schlüssel | TLS-Handshake                                | --                 | `certificates/server.key` |
| Client-Zertifikat         | Mutual TLS pro Basisstation (optional)       | 1 Jahr             | Bei Bedarf generiert      |

Die Basisstationen vertrauen dem **CA-Zertifikat**, nicht einzelnen Serverzertifikaten. Das bedeutet, dass Serverzertifikate erneuert werden können, ohne die Basisstationen anzufassen, solange dieselbe CA sie signiert.

Wenn Sie die CA neu generieren, werden alle vorhandenen Server- und Client-Zertifikate ungültig und müssen neu ausgestellt werden. Sichern Sie `ca.key` sie sicher.

#### Zertifikate generieren

**CA- und Serverzertifikate generieren (Ersteinrichtung)**

Es ist keine Go-Toolchain auf dem Host erforderlich — verwenden Sie den `certgen` Compose-Dienst:

```bash
docker compose run --rm certgen
```

> **Dateibesitz (Linux):** Wenn die erzeugten Dateien root gehören, führen Sie es erneut aus mit `UID=$(id -u) GID=$(id -g)` vorangestellt.

Für einen produktiven FQDN:

```bash
docker compose run --rm certgen -dir /app/certificates -days 365 -server bssci.example.com
```

Dadurch werden vier Dateien erstellt in `KC-Core/certificates/`:

* `ca.crt` und `ca.key` -- CA-Zertifikat und privater Schlüssel
* `server.crt` und `server.key` -- Serverzertifikat und privater Schlüssel

Das Serverzertifikat enthält automatisch `localhost`, `127.0.0.1`, `0.0.0.0`und alle lokalen Netzwerk-IP-Adressen als Subject Alternative Names (SANs).

**Ein Client-Zertifikat generieren**

```bash
docker compose run --rm certgen \
    -dir /app/certificates -client-only -client 70-B3-D5-9C-D0-00-09-E6
```

**certgen-Referenz**

| Flag           | Standardwert | Beschreibung                                                          |
| -------------- | ------------ | --------------------------------------------------------------------- |
| `-dir`         | `certs`      | Ausgabeverzeichnis für Zertifikatsdateien                             |
| `-server`      | `localhost`  | Server-Hostname (verwendet als CN und SAN)                            |
| `-days`        | `365`        | Gültigkeit von Server-/Client-Zertifikaten in Tagen                   |
| `-ca-years`    | `20`         | Gültigkeit des CA-Zertifikats in Jahren                               |
| `-ca-only`     | `falsch`     | Nur das CA-Zertifikat generieren                                      |
| `-server-only` | `falsch`     | Nur das Serverzertifikat generieren (CA muss bereits vorhanden sein)  |
| `-client-only` | `falsch`     | Nur ein Client-Zertifikat generieren (CA muss bereits vorhanden sein) |
| `-client`      | (leer)       | Client-Name für das Client-Zertifikat (z. B. EUI der Basisstation)    |

**Häufige Szenarien**

**Nur Serverzertifikat erneuern (CA existiert bereits):**

```bash
docker compose run --rm certgen \
    -dir /app/certificates -server bssci.example.com -server-only
```

#### Zertifikatsrotation

**Über Compose** (für Automatisierung empfohlen):

```bash
docker compose run --rm certgen \
    -dir /app/certificates -server bssci.example.com -server-only
docker compose restart kilocenter
```

**Über die GUI** (Erneuerung nach der Installation):

1. Öffnen Sie KC-Web und navigieren Sie zu **Zertifikate**.
2. Klicken Sie auf **Serverzertifikate erneuern** und bestätigen Sie.
3. Starten Sie KC-Core neu, um die neuen Zertifikate zu laden.

**Nach der Rotation:**

1. Starten Sie KC-Core neu, um die neuen Zertifikate zu laden.
2. Verifizieren Sie, dass die Wiederverbindungen der Basisstationen erfolgreich sind.
3. Wenn die CA geändert wurde, verteilen Sie `ca.crt` an alle Basisstationen.

#### Zertifikatskonfiguration

KC-Core lädt Zertifikate aus Pfaden, die in `config.yaml` (Quellcode-Entwicklung) oder `config/config.docker.yaml` (Container):

```yaml
protocol:
  bsci_tls:
    enabled: true
    cert_file: "certificates/server.crt"
    key_file: "certificates/server.key"
    ca_file: "certificates/ca.crt"
    min_version: "1.2"
  scaci_tls:
    enabled: true
    cert_file: "certificates/server.crt"
    key_file: "certificates/server.key"
    ca_file: "certificates/ca.crt"
    min_version: "1.3"
```

Pfade im Quellcode-Entwicklungsmodus beziehen sich relativ auf das Arbeitsverzeichnis von KC-Core. KC-Core kann nicht starten, wenn diese Dateien fehlen.

### Netzwerkfreigabe

Beschränken Sie, welche Ports von außerhalb Ihres lokalen Netzwerks zugänglich sind:

| Port  | Dienst                | Empfehlung zur Freigabe                  |
| ----- | --------------------- | ---------------------------------------- |
| 5000  | BSSCI                 | Nur Basisstationsnetzwerke               |
| 5001  | SCACI                 | Nur Hosts des Application Centers        |
| 9090  | KC-Gateway (gRPC-web) | Netzwerke von Betreibern und API-Nutzern |
| 80    | KC-Web (Container)    | Nur Betreibernetzwerke                   |
| 50051 | KC-Core internes gRPC | Nur Loopback, niemals extern freigeben   |
| 5433  | PostgreSQL            | Nur Loopback                             |
| 6379  | Redis                 | Nur Loopback                             |
| 1883  | MQTT                  | Nur MQTT-Consumer-Netzwerke              |

### Härtungs-Checkliste

* [ ] Alle oben aufgeführten Standardanmeldedaten rotieren
* [ ] Den Netzwerkzugriff auf Verwaltungsports (50051, 5433, 6379) beschränken
* [ ] Private Zertifikatschlüssel mit eingeschränkten Dateiberechtigungen speichern
* [ ] Audit-Logging in Produktionsumgebungen aktivieren
* [ ] Prüfen Sie `config.yaml` auf verbleibende Entwicklungs-Standardeinstellungen

### Enterprise Edition

Die Enterprise Edition ergänzt Sicherheitsfunktionen für Multi-Tenancy:

* Benutzerauthentifizierung mit JWT-Validierung
* Datenisolierung auf Organisationsebene
* Rollenbasierte Zugriffskontrolle

Diese Funktionen sind in der Community Edition nicht verfügbar.


---

# 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.kiloiot.io/kilo-docs-de/kilo-center/kilo-mioty-service-center/security/security-basics.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.
