【问题标题】:Unable to update Openssl.cnf file using Dockerfile command无法使用 Dockerfile 命令更新 Openssl.cnf 文件
【发布时间】:2022-02-26 00:18:29
【问题描述】:

我正在开发一个基于 .NET 5 的应用程序,我们生成 docker 映像。最近,我使用作为基础的自定义 docker 图像之一出现问题。我的应用程序中出现 SSL 证书错误,外部端点很少。

在对这个问题做了一些研究后,我发现openssl.cnf 文件应该使用某些密码字符串进行更新,并且需要将 TLS 协议设置为 1.2。

当我手动尝试使用命令提示符命令复制新的openssl.cnf 文件时,我能够实现结果

docker cp openssl.cnf Alkaline_Pretty:etc/ssl/openssl.cnf

但是当我尝试在我的应用程序中从Dockerfile 复制新的openssl.cnf 文件时,它不会更新容器位置中的文件

我的 docker 文件如下所示:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM custom/docker/Imagefor/datadog:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["Nuget.Config", "."]
COPY ["Directory.Build.props", "."]
COPY ["WebApplication/WebApplication.csproj", "WebApplication/"]
RUN dotnet restore "WebApplication/WebApplication.csproj"
COPY . .
WORKDIR "/src/WebApplication"
RUN dotnet build "WebApplication.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication.csproj" -c Release -o /app/publish


FROM base AS final
# Install ca-certificates
COPY WebApplication/SomeCertificate.crt /usr/local/share/ca-certificates/SomeCertificate.crt
COPY WebApplication/openssl.cnf /etc/ssl/openssl.cnf
RUN update-ca-certificates

#Datadog service name
ENV DD_SERVICE_NAME=myapplication
ENV ASPNETCORE_URLS=http://+:8080
ENV DD_LOGS_INJECTION=true
ENV DD_TRACE_AGENT_PORT=8126

WORKDIR /app
COPY --from=publish /app/publish .

ENTRYPOINT ["dotnet", "WebApplication.dll"] ```


My file structure is something like this:

src 
   WebAppplication
    WebApplication.csproj
     openssl.cnf

【问题讨论】:

  • 在您的docker cp 中,您使用的是路径/etc/ssl/openssl.cnf。在您的dockerfile 中,您使用的是/usr/local/ssl/openssl.cnf。为什么会有这种差异?
  • @omajid 我的错,我也在文件中使用 /etc/ssl/openssl.cnf,对不起,这是我的错误推错了,我现在已经更正了
  • 这行代码COPY WebApplication/SomeCertificate.crt /usr/local/share/ca-certificates/SomeCertificate.crt 有效吗?文件到那里了吗?如果不确定,请尝试不同的新文件,以排除它。另外,您是否尝试将任何其他文件复制到/etc/ssl/ 文件夹?
  • @nferreira78,所以问题不在于证书,问题在于未复制到容器路径且未更新的 openssl.cnf 文件
  • 感谢@abbs,这正是我需要知道的,现在您是否要复制更新的openssl.cnf 文件?我的意思是文件的新版本,来自上一个镜像构建中的那个?

标签: dockerfile .net-5


【解决方案1】:

一些可能的失败原因

  1. WebApplication/openssl.cnf 可能与示例中使用的openssl.cnf 不同

  2. 您的应用程序可能会在容器启动时破坏 openssl.cnf - 可以肯定的是,源代码中没有任何有毒物质,这可能会导致它

  3. update-ca-certificates 可能会有一些副作用,新的openssl.cnf 可能会破坏您的应用程序。

调试建议

尝试diff 原来的openssl.cnf 与容器中的openssl.cnf。它将帮助您找到错误的根源。

如果openssl.cnf 完好无损,我建议检查新证书包是否与旧图像中的相同。

如果openssl.cnf 被更改,请尝试查找更改的来源。更改 Dockerfile 的执行顺序可能会对您有所帮助。

【讨论】:

  • 谢谢我试着检查一下
猜你喜欢
  • 2020-03-19
  • 1970-01-01
  • 2019-11-08
  • 2019-01-28
  • 2022-07-28
  • 1970-01-01
  • 2019-07-17
  • 2017-11-12
  • 2016-06-06
相关资源
最近更新 更多