首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于证书链中的错误,远程证书无效: UntrustedRoot和SendGrid在Docker中

由于证书链中的错误,远程证书无效: UntrustedRoot和SendGrid在Docker中
EN

Stack Overflow用户
提问于 2021-12-07 12:26:22
回答 1查看 6.5K关注 0票数 2

我使用SendGrid发送电子邮件.net5 windows服务,当我从Visual本地运行应用程序时,它可以正常工作。但是,当我在Docker中运行应用程序时,它在SendEmailAsync上出现了一个异常。

异常:

远程证书由于证书链中的错误而无效: UntrustedRoot

代码语言:javascript
复制
List<Personalization> personalizations = new List<Personalization>();
Personalization personalization = new Personalization();

personalization.From = new EmailAddress(emailDetails.SenderMailID);
personalization.Tos = GetRecipientsList(emailDetails.RecipientMailID);
personalization.Subject = emailDetails.Subject;
personalizations.Add(personalization);
var msg = new SendGridMessage
{
    From = new EmailAddress(emailDetails.SenderMailID),
    Subject = emailDetails.Subject
};
msg.AddContent(MimeType.Html, emailDetails.Message);
msg.Personalizations = personalizations;
var sendGridClient = new SendGridClient(apiKey);
var sendGridResponse = await sendGridClient.SendEmailAsync(msg);

码头文件:

代码语言:javascript
复制
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["src/service/MyWindowsService/MyWindowsService.csproj", "src/service/MyWindowsService/"]
RUN dotnet restore "src/service/MyWindowsService/MyWindowsService.csproj"
COPY . .
WORKDIR "/src/src/service/MyWindowsService"
RUN dotnet build "MyWindowsService.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWindowsService.dll"]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-07 13:42:59

这里的问题似乎是一个不受信任的证书。例如,当证书自签名或使用非公共CA根时,可能会发生这种情况。

在这种情况下,我要做的是将证书或CA复制到基础/最后停靠阶段的路径"/etc/ssl/certs/“。

例如,在停靠文件的第二行中:

副本./server-证书.etc/etc/ssl/certs/server-证书

如果这是你的问题,前面的方法会告诉你。假设这是解决方案,我建议您不要将证书直接复制到您的停靠文件中。例如,在生产环境中,如果您使用的是库伯内特斯( Kubernetes )或特朗码头( trought ),您应该将其作为一个秘密来处理--例如,撰写和卷。

编辑:获取您需要信任的证书,并将其放在Dockerfile的相同路径上。然后编辑您的dockerfile,如下所示:

代码语言:javascript
复制
FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
COPY ./server-certificate.pem /etc/ssl/certs/server-certificate.pem
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["src/service/MyWindowsService/MyWindowsService.csproj", "src/service/MyWindowsService/"]
RUN dotnet restore "src/service/MyWindowsService/MyWindowsService.csproj"
COPY . .
WORKDIR "/src/src/service/MyWindowsService"
RUN dotnet build "MyWindowsService.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWindowsService.dll"]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70260104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档