Включить HTTPS для контейнера Nginx docker - PullRequest
0 голосов
/ 20 апреля 2020

Для среды разработки мне нужно включить SSL-соединение с контейнером Nginx.

Я получаю сертификат, сгенерированный из Azure Key Vault и его в формате PFX.

Я безуспешно пытаюсь установить opensll внутри моего nginx контейнера и сгенерировать файл crt и key из PFX.

Какой самый простой способ включить HTTPS-соединение с моим NGINX контейнером?

Это мой нерабочий dockerfile.

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/

Моя ошибка:

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: 1

1 Ответ

0 голосов
/ 20 апреля 2020

Возможно, не то, что вы хотите услышать, но предлагаемое вами решение опасно или очень опасно в зависимости от варианта использования. То, что вы делаете, это вставка сертификата в само изображение. Сертификаты и другие секреты должны быть смонтированы как Docker тома, поэтому в вашем случае сделать /etc/nginx/certs том лучше для решения вашей проблемы

Существует несколько способов получения SSL-сертификата в контейнер в зависимости от того, как вы организовать контейнер. Поскольку вы помечаете "Azure", я предполагаю, что вы используете эфир Azure Kubernetes Service или Azure Контейнерные Экземпляры. В AKS есть множество способов сделать это, но общий способ - создать контейнер init, предоставить ему доступ к хранилищу ключей и загрузить секрет непосредственно из хранилища ключей в общий том (tmpfs).

В экземплярах контейнера вы можете прочитать секрет непосредственно из хранилища ключей во время выполнения, назначив права контейнера для хранилища ключей (аналогично тому, как вы это делали бы в AKS), создав сценарий точки входа в Docker образ, который загружает сертификат во временный том и затем запускает nginx.

. Какой бы способ вы ни выбрали: никогда, никогда не сохраняйте секреты из хранилища ключей в хранилище любого типа.

См. на этой странице приведен пример использования curl для загрузки секретов из хранилища ключей Azure внутри контейнера во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...