Austausch interner Zertifikate
|
Bei NeuVector-Versionen 5.4.2 und höher müssen Benutzer interne Zertifikate generieren/ersetzen, bevor sie NeuVector verwenden. Nach März 2025 müssen Benutzer von NeuVector-Versionen vor 5.4.2 interne Zertifikate generieren/ersetzen, bevor sie NeuVector verwenden. |
Interne Kommunikation und Zertifikate
SUSE® Security enthält standardmäßige selbstsignierte Zertifikate zur Verschlüsselung für die Kommunikation zwischen Manager (Konsole/UI-Zugriff), Controller (REST API, intern), Enforcer (intern) und Scanner (intern).
Diese Zertifikate können durch eigene ersetzt werden, um die Kommunikation weiter abzusichern. Für den Austausch von Zertifikaten, die für den externen Zugriff auf SUSE® Security verwendet werden (d.h. Browser zum Manager oder REST API zum Controller), siehe diesen Abschnitt. Siehe unten für den Austausch der Zertifikate, die in der internen Kommunikation zwischen SUSE® Security Containern verwendet werden.
|
Es wird empfohlen, den Austausch von Zertifikaten nur während der initialen Implementierung von SUSE® Security durchzuführen. Der Austausch in einem laufenden Cluster (auch mit Rolling Upgrade) kann zu einem instabilen Zustand führen, in dem SUSE® Security Pods aufgrund eines Zertifikatsmismatch nicht miteinander kommunizieren können, was zu DATENVERLUST führen kann. |
Austausch von Zertifikaten, die in der internen Kommunikation von SUSE® Security verwendet werden
Ersetzen Sie die internen Verschlüsselungsdateien ca.crt, tls.key, tls.crt wie folgt:
-
Erstellen Sie eine neue
ca.cfg-Datei mit Ihrem bevorzugten Editor:
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = California
L = San Jose
O = {product-name} Inc.
OU = Neuvector
CN = Neuvector
[v3_req]
keyUsage = digitalSignature, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = Neuvector
|
Für weitere Informationen zu |
-
Wählen Sie Ihr Szenario aus den folgenden Optionen:
-
Neues Zertifikat
-
Aktualisieren Sie das aktuelle Zertifikat mit SANs
-
Zertifikatdateien neu generieren und SANs hinzufügen
-
Zertifikat neu generieren, wenn das integrierte Zertifikat verwendet wird
Wenn Ihr Zertifikat kurz vor dem Ablauf steht und Sie ein neues generieren müssen, folgen Sie den folgenden Schritten:
-
Löschen Sie das alte
ca.crt,tls.key,tls.crt, Kubernetes-Secret und generieren Sie neue:kubectl delete secret internal-cert -n neuvector openssl genrsa -out ca.key 2048 openssl req -x509 -sha256 -new -nodes -key ca.key -days 3650 -out ca.crt openssl genrsa -out tls.key 2048 openssl req -new -key tls.key -sha256 -out cert.csr -config ca.cfg openssl req -in cert.csr -noout -text openssl x509 -req -sha256 -in cert.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt -days 3650 -extensions 'v3_req' -extfile ca.cfg openssl x509 -in tls.crt -text kubectl create secret generic internal-cert -n neuvector --from-file=tls.key --from-file=tls.crt --from-file=ca.crt -
Bearbeiten Sie dann die Implementierungs-YAML-Dateien für Controller, Enforcer und Scanner und fügen Sie Folgendes hinzu:
containers: - name: neuvector-controller/enforcer/scanner-pod volumeMounts: - mountPath: /etc/neuvector/certs/internal/cert.key name: internal-cert readOnly: true subPath: tls.key - mountPath: /etc/neuvector/certs/internal/cert.pem name: internal-cert readOnly: true subPath: tls.crt - mountPath: /etc/neuvector/certs/internal/ca.cert name: internal-cert readOnly: true subPath: ca.crt volumes: - name: internal-cert secret: defaultMode: 420 secretName: internal-certFahren Sie dann fort, SUSE® Security wie zuvor bereitzustellen. Sie können auch eine Shell in die Controller/Enforcer/Scanner-Pods öffnen, um zu bestätigen, dass die Dateien ca.crt, tls.key, tls.crt die angepassten sind und dass die SUSE® Security Kommunikationen mit den neuen Zertifikaten funktionieren.
Beispiel-Patch-Befehle für den Controller (ändern Sie den Namespace in cattle-neuvector-system, falls erforderlich, und passen Sie ihn für die Verwendung mit Enforcer, Scanner an)
NAMESPACE=neuvector kubectl patch deployment -n $\{NAMESPACE} neuvector-controller-pod --type='json' -p='[{"op": "add", "path": "/spec/template/spec/volumes/-", "value": {"name": "internal-cert", "secret": {"defaultMode": 420, "secretName": "internal-cert"}} } ]' kubectl patch deployment -n $\{NAMESPACE} neuvector-controller-pod --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/volumeMounts", "value": [{"mountPath": "/etc/neuvector/certs/internal/cert.key", "name": "internal-cert", "readOnly": true, "subPath": "cert.key"}, {"mountPath": "/etc/neuvector/certs/internal/cert.pem", "name": "internal-cert", "readOnly": true, "subPath": "cert.pem"}, {"mountPath": "/etc/neuvector/certs/internal/ca.cert", "name": "internal-cert", "readOnly": true, "subPath": "ca.cert"} ] } ]'
Wenn Ihre Zertifikatdateien vor der Version SUSE® Security 5.3 erstellt wurden, müssen Sie das Zertifikat mit mindestens einem Subject Alternative Name oder kurz SAN aktualisieren. Wenn Sie die Dateien ca.key und ca.crt noch zugänglich haben, führen Sie die Befehle wie folgt aus:
kubectl delete secret internal-cert -n neuvector
openssl genrsa -out tls.key 2048
openssl req -new -key tls.key -sha256 -out cert.csr -config ca-new.cfg
openssl req -in cert.csr -noout -text
openssl x509 -req -sha256 -in cert.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt -days 3650 -extensions 'v3_req' -extfile ca-new.cfg
openssl x509 -in tls.crt -text
kubectl create secret generic internal-cert -n neuvector --from-file=tls.key --from-file=tls.crt --from-file=ca.crt
Sobald die Zertifikatdateien aktualisiert wurden, starten Sie die Implementierungen neu, um das aktualisierte Zertifikat zu verwenden:
kubectl rollout restart deployment neuvector-controller-pod
kubectl rollout restart deployment neuvector-scanner-pod
kubectl rollout restart deployment neuvector-registry-adapter-pod
kubectl rollout restart ds neuvector-enforcer-pod
Wenn Ihre Zertifikatdateien vor Version SUSE® Security 5.3 erstellt wurden, müssen Sie das Zertifikat mit mindestens einem Subject Alternative Name, oder kurz SAN, aktualisieren. Wenn Sie die Dateien ca.key und ca.crt nicht mehr haben, befolgen Sie die folgenden Schritte:
-
Sichern Sie Ihr ursprüngliches Zertifikat
kubectl get secret internal-cert -o yaml > internal-cert.yaml -
Exportieren Sie das vorhandene interne Zertifikat
kubectl get secret internal-cert -o json | jq -r '.data."ca.crt"' | base64 -d > old-ca.crt kubectl get secret internal-cert -o json | jq -r '.data."tls.crt"' | base64 -d > old-tls.crt kubectl get secret internal-cert -o json | jq -r '.data."tls.key"' | base64 -d > old-tls.key -
Erstellen Sie neue Zertifikatdateien und interne Zertifikate
openssl genrsa -out ca.key 2048 openssl req -x509 -sha256 -new -nodes -key ca.key -days 3650 -out ca.crt openssl genrsa -out tls.key 2048 openssl req -new -key tls.key -sha256 -out cert.csr -config ca.cfg openssl req -in cert.csr -noout -text openssl x509 -req -sha256 -in cert.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt -days 3650 -extensions 'v3_req' -extfile ca.cfg openssl x509 -in tls.crt -text -
Fügen Sie die alten und neuen
ca.crtDateien zusammencat old-ca.crt > /tmp/ca.crt cat ca.crt >> /tmp/ca.crt -
Aktualisieren Sie das Kubernetes-Geheimnis mit dem zusammengeführten
ca.crtkubectl delete secret internal-cert -n neuvector kubectl create secret generic internal-cert -n neuvector --from-file=tls.key=old-tls.key --from-file=tls.crt=old-tls.crt --from-file=ca.crt=/tmp/ca.crt -
Starten Sie die Implementierungen neu, um das aktualisierte Zertifikat zu verwenden
kubectl rollout restart deployment neuvector-controller-pod kubectl rollout restart deployment neuvector-scanner-pod kubectl rollout restart deployment neuvector-registry-adapter-pod kubectl rollout restart ds neuvector-enforcer-pod -
Warten Sie, bis der Neustart abgeschlossen ist
kubectl rollout status deployment neuvector-controller-pod kubectl rollout status deployment neuvector-scanner-pod kubectl rollout status deployment neuvector-registry-adapter-pod kubectl rollout status ds neuvector-enforcer-pod -
Stellen Sie sicher, dass die Konsole zugänglich ist und alle Controller online sind.* Aktualisieren Sie das Kubernetes-Geheimnis mit dem neuen
tls.keykubectl delete secret internal-cert -n neuvector kubectl create secret generic internal-cert -n neuvector --from-file=tls.key=tls.key --from-file=tls.crt=tls.crt --from-file=ca.crt=/tmp/ca.crt -
Starten Sie die Implementierungen neu, um das aktualisierte Zertifikat zu verwenden
kubectl rollout restart deployment neuvector-controller-pod kubectl rollout restart deployment neuvector-scanner-pod kubectl rollout restart deployment neuvector-registry-adapter-pod kubectl rollout restart ds neuvector-enforcer-pod -
Warten Sie, bis der Neustart abgeschlossen ist
kubectl rollout status deployment neuvector-controller-pod kubectl rollout status deployment neuvector-scanner-pod kubectl rollout status deployment neuvector-registry-adapter-pod kubectl rollout status ds neuvector-enforcer-pod -
Stellen Sie sicher, dass die Konsole zugänglich ist und alle Controller online sind.* Aktualisieren Sie das Kubernetes-Geheimnis mit dem neuen
ca.crtkubectl delete secret internal-cert -n neuvector kubectl create secret generic internal-cert -n neuvector --from-file=tls.key=tls.key --from-file=tls.crt=tls.crt --from-file=ca.crt=ca.crt -
Starten Sie die Implementierungen neu, um das aktualisierte Zertifikat zu verwenden
kubectl rollout restart deployment neuvector-controller-pod kubectl rollout restart deployment neuvector-scanner-pod kubectl rollout restart deployment neuvector-registry-adapter-pod kubectl rollout restart ds neuvector-enforcer-pod -
Warten Sie, bis der Neustart abgeschlossen ist
kubectl rollout status deployment neuvector-controller-pod kubectl rollout status deployment neuvector-scanner-pod kubectl rollout status deployment neuvector-registry-adapter-pod kubectl rollout status ds neuvector-enforcer-pod -
Stellen Sie sicher, dass die Konsole zugänglich ist und alle Controller online sind.
Wenn Sie das interne Zertifikat zuvor nicht ersetzt haben und auf ein neues Set von Zertifikaten migrieren möchten, folgen Sie bitte den folgenden Schritten:
-
Überprüfen Sie, ob Sie bereits das interne Zertifikat automatisch generiert haben.
kubectl get secret internal-cert -o yamlWenn Sie dort
tls.key,tls.crtundca.crtsehen, bedeutet das, dass Sie das automatisch generierte Zertifikat verwendet haben und Sie diesen Abschnitt überspringen können.Wenn Sie das Geheimnis sehen können, aber diese Geheimnisse nicht finden können, ziehen Sie in Betracht,
internal.autoRotateCertin der Helm-Chart-Überschreibung zu aktivieren. Diese Option generiert und rotiert Ihr internes Zertifikat automatisch.Wenn Sie das automatisch generierte interne Zertifikat nicht verwenden und dies nicht tun können, folgen Sie bitte den folgenden Schritten:
-
Befolgen Sie die Schritte im
New certificateTab, um ein Kubernetes-Geheimnis zu verwenden, um das interne Zertifikat zu verwalten. Anstatt ein neues Zertifikat zu generieren, verwenden Sie das Zertifikat,old-ca.crt,old-tls.crtundold-tls.key, das Sie unten abgerufen haben:docker run -it --entrypoint=bash neuvector/scanner:3.654 -c "cat /etc/neuvector/certs/internal/ca.cert" > old-ca.crt docker run -it --entrypoint=bash neuvector/scanner:3.654 -c "cat /etc/neuvector/certs/internal/cert.pem" > old-tls.crt docker run -it --entrypoint=bash neuvector/scanner:3.654 -c "cat /etc/neuvector/certs/internal/cert.key" > old-tls.key -
Stellen Sie sicher, dass alle Komponenten ohne Fehler ausgeführt werden.
-
Danach folgen Sie bitte den Schritten im
Regenerate certificate files and add SANsTab und migrieren Sie zu Ihrem eigenen Zertifikat.
Aktualisieren/Bereitstellen mit Helm
Seit Helm-Chart 2.4.1 können wir nun die Installation des internen Zertifikats verwalten. Das Chart values.yaml sollte auf alle Einstellungen überprüft werden. Das folgende Beispiel verwendet RKE2, Standard-Ingress und Installationszertifikate.
# add chart
helm repo add neuvector https://neuvector.github.io/neuvector-helm/
# update chart
helm repo update
# add domain for ingress
export domain=awesome.sauce
# run the helm
helm upgrade -i neuvector -n neuvector neuvector/core --create-namespace --set imagePullSecrets=regsecret --set k3s.enabled=true --set k3s.runtimePath=/run/k3s/containerd/containerd.sock --set manager.ingress.enabled=true --set manager.ingress.host=neuvector.$domain --set manager.svc.type=ClusterIP --set controller.pvc.enabled=true --set controller.pvc.capacity=500Mi --set controller.internal.certificate.secret=internal-cert --set cve.scanner.internal.certificate.secret=internal-cert --set enforcer.internal.certificate.secret=internal-cert