Para el entorno de desarrollo, necesito habilitar la conexión SSL con un contenedor Nginx.
Obtengo un certificado generado desde Azure Key Vault y está en formato PFX.
He estado tratando de instalar opensll dentro de mi contenedor nginx y generar un crt y un archivo clave desde el PFX sin suerte.
¿Cuál sería la forma más fácil de habilitar la conexión HTTPS a mi contenedor NGINX?
Este es mi dockerfile que no funciona a partir de ahora.
FROM nginx:1.17.1-alpine ARG CERT RUN apk upgrade --update-cache --available && \ apk add openssl && \ rm -rf /var/cache/apk/* RUN echo "$CERT" RUN test -z "$CERT" || echo "$CERT" && echo "no certificates setup" COPY cert.pfx /opt/certificate.pfx RUN mkdir /etc/nginx/certs RUN test -z "$CERT" || openssl pkcs12 -in /certificate.pfx -nocerts -out /etc/nginx/certs/cert.key -password pass:FakePassword && : RUN test -z "$CERT" || openssl pkcs12 -in /certificate.pfx -clcerts -nokeys -out /etc/nginx/certs/cert.crt -password pass:FakePassword && : RUN test -z "$CERT" || echo $'server { \n\ \tlisten 443 ssl; \n\ \tserver_name www.yoursite.com; \n\ \tssl_certificate /etc/nginx/certs/cert.crt; \n\ \tssl_certificate_key /etc/nginx/certs/cert.key; \n\ \tlocation / { \n\ \t\tproxy_pass http://frontend:5000/; \n\ \t\terror_log /var/log/front_end_errors.log; \n\ \t} \n\ }' >> /etc/nginx/conf.d/nginx.conf EXPOSE 80 443 COPY --from=build /app/dist /usr/share/nginx/html/mi error es:
Step 18/25 : RUN if [ "x$CERT" = "x" ] ; then : ; else openssl pkcs12 -in /opt/certificate.pfx -nocerts -out /etc/nginx/certs/cert.key ; fi ---> Running in f5d8b255e51c Enter Import Password: Can't read Password The command '/bin/sh -c if [ "x$CERT" = "x" ] ; then : ; else openssl pkcs12 -in /opt/certificate.pfx -nocerts -out /etc/nginx/certs/cert.key ; fi' returned a non-zero code: 1Probablemente no sea lo que quiere escuchar, pero la solución que propone es peligrosa o muy peligrosa según el caso de uso. Lo que está haciendo es hornear el certificado en la imagen misma. Los certificados y otros secretos deben montarse como volúmenes de Docker, por lo que en su caso, hacer /etc/nginx/certs un volumen resolvería mejor su problema
Hay varias formas de obtener el certificado SSL en el contenedor, según cómo orqueste el contenedor. Dado que etiqueta con "Azure", asumo que usa Azure Kubernetes Service o Azure Container Instances. En AKS hay muchas formas de hacer esto, pero una forma común es crear un contenedor de inicio, darle acceso al almacén de claves y cargar el secreto directamente desde el almacén de claves en un volumen compartido (tmpfs).
En Container Instances, puede leer el secreto directamente desde el almacén de claves en tiempo de ejecución asignando los derechos del contenedor al almacén de claves (similar a como lo haría en AKS), luego cree un script de punto de entrada en su imagen de Docker que descargue el certificado a un volumen temporal y luego inicia nginx.
Cualquiera que sea la forma que elija: nunca, jamás, conserve los secretos de un almacén de claves en ningún tipo de almacenamiento.
Consulte esta página para ver un ejemplo sobre cómo usar curl para descargar secretos de un almacén de claves de Azure dentro de un contenedor en tiempo de ejecución.