我正在开发一个基于 .NET 5 构建的应用程序,我们生成 docker 映像。最近,我使用作为基础的自定义 Docker 映像之一遇到问题。我的应用程序中很少有外部端点,但出现 SSL 证书错误。
在对这个问题进行了一些研究之后,我发现openssl.cnf
文件应使用某些密码字符串进行更新,并且 TLS 协议需要设置为 1.2。
当我手动尝试复制新文件时,我能够获得结果openssl.cnf
使用命令提示符命令的文件
docker cp openssl.cnf Alkaline_Pretty:etc/ssl/openssl.cnf
但是当我尝试复制新的openssl.cnf
文件来自Dockerfile
在我的应用程序中,它不会更新容器位置中的文件
我的 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
一些可能失败的原因
-
WebApplication/openssl.cnf
可能不同于openssl.cnf
示例中使用的
-
你的应用程序可能会毁掉openssl.cnf
在容器启动时 - 当然,源代码中没有任何有毒的东西,这可能会导致它
-
update-ca-certificates
可能会有一些副作用,这可能与新的openssl.cnf
破坏你的应用程序。
调试建议
Try to diff
原本的openssl.cnf
与openssl.cnf
在容器中。它将帮助您找到错误的根源。
If the openssl.cnf
是否完好无损,我建议检查新的证书包是否与旧图像中的相同。
If the openssl.cnf
改变了,就努力寻找改变的根源。更改 Dockerfile 的执行顺序可能会对您有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)