# Gestionar la seguridad de swarm con infraestructura de clave pública (PKI)


El sistema de infraestructura de clave pública (PKI) del modo Swarm integrado en Docker hace que sea sencillo implementar de forma segura un sistema de orquestación de contenedores. Los nodos de un swarm utilizan Transport Layer Security (TLS) mutuo para autenticar, autorizar y cifrar las comunicaciones con otros nodos en el swarm.

Cuando creas un swarm ejecutando `docker swarm init`, Docker se designa a sí mismo como un nodo administrador. Por defecto, el nodo administrador genera una nueva Autoridad de Certificación (CA) raíz junto con un par de claves, los cuales se utilizan para asegurar las comunicaciones con otros nodos que se unan al swarm. Si lo prefieres, puedes especificar tu propia CA raíz generada externamente, usando la bandera `--external-ca` del comando [docker swarm init](/reference/cli/docker/swarm/init/).

El nodo administrador también genera dos tokens para usar cuando unas nodos adicionales al swarm: un token de trabajador y un token de administrador. Cada token incluye el resumen (digest) del certificado de la CA raíz y un secreto generado de forma aleatoria. Cuando un nodo se une al swarm, el nodo que se une utiliza el resumen para validar el certificado de la CA raíz del administrador remoto. El administrador remoto utiliza el secreto para garantizar que el nodo que se une sea un nodo aprobado.

Cada vez que un nuevo nodo se une al swarm, el administrador emite un certificado para el nodo. El certificado contiene un ID de nodo generado de forma aleatoria para identificar al nodo bajo el nombre común (CN) del certificado y el rol bajo la unidad organizativa (OU). El ID de nodo sirve como la identidad del nodo criptográficamente segura durante la vida útil del nodo en el swarm actual.

El siguiente diagrama ilustra cómo los nodos administradores y trabajadores cifran las comunicaciones utilizando un mínimo de TLS 1.2.

![TLS diagram](/engine/swarm/images/tls.webp?w=600)

El siguiente ejemplo muestra la información de un certificado de un nodo trabajador:

```text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            3b:1c:06:91:73:fb:16:ff:69:c3:f7:a2:fe:96:c1:73:e2:80:97:3b
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN=swarm-ca
        Validity
            Not Before: Aug 30 02:39:00 2016 GMT
            Not After : Nov 28 03:39:00 2016 GMT
        Subject: O=ec2adilxf4ngv7ev8fwsi61i7, OU=swarm-worker, CN=dw02poa4vqvzxi5c10gm4pq2g
...snip...
```

Por defecto, cada nodo en the swarm renueva su certificado cada tres meses. Puedes configurar este intervalo ejecutando el comando `docker swarm update --cert-expiry <TIME PERIOD>`. El valor mínimo de rotación es de 1 hora. Consulta la referencia de la CLI [docker swarm update](/reference/cli/docker/swarm/update/) para obtener más detalles.

## Rotar el certificado de la CA

> [!NOTE]
>
> Mirantis Kubernetes Engine (MKE), anteriormente conocido como Docker UCP, proporciona un servicio de
> gestión de certificados externos para el swarm. Si ejecutas swarm en MKE, no debes rotar
> los certificados de la CA manualmente. En su lugar, ponte en contacto con el soporte de Mirantis
> si necesitas rotar un certificado.

En caso de que una clave de CA del clúster o un nodo administrador se vean comprometidos, puedes rotar la CA raíz del swarm para que ninguno de los nodos confíe ya en los certificados firmados por la antigua CA raíz.

Ejecuta `docker swarm ca --rotate` para generar un nuevo certificado y clave de CA. Si lo prefieres, puedes pasar las banderas `--ca-cert` y `--external-ca` para especificar el certificado raíz y usar una CA raíz externa al swarm. Alternativamente, puedes pasar las banderas `--ca-cert` y `--ca-key` para especificar el certificado y la clave exactos que deseas que use el swarm.

Al emitir el comando `docker swarm ca --rotate`, ocurren los siguientes eventos en secuencia:

1.  Docker genera un certificado con firma cruzada (cross-signed). Esto significa que una versión del nuevo certificado de CA raíz está firmada con el antiguo certificado de CA raíz. Este certificado con firma cruzada se utiliza como un certificado intermedio para todos los certificados de nodos nuevos. Esto garantiza que los nodos que aún confían en la antigua CA raíz puedan seguir validando un certificado firmado por la nueva CA.

2.  Docker también indica a todos los nodos que renueven inmediatamente sus certificados TLS. Este proceso puede tardar varios minutos, dependiendo del número de nodos en el swarm.

3.  Después de que todos los nodos en el swarm tienen un nuevo certificado TLS firmado por la nueva CA, Docker descarta el antiguo certificado de CA y el material de clave, e indica a todos los nodos que confíen únicamente en el nuevo certificado de CA.

    Esto también provoca un cambio en los tokens de unión (join tokens) del swarm. Los tokens de unión anteriores dejan de ser válidos.

A partir de este momento, todos los certificados de nodo nuevos que se emiten están firmados con la nueva CA raíz y no contienen ningún certificado intermedio.

## Aprender más

* Lee sobre cómo funcionan los [nodos](/engine/swarm/how-swarm-mode-works/pki/nodes/).
* Aprende cómo funcionan los [servicios](/engine/swarm/how-swarm-mode-works/pki/services/) en el modo Swarm.

