Compartir comentarios
Las respuestas se generan en base a la documentación.

Usar Docker con Zscaler

En muchos entornos corporativos, el tráfico de red se intercepta y monitoriza mediante proxies HTTPS, como Zscaler. Aunque Zscaler garantiza el cumplimiento de la seguridad y el control de la red, puede causar problemas a los desarrolladores que utilizan Docker, especialmente durante los procesos de compilación, donde pueden ocurrir errores de validación de certificados SSL. Esta guía describe cómo configurar los contenedores y compilaciones de Docker para manejar adecuadamente los certificados personalizados de Zscaler, garantizando un funcionamiento fluido en entornos monitorizados.

El papel de los certificados en Docker

Cuando Docker compila o ejecuta contenedores, a menudo necesita obtener recursos de Internet, ya sea descargando una imagen base de un registro, descargando dependencias o comunicándose con servicios externos. En un entorno con proxy, Zscaler intercepta el tráfico HTTPS y reemplaza el certificado del servidor remoto por el suyo propio. Sin embargo, Docker no confía en este certificado de Zscaler por defecto, lo que provoca errores de SSL.

x509: certificate signed by unknown authority

Estos errores ocurren porque Docker no puede verificar la validez del certificado presentado por Zscaler. Para evitar esto, debes configurar Docker para que confíe en el certificado de Zscaler.

Configurar el proxy de Zscaler para Docker Desktop

Dependiendo de cómo esté desplegado Zscaler, es posible que debas configurar manualmente los ajustes del proxy de Docker Desktop para usar el proxy de Zscaler.

Si estás utilizando Zscaler como un proxy a nivel de sistema a través del Zscaler Client Connector, todo el tráfico del dispositivo se enruta automáticamente a través de Zscaler, por lo que Docker Desktop utiliza el proxy de Zscaler de forma automática sin necesidad de ninguna configuración adicional.

Si no estás utilizando Zscaler como proxy a nivel de sistema, configura manualmente los ajustes de proxy en Docker Desktop. Configura los ajustes de proxy para todos los clientes de la organización utilizando Gestión de ajustes (Settings Management), o edita la configuración del proxy en la interfaz gráfica de Docker Desktop en Settings > Resources > Proxies.

Instalar certificados raíz en imágenes de Docker

Para permitir que los contenedores utilicen y confíen en el proxy de Zscaler, integra el certificado en la imagen y configura el almacén de confianza (trust store) de la imagen. Instalar los certificados durante la compilación de la imagen es el enfoque preferido, ya que elimina la necesidad de realizar configuraciones durante el inicio y proporciona un entorno coherente y auditable.

Obtener el certificado raíz

La forma más sencilla de obtener el certificado raíz es exportarlo desde una máquina donde un administrador ya lo haya instalado. Puedes usar un navegador web o el servicio de gestión de certificados del sistema (por ejemplo, el Almacén de Certificados de Windows).

Ejemplo: Exportar el certificado usando Google Chrome

  1. En Google Chrome, navega a chrome://certificate-manager/.
  2. Bajo Local certificates, selecciona View imported certificates.
  3. Busca el certificado raíz de Zscaler, a menudo etiquetado como Zscaler Root CA.
  4. Abre los detalles del certificado y selecciona Export.
  5. Guarda el certificado en formato ASCII PEM.
  6. Abre el archivo exportado en un editor de texto para confirmar que incluye -----BEGIN CERTIFICATE----- y -----END CERTIFICATE-----.

Una vez que hayas obtenido el certificado, almacénalo en un repositorio accesible, como JFrog Artifactory o un repositorio Git. Alternativamente, utiliza un almacenamiento genérico como AWS S3.

Compilar con el certificado

Para instalar estos certificados al compilar imágenes, copia el certificado en el contenedor de compilación y actualiza el almacén de confianza. Un Dockerfile de ejemplo se ve así:

FROM debian:bookworm
COPY zscaler-root-ca.crt /usr/local/share/ca-certificates/zscaler-root-ca.crt
RUN apt-get update && \
    apt-get install -y ca-certificates && \
    update-ca-certificates

Aquí, zscaler-root-ca.crt es el certificado raíz, ubicado en la raíz del contexto de compilación (a menudo dentro del repositorio Git de la aplicación).

Si utilizas un repositorio de artefactos, puedes obtener el certificado directamente usando la instrucción ADD. También puedes usar la bandera --checksum para verificar que el resumen del contenido (digest) del certificado sea correcto.

FROM debian:bookworm
ADD --checksum=sha256:24454f830cdb571e2c4ad15481119c43b3cafd48dd869a9b2945d1036d1dc68d \
    https://artifacts.example/certs/zscaler-root-ca.crt /usr/local/share/ca-certificates/zscaler-root-ca.crt
RUN apt-get update && \
    apt-get install -y ca-certificates && \
    update-ca-certificates

Usar compilaciones de múltiples etapas (multi-stage builds)

Para compilaciones de múltiples etapas donde se necesitan certificados en la imagen final de ejecución, asegúrate de que la instalación del certificado ocurra en la etapa final.

FROM debian:bookworm AS build
WORKDIR /build
RUN apt-get update && apt-get install -y \
    build-essential \
    cmake \
    curl \
    git
RUN --mount=target=. cmake -B output/

FROM debian:bookworm-slim AS final
ADD --checksum=sha256:24454f830cdb571e2c4ad15481119c43b3cafd48dd869a9b2945d1036d1dc68d \
    https://artifacts.example/certs/zscaler-root-ca.crt /usr/local/share/ca-certificates/zscaler-root-ca.crt
RUN apt-get update && \
    apt-get install -y ca-certificates && \
    update-ca-certificates
WORKDIR /app
COPY --from=build /build/output/bin .
ENTRYPOINT ["/app/bin"]

Conclusión

Integrar el certificado raíz de Zscaler directamente en tus imágenes de Docker garantiza que los contenedores se ejecuten sin problemas en entornos con proxy de Zscaler. Al utilizar este enfoque, reduces los posibles errores de ejecución y creas una configuración coherente y auditable que permite operaciones fluidas de Docker dentro de una red monitorizada.