前言
繼上一篇做了 Kestrel Port 的大概說明後,後來又發生了一個狀況
因那個 App 會呼叫公司內部的 API 而公司內的API採用了 Https 引發了憑證不信任的問題
以下有兩種避免的作法
- HttpClient 注入 HttpClientHandler
services.AddHttpClient<JY_COG_FactoryWorkClient>().ConfigurePrimaryHttpMessageHandler(sp =>
{
return sp.GetRequiredService<SSLClientHandler>();
});
public class SSLClientHandler : HttpClientHandler
{
public SSLClientHandler()
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
}
}
- 在 Docker Image 下新增信任憑證
目前看起來 Dotnet Core Image Kernel 是使用 Ubuntu 參考Ubuntu官網
$ sudo apt-get install -y ca-certificates #預設已經有了
$ sudocp local-ca.crt /usr/local/share/ca-certificates #複製自己的憑證進去
$ sudo update-ca-certificates # 系統更新憑證
而因為我偷懶不想要每次匯,因此就寫在 DockerFile 中
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore "./{ProjectName}.csproj"
RUN dotnet build "{ProjectName}.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "{ProjectName}.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish . #複製編譯完成結果
COPY root04.crt /usr/local/share/ca-certificates #複製憑證
RUN update-ca-certificates #更新憑證
ENTRYPOINT ["dotnet", "{ProjectName}.dll"]
只是因為剛好這個 Image 算好找憑證匯入方式,若是其他Linux版本更新就要找個版本的更新方式了