Substituindo Certificados Internos

As versões do NeuVector 5.4.2 e posteriores devem exigir que os usuários gerem ou substituam os certificados internos antes de usar o NeuVector. Após março de 2025, as versões do NeuVector anteriores a 5.4.2 devem exigir que os usuários gerem ou substituam os certificados internos antes de usar o NeuVector.

Comunicação e Certificados Internos

SUSE® Security inclui certificados autoassinados padrão para criptografia para o Gerente (acesso ao console/UI), Controlador (API REST, interno), Enforcer (interno) e Scanner (interno).

Esses certificados podem ser substituídos pelos seus próprios para reforçar ainda mais a comunicação. Para substituir os certificados usados pelo acesso externo ao SUSE® Security (ou seja, navegador para o Gerente, ou API REST para o Controlador), consulte esta seção. Veja abaixo como substituir os certificados usados na comunicação interna entre os contêineres SUSE® Security.

Recomenda-se que a substituição de certificados seja realizada apenas durante a implantação inicial do SUSE® Security. Substituir em um cluster em execução (mesmo com rolling upgrade) pode resultar em um estado instável em que os pods SUSE® Security não conseguem se comunicar entre si devido a uma incompatibilidade nos certificados, e PERDA DE DADOS pode ocorrer.

Substituindo Certificados Usados nas Comunicações Internas do SUSE® Security

Substitua os arquivos de criptografia internos ca.crt, tls.key, tls.crt da seguinte forma:

  • Crie um novo arquivo ca.cfg com seu 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 informações adicionais sobre ca.cfg, consulte Substituindo Certificado Autoassinado.

  • Escolha seu cenário entre as opções abaixo:

  • Novo certificado

  • Atualize o certificado atual com SANs

  • Regenerar arquivos de certificado e adicionar SANs

  • Regenerar certificado quando o certificado incorporado estiver sendo usado

Se o seu certificado está prestes a expirar e você precisa gerar um novo, siga os passos abaixo:

  • Exclua o antigo ca.crt, tls.key, tls.crt, segredo do Kubernetes, e gere novos:

    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
  • Em seguida, edite os arquivos de implantação do Controller, Enforcer e Scanner, adicionando:

          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-cert

    Em seguida, prossiga para implantar SUSE® Security como antes. Você também pode acessar o shell dos pods controller/enforcer/scanner para confirmar que os arquivos ca.crt, tls.key, tls.crt são os personalizados e que as comunicações SUSE® Security estão funcionando usando os novos certificados.

    Exemplo de comandos de patch para o controller (mude o namespace para cattle-neuvector-system se necessário, e modifique para uso no 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"} ] } ]'

Se seus arquivos de certificado foram criados antes da versão SUSE® Security 5.3, você precisa atualizar o certificado com pelo menos um Subject Alternative Name (SAN). Se você ainda tiver os arquivos ca.key e ca.crt acessíveis, execute os comandos da seguinte forma:

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

Uma vez que os arquivos de certificado tenham sido atualizados, reinicie as implantações para usar o certificado atualizado:

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

Se seus arquivos de certificado foram criados antes da versão SUSE® Security 5.3, você precisa atualizar o certificado com pelo menos um Subject Alternative Name (SAN). Se você não tiver mais os arquivos ca.key e ca.crt, siga os passos abaixo:

  • Faça backup do seu certificado original

    kubectl get secret internal-cert -o yaml > internal-cert.yaml
  • Exporte o 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
  • Crie novos arquivos de certificado e 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
  • Mescle os arquivos antigos e novos ca.crt

    cat old-ca.crt > /tmp/ca.crt cat ca.crt >> /tmp/ca.crt
  • Atualize o segredo do Kubernetes com o ca.crt mesclado

    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 as implantações para usar o certificado atualizado

    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
  • Aguarde a conclusão da reinicialização

    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
  • Certifique-se de que o console pode ser acessado e que todos os controladores estão online.* Atualize o segredo do Kubernetes com o novo 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 as implantações para usar o certificado atualizado

    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
  • Aguarde a conclusão da reinicialização

    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
  • Certifique-se de que o console pode ser acessado e que todos os controladores estão online.* Atualize o segredo do Kubernetes com o novo 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 as implantações para usar o certificado atualizado

    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
  • Aguarde a conclusão da reinicialização

    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
  • Certifique-se de que o console pode ser acessado e que todos os controladores estão online.

Se você não substituiu o certificado interno antes e deseja migrar para um novo conjunto de certificados, siga os passos abaixo:

  • Verifique se você já possui o certificado interno gerado automaticamente.

    kubectl get secret internal-cert -o yaml

    Se você vê tls.key, tls.crt e ca.crt lá, isso significa que você tem utilizado o certificado gerado automaticamente e pode pular esta seção.

    Se você consegue ver o segredo, mas não consegue encontrar esses segredos, considere habilitar internal.autoRotateCert na sobreposição dos gráficos do Helm. Esta opção irá gerar e rotacionar seu certificado interno automaticamente.

    Se você não usa o certificado interno gerado automaticamente e não pode fazê-lo, siga os passos abaixo:

  • Siga os passos na aba New certificate para usar um segredo do Kubernetes para gerenciar o certificado interno. Em vez de gerar um novo certificado, use o certificado, old-ca.crt, old-tls.crt e old-tls.key, recuperados abaixo:

    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
  • Certifique-se de que todos os componentes estão funcionando sem erros.

  • Depois disso, siga os passos na aba Regenerate certificate files and add SANs e migre para seu próprio certificado.

Atualizando/Implantação com Helm

A partir do gráfico Helm 2.4.1, agora podemos gerenciar a instalação do certificado interno. O gráfico values.yaml deve ser revisado para todas as configurações. O exemplo abaixo utiliza RKE2, Ingress padrão e certificados do 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