CMK21 TLS Zertifikate von eigener CA

Da das Upgrade unserer 2.0er Site nach 2.1 nur so semi gut gelaufen ist und die Site auch schon seit gefühlten Ewigkeiten hochgezogen wird, dachten wir, es wäre mal an der Zeit und die Gelegenheit bei Null anzufangen.
Irgendwie bin ich der Meinung das ich bei der CMK21p2 die TLS Registrierung ohne Probleme mit den Zertifikaten unserer lokalen PKI gemacht habe. Da wir auch Win-Clients ausserhalb des ADs haben, habe ich sogar ein Skript gebaut das RootCA-Zert und SubCA-Zert verteilt und auf den PCs registirert so das der Agent beim TLS Connect kein Problem hat.
Die neue blanko Site ist jetzt eine 21p5 und als ich die ersten Windows Agents dort registrieren wollte war ich etwas verwundert das Zertifaktsfehler kamen. Wenn man die Site aufruft, die mit Port 8000, wird jetzt ein vom CMK erstelltes Zert präsentiert, mit gut 1000 Jahren Laufzeit. Die Site scheint nun Ihre eigene CA mitzubringen… unter /omd/sites/SITENAME/etc/ssl findet man Zerts und eine CA Konfig. Kann ich dort einfach die Zerts durch meine ersetzen?! Ich habe keine Stelle im WATO gefunden.

Hallo @MarcK,

Vorsicht, du vermischst hier verschiedene Dinge:

  1. Das Web Interface von Checkmk, welches du mit deinen eigenen Zertifikaten absichern kannst. Dazu gehört auch die REST API.
  2. Den Agent-Receiver auf Port 8000+, welcher eine interne CA verwendet.

Zu 1. hat sich nichts geändert.
2. ist neu und technisch so notwendig, dass dort keine eigenen Zertifikate hinterlegt werden können.

Wenn du Zertifikatsfehler bekommst, prüfe bitte die Webserver Konfiguration deines Checkmk Servers, ob dieser die komplette Chain ausliefert, oder nur das reine Server Zertifikat.

Hi @robin.gierse ,
ne, die Verwirrung liegt glaube ich auf einer anderen Ebene :wink:
Und ich habs glaube ich auch jetzt durchschaut und “bereinigt”.
Das “Problem” ist wohl, das ich mehr als einen aktiven Receiver habe. Die alte Seite habe ich noch, umbenannt aber sie ist noch damit das Monitoring erstmal noch läuft und damit ich die eine oder andere Regel noch mal zum Nachbau spickeln kann. Wenn ich jetzt aber die Agents neu registriere, scheinen sie erstmal noch den Port 8000 anzulaufen, bzw. es kommt ein Fehler

Failed to discover agent receiver port from http://SERVERANME/SITE/check_mk/api/1.0/domain-types/internal/actions/discover-receiver/invoke
error sending request for url (http://SERVERNAME/SITE/check_mk/api/1.0/domain-types/internal/actions/discover-receiver/invoke): error trying to connect: invalid peer certificate contents: invalid peer certificate: UnknownIssuer
error trying to connect: invalid peer certificate contents: invalid peer certificate: UnknownIssuer
invalid peer certificate contents: invalid peer certificate: UnknownIssuer

Wenn ich aber beim Registrieren den richtigen Port mitgebe, dann gehts…

C:\Program Files (x86)\checkmk\service>cmk-agent-ctl.exe register --hostname HOST --server SERVER:8001 --site SITE --user USER

Dann hast du die Herangehensweise schon gefunden, wenn man die Zertifikate noch nicht im Griff hat.
Der Zertifikatsfehler kommt oft daher, dass der Webserver hinter dem Checkmk läuft, die Zertifikatskette nicht sauber ausliefert, oder eben das Betriebssystem, auf der Agent läuft, dem Zertifikat nicht traut.

Moin,

bist du dir sicher das es so ist? Ich stehe nämlich gerade vor dem selben Problem und die Lösung dafür war einfach aber auch komisch. Wenn ich den Client versuche zu registrieren, Zertifikate sind korrekt drauf und alles wird vertraut, bekomme ich ein Fehler.

cmk-agent-ctl register --hostname HOSTNAME --server checkmk --site SITE --user automation --password 
WARN [rustls::conn] Sending fatal alert BadCertificate
WARN [rustls::conn] Sending fatal alert BadCertificate
ERROR [cmk_agent_ctl] Failed to discover agent receiver port from Checkmk REST API, both with http and https.

Error with http:
Failed to discover agent receiver port from http://checkmk/SITE/check_mk/api/1.0/domain-types/internal/actions/discover-receiver/invoke
error sending request for url (http://checkmk/SITE/check_mk/api/1.0/domain-types/internal/actions/discover-receiver/invoke): error trying to connect: invalid peer certificate contents: invalid peer certificate: UnknownIssuer
error trying to connect: invalid peer certificate contents: invalid peer certificate: UnknownIssuer
invalid peer certificate contents: invalid peer certificate: UnknownIssuer

Error with https:
Failed to discover agent receiver port from https://checkmk/SITE/check_mk/api/1.0/domain-types/internal/actions/discover-receiver/invoke
error sending request for url (https://checkmk/SITE/check_mk/api/1.0/domain-types/internal/actions/discover-receiver/invoke): error trying to connect: invalid peer certificate contents: invalid peer certificate: UnknownIssuer
error trying to connect: invalid peer certificate contents: invalid peer certificate: UnknownIssuer
invalid peer certificate contents: invalid peer certificate: UnknownIssuer

Ändere ich aber den register Befehl und schreibe beim Server den Port 8000 ran, funktioniert es auf anhieb.

cmk-agent-ctl register --hostname HOSTNAME --server checkmk:8000 --site SITE --user automation --password 
Attempting to register at checkmk:8000/SITE. Server certificate details:
PEM-encoded certificate:
-----BEGIN CERTIFICATE-----

Liegt da ein Fehler bei mir vor?!

Grüße
Nico

Hi @NicoL,
ja deine Zertifikatskonfiguration ist nicht sauber.
Entweder wird die Zertifikatskette vom Webserver nicht sauber ausgeliefert, oder dein Host traut dem Root Zertifikat nicht.
Wir haben hier einen KB-Artikel zur Zertifikatskette.
Wie man einem Server (Root) Zertifikate in den Trust Store installiert, dazu gibt es mannigfaltige Tutorials im Internet.
Die Angabe des Ports hat aber keinerlei Nachteile.

Hey,

danke für den Artikel aber genau so habe ich das damals beim Aufsetzen der Appliance gemacht und funktioniert auch bis heute, bin ich der festen Überzeugung. Ich habe mal den Check durchlaufen und auch der sagt das alles IO ist.

# curl -v https://checkmk/Site/check_mk/api/1.0/domain-types/internal/actions/discover-receiver/invoke
*   Trying IP-Address...
* TCP_NODELAY set
* Connected to checkmk (IP-Address) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, [no content] (0):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: C=DE; ST=; L=; O=GmbH; OU=; CN=checkmk; emailAddress=
*  start date: Jan 11 15:23:03 2022 GMT
*  expire date: Jan 10 15:23:03 2027 GMT
*  subjectAltName: host "checkmk" matched cert's "checkmk"
*  issuer: C=de; O=; OU=D-; CN=RootCA
*  SSL certificate verify ok.
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> GET /SITE/check_mk/api/1.0/domain-types/internal/actions/discover-receiver/invoke HTTP/1.1
> Host: checkmk
> User-Agent: curl/7.61.1
> Accept: */*
> 
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS app data, [no content] (0):
< HTTP/1.1 200 OK
< Date: Fri, 29 Jul 2022 10:40:16 GMT
< Server: Apache
< Strict-Transport-Security: max-age=63072000
< Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval' ssh: rdp:; img-src 'self' data: https://*.tile.openstreetmap.org/ ; connect-src 'self' https://crash.checkmk.com/ https://license.checkmk.com/api/upload ; frame-ancestors 'self' ; base-uri 'self'; form-action 'self' javascript: 'unsafe-inline'; object-src 'self'; worker-src 'self' blob:
< Permissions-Policy: accelerometer=(), autoplay=(), camera=(), encrypted-media=(), fullscreen=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), usb=()
< X-Frame-Options: sameorigin
< X-XSS-Protection: 1; mode=block
< X-Permitted-Cross-Domain-Policies: none
< Referrer-Policy: origin-when-cross-origin
< X-Content-Type-Options: nosniff
< Content-Length: 4
< Content-Type: text/plain; charset=utf-8
< 
* Connection #0 to host checkmk left intact

Oder irre ich mich hier und interpretiere das falsch. Was mich auch stutzig macht es der Fehler

ERROR [cmk_agent_ctl] Failed to discover agent receiver port from Checkmk REST API, both with http and https.

edit: Oder ist das ein Problem

Webzugriffsart....................................................................................................	
Erzwungenes HTTPS (inkl. Weiterleitung von HTTP auf HTTPS)

Grüße

Ich habe eben erfahren, dass es einen Bug im Agent Controller vor p9 gab.
Kannst du mal auf die Version aktualisieren und dann nochmal prüfen?

Moin,

habe eben auf p9 hochgezogen und funktioniert ohne Portangabe.

Grüße

1 Like