簡體   English   中英

為 Nginx docker 容器啟用 HTTPS

[英]Enable HTTPS for Nginx docker container

對於開發環境,我需要啟用 SSL 與 Nginx 容器的連接。

我正在獲取從 Azure Key Vault 及其 PFX 格式生成的證書。

我一直在嘗試在我的 nginx 容器中安裝 opensll,並從 PFX 生成一個 crt 和密鑰文件,但沒有任何運氣。

啟用 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

可能不是您想聽到的,但是根據用例,您提出的解決方案是危險的甚至是非常危險的。 您正在做的是將證書烘焙到圖像本身中。 證書和其他機密應安裝為 Docker 卷,因此在您的情況下,制作/etc/nginx/certs卷會更好地解決您的問題

根據您編排容器的方式,有多種方法可以將 SSL 證書放入容器中。 由於您使用“Azure”標記,我假設您使用 Azure Kubernetes 服務或 Azure 容器實例。 在 AKS 中,有很多方法可以做到這一點,但一種常見的方法是創建一個 init 容器,為其提供對密鑰保管庫的訪問權限,並將密鑰直接從密鑰保管庫加載到共享 (tmpfs) 卷中。

在容器實例中,您可以在運行時通過將容器權限分配給密鑰保險庫(類似於您在 AKS 中的操作方式)直接從密鑰保險庫中讀取密鑰,在您的 Docker 映像中創建一個入口點腳本來下載將證書復制到臨時卷,然后啟動 nginx。

無論您選擇哪種方式:永遠不會將密鑰從密鑰保管庫保存到任何類型的存儲中。

有關如何使用curl在運行時從容器內的 Azure 密鑰保管庫下載機密的示例,請參閱此頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM