Reemplazo de Certificados Internos
|
Las versiones de NeuVector 5.4.2 y posteriores deben hacer que los usuarios generen/reemplacen certificados internos antes de usar NeuVector. Después de marzo de 2025, las versiones de NeuVector anteriores a 5.4.2 deben hacer que los usuarios generen/reemplacen certificados internos antes de usar NeuVector. |
Comunicación y Certificados Internos
SUSE® Security incluye certificados autofirmados predeterminados para la encriptación para el Manager (acceso a consola/UI), Controller (API REST, interno), Enforcer (interno) y comunicaciones de Scanner (interno).
Estos certificados pueden ser reemplazados por los suyos para reforzar aún más la comunicación. Para reemplazar los certificados utilizados para el acceso externo a SUSE® Security (es decir, desde el navegador al Manager o desde la API REST al Controller), consulte esta sección. Vea a continuación para reemplazar los certificados utilizados en la comunicación interna entre contenedores de SUSE® Security.
|
Se recomienda realizar el reemplazo de certificados solo durante el despliegue inicial de SUSE® Security. Reemplazar en un clúster en funcionamiento (incluso con una actualización escalonada) puede resultar en un estado inestable en el que los pods de SUSE® Security no pueden comunicarse entre sí debido a una discrepancia en los certificados, pudiendo ocurrir PÉRDIDA DE DATOS. |
Reemplazo de Certificados Utilizados en Comunicaciones Internas de SUSE® Security
Reemplace los archivos de encriptación internos ca.crt, tls.key, tls.crt de la siguiente manera:
-
Cree un nuevo archivo
ca.cfgcon su editor favorito:
[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
|
Para información adicional sobre |
-
Elija su escenario de las opciones a continuación:
-
Nuevo certificado
-
Actualice el certificado actual con SANs.
-
Regenera los archivos de certificado y añade SANs
-
Regenera el certificado cuando se esté utilizando el certificado integrado.
Si su certificado está a punto de expirar y necesita generar uno nuevo, siga los pasos a continuación:
-
Elimine el antiguo
ca.crt,tls.key,tls.crt, secreto de Kubernetes, y genere nuevos: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 -
Luego edite los archivos yaml de despliegue del Controller, Enforcer y Scanner, añadiendo:
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-certLuego proceda a desplegar SUSE® Security como antes. También puede acceder mediante shell a los pods del controlador/enforcer/scanner para confirmar que los archivos ca.crt, tls.key, tls.crt son los personalizados y que las comunicaciones de SUSE® Security están funcionando con los nuevos certificados.
Ejemplo de comandos de parche para el controlador (cambie el espacio de nombres a cattle-neuvector-system si es necesario, y modifique para usar en enforcer, scanner)
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"} ] } ]'
Si sus archivos de certificado fueron creados antes de la versión SUSE® Security 5.3, debe actualizar el certificado con al menos un Nombre Alternativo del Sujeto, o SAN por su abreviatura. Si aún tiene los archivos ca.key y ca.crt accesibles, ejecute los comandos de la siguiente manera:
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
Una vez que los archivos de certificado hayan sido actualizados, reinicie los despliegues para utilizar el certificado actualizado:
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
Si sus archivos de certificado fueron creados antes de la versión SUSE® Security 5.3, debe actualizar el certificado con al menos un Nombre Alternativo del Sujeto, o SAN por su abreviatura. Si ya no tiene los archivos ca.key y ca.crt, siga los pasos a continuación:
-
Haga una copia de seguridad de su certificado original.
kubectl get secret internal-cert -o yaml > internal-cert.yaml -
Exporte el internal-cert existente.
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 -
Cree nuevos archivos de certificado y certificados internos.
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 -
Fusione los archivos antiguos y nuevos
ca.crt.cat old-ca.crt > /tmp/ca.crt cat ca.crt >> /tmp/ca.crt -
Actualice el secreto de Kubernetes con el
ca.crtfusionado.kubectl 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 -
Reinicie los despliegues para utilizar el certificado actualizado.
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 -
Espere a que se complete el reinicio.
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 -
Asegúrese de que la consola sea accesible y que todos los controladores estén en línea. Actualice el secreto de Kubernetes con el nuevo
tls.key.kubectl 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 -
Reinicie los despliegues para utilizar el certificado actualizado.
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 -
Espere a que se complete el reinicio.
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 -
Asegúrese de que la consola sea accesible y que todos los controladores estén en línea. Actualice el secreto de Kubernetes con el nuevo
ca.crt.kubectl 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 -
Reinicie los despliegues para utilizar el certificado actualizado.
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 -
Espere a que se complete el reinicio.
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 -
Asegúrese de que la consola sea accesible y que todos los controladores estén en línea.
Si no reemplazó el certificado interno anteriormente y desea migrar a un nuevo conjunto de certificados, siga los pasos a continuación:
-
Verifique si ya tiene el certificado interno generado automáticamente.
kubectl get secret internal-cert -o yamlSi ve
tls.key,tls.crtyca.crtallí, eso significa que ha estado utilizando el certificado generado automáticamente y puede omitir esta sección.Si puede ver el secreto, pero no puede encontrar estos secretos, considere habilitar
internal.autoRotateCerten la anulación de gráficos de Helm. Esta opción generará y rotará su certificado interno automáticamente.Si no utiliza el certificado interno generado automáticamente y no puede hacerlo, siga los pasos a continuación:
-
Siga los pasos en la pestaña
New certificatepara utilizar un secreto de Kubernetes para gestionar el certificado interno. En lugar de generar un nuevo certificado, utilice el certificado,old-ca.crt,old-tls.crtyold-tls.key, recuperados a continuación: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 -
Asegúrese de que todos los componentes estén funcionando sin errores.
-
Después de eso, siga los pasos en la pestaña
Regenerate certificate files and add SANsy migre a su propio certificado.
Actualizando/Desplegando con Helm
A partir del gráfico de Helm 2.4.1, ya se puede gestionar la instalación del certificado interno. El gráfico values.yaml debe ser revisado para todas las configuraciones. El siguiente ejemplo utiliza RKE2, Ingress estándar y certificados de instalador.
# 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