簡體   English   中英

將ca證書添加到以指定用戶身份運行的Tomcat Docker容器

[英]Adding ca-certificates to a Tomcat Docker container run with a designated user

我有一個直接安裝到/ usr / local / share / ca-certificates -folder的Docker卷。

certificate-folder:/usr/local/share/ca-certificates:ro

我正在使用Tomcat進行此設置,但是其他框架也可能遇到類似的問題。 Dockerfile的基礎是這樣的:

FROM       tomcat:8.5-jre8
# other Dockerfile configuration
CMD ["/start.sh"]

使用包含關鍵行的start.sh

#!/usr/bin/env bash
update-ca-certificates 
# other startup related tasks
catalina.sh run

此設置的問題在於,只要我以root用戶身份運行容器,它就可以正常工作。 但是,如果我嘗試使用類似以下的方法在Dockerfile的末尾更改為指定用戶,

ENV TOMCAT_USER="tomcat" \
    TOMCAT_UID="8080" \
    TOMCAT_GROUP="tomcat" \
    TOMCAT_GID="8080"
RUN groupadd -r --gid $TOMCAT_GID $TOMCAT_GROUP && \
    useradd -r --uid $TOMCAT_UID --gid $TOMCAT_GID $TOMCAT_USER
RUN chown -R $TOMCAT_USER:$TOMCAT_GROUP /usr/local/tomcat
USER $TOMCAT_USER

所以:

  • 由於外殼程序腳本以$ TOMCAT_USER的身份運行,因此無法運行“ update-ca-certificates”來安裝證書。
  • 由於未在Dockerfile中添加證書,因此無法在Dockerfile中運行update-ca-certificates。

因此,我最終會遇到這樣的SSL問題

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: 
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

那么,如果我仍然希望以指定的$ TOMCAT_USER身份運行容器,那么解決此類問題的正確方法是什么?

由於update-ca-certificates需要root權限才能更新/etc/ssl/certs ,因此我只看到三種可能的方法(一種可行的解決方案-下面的第三種):

  1. 從入口點刪除update-ca-certificates並在USER $TOMCAT_USER行之前添加RUN update-ca-certificates命令。 (但是,您正在使用的卷在構建時將不可用,因此無法使用…)

  2. sudo權限(無密碼)到您的$TOMCAT_USER ,並替換update-ca-certificatessudo update-ca-certificates (但是,從安全角度來看,此解決方案可能並不令人滿意...)

  3. 從您的Dockerfile中刪除USER $TOMCAT_USER TOMCAT_USER; 如果願意,請保留CMD ["/start.sh"]ENTRYPOINT ["/start.sh"] 並依賴gosu工具,該工具的主要用例就是從用戶降級為非特權用戶,同時享有比sudo wrt TTY和信號轉發更好的行為。

    您只需執行以下操作即可安裝gosu

     RUN apt-get update -y -q && \\ DEBIAN_FRONTEND=noninteractive \\ apt-get install -y -q --no-install-recommends gosu 

    (因為tomcat:8.5-jre8是基於Debian的)並通過編寫以下代碼來使用它:

    start.sh

     #!/usr/bin/env bash update-ca-certificates # other startup related tasks exec gosu $TOMCAT_UID:$TOMCAT_GID catalina.sh run 

暫無
暫無

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

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