README.md 17.1 KB
Newer Older
Karim El Aammari's avatar
Karim El Aammari committed
1
# vagrant-prometheus
k.elaammari's avatar
k.elaammari committed
2
3

## Einleitung
Karim El Aammari's avatar
Karim El Aammari committed
4

k.elaammari's avatar
readme    
k.elaammari committed
5
Mithilfe dieses Workflows können Sie mit Vagrant eine vollständige Monitoring-Infrastruktur aus den folgenden Komponenten erstellen. Jede der Komponenten wird auf einer eigenen virtuellen Maschine durch ein idempotentes Skript installiert. 
k.elaammari's avatar
k.elaammari committed
6
7
8
9
10

* Grafana (Visualisierung, Graphen, Dashboards)
* Prometheus (Node-Metriken abgreifen und an DB weiterleiten)
* InfluxDB (Time-Series DB, Langzeitspeicher, Backup/Restore)
* Chronograf (Graphisches Interface zu InfluxDB)
11
* Node-Set (Dummy-Maschinen)
k.elaammari's avatar
k.elaammari committed
12

13
Für das Bereitstellen der Metriken, ist auf jeder virtuellem Maschine (VM) der Prometheus-node-exporter installiert. 
k.elaammari's avatar
k.elaammari committed
14

k.elaammari's avatar
k.elaammari committed
15
<img src="./docu/setup.png"  width="800">
k.elaammari's avatar
k.elaammari committed
16
17

## Voraussetzungen
Karim El Aammari's avatar
Karim El Aammari committed
18

k.elaammari's avatar
README    
k.elaammari committed
19
Um den Workflow ausführen zu können müssen folgende Programme installiert sein:
Karim El Aammari's avatar
Karim El Aammari committed
20

k.elaammari's avatar
k.elaammari committed
21
* Vagrant (<https://www.vagrantup.com/>)
k.elaammari's avatar
readme    
k.elaammari committed
22
* VirtualBox (<https://www.virtualbox.org/>) oder ein anderer unterstützter Hypervisor
k.elaammari's avatar
k.elaammari committed
23
24
* Git (<https://git-scm.com/>)

k.elaammari's avatar
README    
k.elaammari committed
25
Im Weiteren wird vorausgesetzt, dass Sie sich auf einem Linux-basierten Betriebssystem befinden. Der Workflow funktioniert auch auf Windows-Platformen, hierbei ist aber zu beachten, dass unter Windows standardmäßig Zeilenumbrüche mit CR & LF kodiert werden, im Gegensatz zum einfachen LF Zeilenumbruch unter Linux. Da die Dateien mit dem File-Provisionierer übertragen werden, muss darauf geachtet werden, dass die Dateien mit einem einfachen LF gespeichert werden. In der Git-Konfiguration sollte demensprechend folgende Funktion abgeschaltet werden. Diese ist normalerweise unter Windows eingeschaltet und fügt beim auschecken ein CR zum LF hinzu.
k.elaammari's avatar
k.elaammari committed
26

Karim El Aammari's avatar
Karim El Aammari committed
27
28
```shell
git config --global core.autocrlf false
k.elaammari's avatar
k.elaammari committed
29
```
k.elaammari's avatar
k.elaammari committed
30
31
32

## Getting started

k.elaammari's avatar
readme    
k.elaammari committed
33
Um direkt zu starten, kopieren Sie mit folgendem Befehl das Projekt auf ihren Rechner und wechseln anschließend in das erstellte Verzeichnis.
k.elaammari's avatar
k.elaammari committed
34
35

```shell
k.elaammari's avatar
readme    
k.elaammari committed
36
git clone git@git.gsi.de:dc/common/vagrant-prometheus.git
k.elaammari's avatar
k.elaammari committed
37
38
```

Karim El Aammari's avatar
README    
Karim El Aammari committed
39
Bevor die VMs gestartet werden, muss eine CA und durch sie signierte TLS-Zertifikate für Influx, Grafana und Chronograf erzeugt werden. Hierfür führen Sie folgenden Befehl aus.
k.elaammari's avatar
k.elaammari committed
40
41
42
43
44

```shell
./scripts/openssl_generate.sh
```

k.elaammari's avatar
readme    
k.elaammari committed
45
Nachdem die Zertifikate erzeugt wurden, können die VMs gestartet werden.
k.elaammari's avatar
k.elaammari committed
46
47

```shell
Karim El Aammari's avatar
Karim El Aammari committed
48
vagrant up
k.elaammari's avatar
k.elaammari committed
49
50
```

Karim El Aammari's avatar
Karim El Aammari committed
51
Anschließen starten nacheinander Influx, Prometheus, Grafana und Chronograf. Die Nodes, dessen Metriken erfasst werden sollen, müssen explizit gestartet werden, entweder einzeln oder als Regex.
k.elaammari's avatar
k.elaammari committed
52
53

```shell
Karim El Aammari's avatar
Karim El Aammari committed
54
vagrant up {node-1 node-2 ... node-10 | /node-.*/}
k.elaammari's avatar
readme    
k.elaammari committed
55
```  
k.elaammari's avatar
k.elaammari committed
56

Karim El Aammari's avatar
README    
Karim El Aammari committed
57
## Funktionsprüfung
k.elaammari's avatar
k.elaammari committed
58

k.elaammari's avatar
readme    
k.elaammari committed
59
Nachdem die Maschinen gestartet sind und die Provisionierung erfolgreich ausgeführt wurde, können wir über die von Vagrant weitergeleiteten Ports direkt auf die Dienste zugreifen.
k.elaammari's avatar
k.elaammari committed
60

Karim El Aammari's avatar
Karim El Aammari committed
61
62
* <https://127.0.0.1:3000> (Grafana)
* <https://127.0.0.1:8888> (Chronograf)
k.elaammari's avatar
k.elaammari committed
63

k.elaammari's avatar
README    
k.elaammari committed
64
Wenn auf Ihrem Betriebssystem diese Ports schon in Verwendung sind, können Sie in der Vagrantfile eine andere Zuordnung konfigurieren.
k.elaammari's avatar
k.elaammari committed
65

Karim El Aammari's avatar
README    
Karim El Aammari committed
66
Um Zertifikat-Warnungen zu vermeiden, können Sie das CA-Zertifikat ```./openssl/data/certificates/cacert.pem``` als vertrauenswürdig in Ihrem Browser eintragen. Wenn Sie das Zertifikat hinzufügen, sollten Sie sicherstellen, dass die durch den Browser angezeigten Fingerprints denen der Ausgabe des folgenden Befehls entsprechen.
k.elaammari's avatar
k.elaammari committed
67
68

```shell
Karim El Aammari's avatar
README    
Karim El Aammari committed
69
70
openssl x509 -noout -fingerprint -sha256 -inform pem -in cacert.pem
openssl x509 -noout -fingerprint -sha1 -inform pem -in cacert.pem
k.elaammari's avatar
k.elaammari committed
71
72
```

k.elaammari's avatar
readme    
k.elaammari committed
73
74
## Vagrant Kommandos

Karim El Aammari's avatar
README    
Karim El Aammari committed
75
* ```vagrant up <vm>```
k.elaammari's avatar
README    
k.elaammari committed
76
    Startet und erstellt, falls nötig, die Maschine. Wird die Maschine zum ersten Mal gestartet, wird auch die Provisionierung ausgeführt, andernfalls muss mit der Option "--provision" die Provisionierung explizit gefordert werden.
k.elaammari's avatar
readme    
k.elaammari committed
77

Karim El Aammari's avatar
README    
Karim El Aammari committed
78
79
* ```vagrant destroy <vm>```
    Löscht die Maschine.
k.elaammari's avatar
readme    
k.elaammari committed
80

Karim El Aammari's avatar
README    
Karim El Aammari committed
81
82
* ```vagrant provision <vm>```
    Mit diesem Befehl führen Sie bei einer laufenden Maschine die Provisionierung neu aus. Dabei werden die Befehle aus der Vagrantfile (%vm_name%.vm.provision) in der dort angegebenen  Reihenfolge nacheinander ausgeführt.
k.elaammari's avatar
readme    
k.elaammari committed
83

Karim El Aammari's avatar
README    
Karim El Aammari committed
84
85
* ```vagrant ssh <vm>```
    Baut eine SSH-Verbindung zu der angegebenen VM auf.
k.elaammari's avatar
readme    
k.elaammari committed
86
87
88

## Klassifizierung von Dateien

Karim El Aammari's avatar
README    
Karim El Aammari committed
89
Um eine überschaubare Umgebung zu schaffen, werden die hier verwendeten Dateien in drei Kategorien zu unterteilt.
k.elaammari's avatar
readme    
k.elaammari committed
90

Karim El Aammari's avatar
README    
Karim El Aammari committed
91
### 1. Konfigurations-Daten
k.elaammari's avatar
readme    
k.elaammari committed
92

Karim El Aammari's avatar
README    
Karim El Aammari committed
93
Konfigurationsdateien enthalten von Benutzer angegebene Parameter für den Betrieb einer Software gebraucht werden. Hierrunter fallen z.B. Ini- oder Conf-Dateien.
k.elaammari's avatar
readme    
k.elaammari committed
94

Karim El Aammari's avatar
README    
Karim El Aammari committed
95
Einen Sonderfall stellen in diesem Projekt die Text- und JSON-Dateien dar, Diese enthalten Daten, die nicht direkt von den Executables interpretiert werden, sondern z.B. die JSON-Dateien mittels CURL an die HTTP-API von Grafana gesendet werden, um einen Zustand zu erzeugen. Da der Workflow für Openssl bzw. Zertifikate in einer anderen Sektion beschrieben wird, übergehen wir hier diese Dateien.
k.elaammari's avatar
readme    
k.elaammari committed
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118

```shell
.vagrant-prometheus/
    ./openssl
        ./config/*.cnf                  # Zertifikat Konfigurationen
    ./provision
        ./grafana
            ./config
                ./dashboards/*.json     # Grfana Dashboards
                ./datasources/*.json    # Grafana Datasources
                ./users/*.json          # Grafana Benutzer
                ./graf_conf.ini         # Konfigurationsdatei
                ./request_token.json    # API-Token
        ./influx
            ./config
                ./influxdb.conf         # Konfigurationsdatei
                ./setup.queries         # Queries die auf der Influxdb ausgeführt werden müssen
            ./setup_influx.sh           # Sonderfall, da hier die Standardwerte für den Admin-Benutzer stehen
        ./prometheus
            ./config
                ./prom.yml              # Konfigurationsdatei
```

Karim El Aammari's avatar
README    
Karim El Aammari committed
119
### 2. Benutzer-Daten
k.elaammari's avatar
readme    
k.elaammari committed
120

Karim El Aammari's avatar
README    
Karim El Aammari committed
121
Hiermit sind alle Daten gemeint, die während des Betriebs entstehen. In diesem Projekt sind dies vorwiegend die von den Exportern erhobenen Daten in der Influx-Datenbank.
k.elaammari's avatar
readme    
k.elaammari committed
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151

* Chronograf

    ```shell
    /var/lib/chronograf/chronograf-v1.db
    ```

* Grafana

    ```shell
    /var/lib/grafana/
        ./grafana.db
        ./token/apitoken.json
    ```

* Influxdb

    ```shell
    /var/lib/influxdb/
        ./data
        ./meta
        ./wal
    ```

* Prometheus

    ```shell
    /var/lib/prometheus/data
    ```

Karim El Aammari's avatar
README    
Karim El Aammari committed
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
### 3. Executable

In die Kategorie Executable fallen alle Dateien, die weder Konfig- noch Bentuzer-Daten sind.

```shell
.vagrant-prometheus/
    ./provision
        ./chronograf
            ./config
                ./chronograf.service
        ./grafana  
            ./setup_grafana.sh
        ./influx
            ./backup
                ./backup_call.sh
                ./backup.sh
                ./restore.sh
            ./config
                ./backup.service
                ./backup.timer
            ./setup_influx.sh
        ./node
            ./config
                ./stress.service
        ./prometheus
            ./config
                ./prom.service
    ./scripts
        ./influx_backup.sh
        ./influx_restore.sh
        ./node_start_stress.sh
        ./node_stop_stress.sh
        ./openssl_fingerprint.sh
        ./openssl_generate.sh
        ./openssl_node.sh
```
k.elaammari's avatar
readme    
k.elaammari committed
188

k.elaammari's avatar
k.elaammari committed
189
## Backup- und Restore-Workflow
Karim El Aammari's avatar
Karim El Aammari committed
190

k.elaammari's avatar
k.elaammari committed
191
### Backup
Karim El Aammari's avatar
Karim El Aammari committed
192

Karim El Aammari's avatar
README    
Karim El Aammari committed
193
Die InfluxDB ist durch einen Backup- und Restore-Mechanismus ausgestattet, mit dem wir die gesammelten Daten des Monitoringsystems exportiern und wiederherstellen können. In diesem Workflow wird standardmäßig täglich um 1 Uhr ein Vollbackup ausgelöst, das separat zu den vorherigen Backups in einem Ordner mit Zeitstempel abgelegt wird. Konfigurieren können Sie den Timer in der Datei ```./provision/influx/config/backup.timer```.
k.elaammari's avatar
k.elaammari committed
194
195
196
197

Um ein manuelles Backup zu starten, führen Sie folgendes Skript aus.

```shell
Karim El Aammari's avatar
Karim El Aammari committed
198
./scripts/influx_backup.sh %PFAD%
k.elaammari's avatar
k.elaammari committed
199
200
```

k.elaammari's avatar
readme    
k.elaammari committed
201
Mit der %PFAD% Variable geben Sie den Ausgabepfad des Backups an. Dabei beschreibt der Pfad den Speicherort innerhalb der VM.
k.elaammari's avatar
k.elaammari committed
202
203

### Restore
Karim El Aammari's avatar
Karim El Aammari committed
204

Karim El Aammari's avatar
README    
Karim El Aammari committed
205
Um ein Backup in die InfluxDB wiederherzustellen, benutzen Sie folgendes Skript.
k.elaammari's avatar
k.elaammari committed
206
207
208
209
210

```shell
./scripts/influx_restore.sh <PFAD>
```

Karim El Aammari's avatar
README    
Karim El Aammari committed
211
212
213
Die %PFAD% Variable ist hierbei der Ordner indem sich die Backupdateien befinden. Sollte in Ihrer Influx-Instanz schon die Datenbank "prom" existieren, werden Sie gefragt ob Sie diese löschen wollen, um die "prom"-Datenbank aus dem Backup laden zu können. Diese Operation ist notwendig, da hier bei jedem Backup die vollständige Datenbank gesichert wird und dementsprechend eine vollständige Datenbank wiederhergestellt wird.

### Backupmechanismus überprüfen
k.elaammari's avatar
k.elaammari committed
214

Karim El Aammari's avatar
README    
Karim El Aammari committed
215
216
217
TODO

## Passwort-Änderungs-Workflows
k.elaammari's avatar
readme    
k.elaammari committed
218
219
220

### Grafana

Karim El Aammari's avatar
README    
Karim El Aammari committed
221
Für Grafana werden zwei Benutzer angelegt, ein Administrator und ein optionaler View-Benutzer mit der Berechtigung, Dashboards anzuzeigen. Angelegt werden die Benutzer mit dem Skript ```./provision/grafana/setup_grafana.sh```. Die Standardpasswörter für die beiden Benutzer können in folgenden JSON-Dateien bearbeiten werden. Nachdem die Benutzer erzeugt wurden, wird zusätzlich ein API-Token erstellt, mit dem anschließend alle Änderungen gemacht werden. Gespeichert wird dieser Token innerhalb der VM im Verzeichnis ```/var/lib/grafana/token```. Anhand der Existenz dieses Tokens innerhalb der VM entscheidet das Skript, ob Grafana initial konfiguriert werden muss.
k.elaammari's avatar
readme    
k.elaammari committed
222
223
224
225
226
227
228
229
230

```shell
./provision/grafana/config/users
    ./admin_password.json
    ./view_user.json
```

#### Passwörter ändern

Karim El Aammari's avatar
README    
Karim El Aammari committed
231
Das Ändern von Benutzer Passwörter sollte nach Möglichkeit über das Grafana-UI erfolgen, entweder als Admin oder vom Benutzer selbst. Daneben besteht noch die Option, die HTTP-API zu benutzen. Hierfür können Sie sich am ```setup_grafana.sh```-Skript von Grafana orientieren und den CURL Befehl entweder mit BasicAuth oder mit dem API-Token bauen.
k.elaammari's avatar
readme    
k.elaammari committed
232
233
234

#### Admin Passwort zurücksetzen

235
Sollte kein Zugriff auf den Admin-Benutzer bestehen, kann mit der Grafana-CLI das Passwort zurückgesetzten werden. Hierfür muss lokal auf der VM folgender Befehl ausgeführt werden.
k.elaammari's avatar
readme    
k.elaammari committed
236
237
238
239
240
241
242
243

```shell
vagrant ssh graf    # verbinden mit der VM 
sudo grafana-cli --homepath /usr/share/grafana admin reset-admin-password "newpass"
```

### Influx

Karim El Aammari's avatar
README    
Karim El Aammari committed
244
In der Influx-Datenbank werden drei Benutzer angelegt, ein Administrator und anschließend zwei weitere Benutzer für Grafana und Prometheus. Dabei ist festgelegt, dass der Prometheus-Benutzer nur Schreib-Rechte und Grafana nur Lese-Rechte bekommt. Ausgeführt werden die Queries mit dem Skript ```./provision/influx/setup_influx.sh``` indem mit CURL die Queries an die HTTP-API von Influx gesendet werden. Beim ersten Start von Influxdb wird keine Authentifizierung für das Erzeugen eines Administrators verlangt. Anschließend schaltet sich die Authentifizierung automatisch für die nachfolgenden Queries ein. Die Standardpasswörter für die Benutzer sind in folgenden Dateien gespeichert.
k.elaammari's avatar
readme    
k.elaammari committed
245
246
247
248

```shell
./provision/influx/
    ./setup_influx.sh       # Admin-Benutzer
Karim El Aammari's avatar
README    
Karim El Aammari committed
249
    ./config/setup.queries  # Prometheus- und Grafana-Benutzer
k.elaammari's avatar
readme    
k.elaammari committed
250
251
252
253
```

#### Passwörter ändern

Karim El Aammari's avatar
README    
Karim El Aammari committed
254
Passwörter können Sie nur als Admin-Benutzer ändern. Die einfachste Möglichkeit wäre es, im UI von Chronograf in der Sektion 'InfluxDB Admin' diese zu ändern. Die andere Möglichkeit wäre, sich mit dem Influx-CLI Tool  auf der Influx-Datenbank anzumelden. Da das Tool die HTTP-API benutzt, kann auch von einer anderen VM die Anmeldung erfolgen. Für den Moment ist nur auf der flux-VM das Tool installiert, darum müssen wir und mit der flux-VM verbinden.
k.elaammari's avatar
readme    
k.elaammari committed
255
256
257

```shell
vagrant ssh flux
Karim El Aammari's avatar
README    
Karim El Aammari committed
258
influx -ssl -unsafeSsl
k.elaammari's avatar
readme    
k.elaammari committed
259
>auth  
Karim El Aammari's avatar
README    
Karim El Aammari committed
260
username:
k.elaammari's avatar
readme    
k.elaammari committed
261
262
263
264
265
password:
>SET PASSWORD FOR "name" = 'newpass'
result message...
```

k.elaammari's avatar
readme    
k.elaammari committed
266
Wenn Sie das Passwort von Prometheus oder Grafana ändern, müssen Sie auch die Konfiguration bzw. die Grafana-Datasource aktualisieren.
k.elaammari's avatar
readme    
k.elaammari committed
267
268

##### Prometheus
269
Tragen Sie die neuen Benutzerdaten in folgende Datei ein, führen Sie die Provisionierung neu aus und laden Sie die Konfiguration neu.
k.elaammari's avatar
readme    
k.elaammari committed
270
271

```shell
Karim El Aammari's avatar
README    
Karim El Aammari committed
272
nano ./provision/prometheus/config/prom.yml
k.elaammari's avatar
readme    
k.elaammari committed
273
274
275

vagrant provision prom  
vagrant ssh prom
Karim El Aammari's avatar
README    
Karim El Aammari committed
276
sudo systemctl reload prometheus
k.elaammari's avatar
readme    
k.elaammari committed
277
278
279
```

##### Grafana
280
Tragen Sie die neuen Benutzerdaten in folgende Datei ein, führen Sie die Provisionierung neu aus.
k.elaammari's avatar
readme    
k.elaammari committed
281
282
283
284
285

```shell 
./provision/grafana/config/datasources/ds_influx.json
```

k.elaammari's avatar
readme    
k.elaammari committed
286
#### Influx-Admin Passwort zurücksetzen
k.elaammari's avatar
readme    
k.elaammari committed
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305

Sollte ein 2.ter Admin-Benutzer existieren, kann mit den oben beschriebenen Methoden das Passwort geändert werden. Ist kein weitere Admin-Benutzer verfügbar, muss die Authentifizierung abgeschaltet werden und dann ein neuer Admin erzeugt werden.

```shell 
vagrant ssh flux
# Ändern sie in der Sektion [http], die Variable "auth-enabled" = false
sudo nano /etc/influxdb/influxdb.conf
# influx neustarten
systemctl restart influx
# influx verbinden
influx -ssl -unsafeSsl 
>SET PASSWORD FOR "name" = 'newpass'
>exit
# Ändern sie in der Sektion [http], die Variable "auth-enabled" = true
sudo nano /etc/influxdb/influxdb.conf
# influx neustarten
systemctl restart influx
```

Karim El Aammari's avatar
README    
Karim El Aammari committed
306
## Zertifikat-Änderungs-Workflows
k.elaammari's avatar
readme    
k.elaammari committed
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323

Um den Datenverkehr zu verschlüsseln und die Dienste authentifizieren zu können, benötigen wir TLS-Zertifikat die wir mit dem Openssl-Toolkit erzeugen (<https://www.openssl.org/>). Hierfür wird zuerst ein Root-Zertifikat (cacert.pem) erzeugt und anschließend die Zertifikate für die Dienste Grafana, Influx und Chronograf. Diese werden von dem Root-Zertifikat signiert, sodass mit dem Root-Zertifikat die Authentifizierung erfolgen kann. Wichtig ist zu beachten, dass zu jedem Zertifikat auch ein Private-Key existiert, so z.B. cacert.pem und cakey.pem oder influxcert.pem und influxkey.pem.

### Openssl Ordnerstruktur

```shell
./openssl
    ./config
        ./chronograf.cnf
        ./grafana.cnf
        ./influx.cnf
        ./openssl-ca.cnf
    ./data
        ./certificates
        ./csrdb
```

324
Im Config-Verzeichnis befinden sich die Konfigurationsdateien für die Zertifikate. In diesen können Sie die Standardwerte für organizationName, commonName, emailAddress, usw. ändern, die bei der Erzeugung in die Zertifikate eingetragen werden. Das Data-Verzeichnis wird erst nachdem ausführen von ```./scripts/openssl_generate.sh```-Skript erstellt und enthält die Zertifikate im Ordner "certificates", sowie den Zustand der Openssl-Textdatenbank im Ordner "csrdb". Csrdb wird für das Signieren der Zertifikate gebraucht und enthält unteranderem die aktuelle Seriennummer.
k.elaammari's avatar
readme    
k.elaammari committed
325
326
327

### Zertifikat-Seriennummer

Karim El Aammari's avatar
README    
Karim El Aammari committed
328
Zertifikate enthalten nach dem X.509 Standard eine Seriennummer, die bei der Signierung bestimmt wird. Die mit dem ```./scripts/openssl_generate.sh``` erstellten und signierten Zertifikate werden standardmäßig mit der Seriennummer 0x2 aufwärts signiert. Manche Browser, wie z.B. der Firefox, melden aber einen Fehler, wenn vom Selben "Issuer: C, ST, L, O, OU, CN" eine vergebene Seriennummer nochmal an ein anderes Zertifikat vergeben wird. In diesem Fall können sie mit einem CLI-Argument die Anfangsseriennummer auf einen andere Wert setzen. Die Seriennummer wird als Hex-Zahl angegeben und die Anzahl der Ziffern muss gerade sein. So würde z.B. 0F1 zu einem Fehler führen und sollte als F1 oder 00F1 eingegeben werden.
k.elaammari's avatar
readme    
k.elaammari committed
329
330
331
332
333
334
335
336
337
338
339
340
341
342

```shell
#./scripts/openssl_generate.sh 01
#./scripts/openssl_generate.sh FF
#./scripts/openssl_generate.sh 0100
#./scripts/openssl_generate.sh FFFF
#./scripts/openssl_generate.sh 010000
#./scripts/openssl_generate.sh 0FFF8729  
#./scripts/openssl_generate.sh 01FA55DEC3
...
```

### Private-Key verloren

k.elaammari's avatar
README    
k.elaammari committed
343
Sollten Sie ihren CA-Key verlieren, kann ein Angreifer eigene Services aufbauen und wir würden diesen vertrauen.
k.elaammari's avatar
readme    
k.elaammari committed
344

k.elaammari's avatar
README    
k.elaammari committed
345
Abhilfe schafft das Erzeugen einer neuen CA, der Entzug des Vertrauens der alten CA und das Vertrauen der neuen CA. Anschließend müssen sämtliche Dienst-Zertifikate erneuert und von der neuen CA signiert werden. Falls die neue CA denselben Issuer (C, ST, L, O, OU, CN) hat, müssen die Dienst-Zertifikate mit einer höheren Seriennummer erzeugt werden.
Karim El Aammari's avatar
README    
Karim El Aammari committed
346

k.elaammari's avatar
README    
k.elaammari committed
347
Falls der Key eines Dienstes verlorengeht, könnte ein Angreifer sich als diesen Dienst ausgeben. 
k.elaammari's avatar
readme    
k.elaammari committed
348

k.elaammari's avatar
README    
k.elaammari committed
349
In diesem Fall müssen wir ebenso alle Zertifikate erneuen, weil wir keinen Zertifikat-Revocation-Mechanismus implementiert haben. 
k.elaammari's avatar
readme    
k.elaammari committed
350

Karim El Aammari's avatar
README    
Karim El Aammari committed
351

k.elaammari's avatar
README    
k.elaammari committed
352
Nachdem Zertifikate ausgetauscht wurden, müssen die entsprechenden Dienste neugestartet werden.
k.elaammari's avatar
readme    
k.elaammari committed
353

k.elaammari's avatar
README    
k.elaammari committed
354
Hierfür bitte folgendes Ausführen. Beachten Sie die Zertifikatsseriennummmer.
k.elaammari's avatar
readme    
k.elaammari committed
355
```shell
k.elaammari's avatar
README    
k.elaammari committed
356
357
./scripts/openssl_generate.sh $SN
vagrant provision --all
k.elaammari's avatar
readme    
k.elaammari committed
358
359
360
361
```

### Eigene Zertifikate

k.elaammari's avatar
readme    
k.elaammari committed
362
Wenn Sie eigene Zertifikate erzeugen und diese in diesem Workflow benutzen möchten, müssen Sie diese an die entsprechenden Pfade kopieren oder verlinken. Standardmäßig werden die erzeugten Zertifikate aus ```./openssl/data/certificates``` mit dem jeweiligen Provision-Verzeichnis der VMs verlinkt. Sie können an dieselben Stellen ```./provision/*/https``` Ihre Zertifikate kopieren und mit dem Provisionierer diese übertragen lassen. Sollten ihre Zertifikate nicht wie unten benannt werden können, müssen Sie zusätzlich in den Konfigurationen die geänderten Dateinamen eintragen.
k.elaammari's avatar
readme    
k.elaammari committed
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383

```shell
./provision
    ./chronograf
        ./config/chronograf.service # TLS_CERTIFICATE, TLS_PRIVATE_KEY
        ./https
            ./cacert.pem
            ./chronografcert.pem
            ./chronografkey.pem
    ./grafana
        ./config/graf_conf.ini      # Sektion [server]: cert_file, cert_key
        ./https
            ./cacert.pem
            ./grafanacert.pem
            ./grafanakey.pem
    ./influx
        ./config/influxdb.conf      # Sektion [http]: https-certificate, https-private-key
        ./https
            ./cacert.pem
            ./influxcert.pem
            ./influxkey.pem
Karim El Aammari's avatar
README    
Karim El Aammari committed
384
```