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.cfgcom 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 |
-
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-certEm 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.crtcat old-ca.crt > /tmp/ca.crt cat ca.crt >> /tmp/ca.crt -
Atualize o segredo do Kubernetes com o
ca.crtmescladokubectl 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.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 -
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.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 -
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 yamlSe você vê
tls.key,tls.crteca.crtlá, 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.autoRotateCertna 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 certificatepara 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.crteold-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 SANse 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