docker - 无法通过 X509Store 访问自签名 CA

标签 docker ubuntu openssl .net-core asp.net-core-2.0

我在 Win10 机器上使用 LINUX 容器运行 dotnet core 2.1 并且 我使用 openssl 创建了一个自签名 CA 并安装在 docker 机器中。 Docker 输出显示 CA 已添加。

enter image description here

当我在命令下运行时,它还会显示已安装的证书

awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt

enter image description here

但是,安装的证书无法通过 X509Store 访问

下面的代码显示计数:0

 using (var store = new X509Store(StoreName.CertificateAuthority, StoreLocation.LocalMachine))
            {
                store.Open(OpenFlags.ReadOnly);
                Console.WriteLine($"LocalMachine-> CertificateAuthority-> Count: {store.Certificates.Count}");
                foreach (var cert in store.Certificates)
                {
                    Console.WriteLine($"cert: {cert}");
                }
            }

下面的代码显示计数:151

  using (var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine))
            {
                store.Open(OpenFlags.ReadOnly);
                Console.WriteLine($"LocalMachine-> Root-> Count: {store.Certificates.Count}");

                foreach (var cert in store.Certificates)
                {
                    Console.WriteLine($"cert: {cert.IssuerName.Name}");
                }
            }

但我认为应该是 152。

这是我的 docker 文件

FROM microsoft/dotnet:2.1-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY TestWebApp1/TestWebApp1.csproj TestWebApp1/
RUN dotnet restore TestWebApp1/TestWebApp1.csproj
COPY . .
WORKDIR /src/TestWebApp1
RUN dotnet build TestWebApp1.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish TestWebApp1.csproj -c Release -o /app 
RUN ls -l
RUN ls certificate/ 


COPY TestWebApp1/certificate/ca.crt /usr/share/ca-certificates/ca.crt
RUN echo ca.crt >> /etc/ca-certificates.conf 

RUN ls /usr/local/share/ca-certificates/
RUN dpkg-reconfigure -p critical ca-certificates
RUN update-ca-certificates 
RUN awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt

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

任何帮助将不胜感激。

提前致谢。

最佳答案

这似乎是由于多阶段 Dockerfile。

您已将证书安装在 publish 镜像中,但未安装在 final 镜像中。另外,base 不包括新安装的证书。

我建议

  1. 手动将证书从 publish 镜像复制到 final 镜像
  2. 或在 final 阶段执行 dpkg-reconfigure ... update-ca-certificates
  3. 或在 base 镜像中安装证书

我的偏好是选项 1。

关于docker - 无法通过 X509Store 访问自签名 CA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51521666/

相关文章:

docker - 运行DockerFile时找不到文件异常

ubuntu - 如何在 Hyperledger Fabric 本地网络中进行点对点通信

c - 如何提取pkcs7信封内容并验证数字签名?

ssl - 邮件服务器的 SSL 证书无效

c++ - 将 OpenSSL RSA key 与 .Net 结合使用

r - R 的 Dockerfile 配置 - 无法加载某些包

node.js - 如何在 docker-swarm 环境中处理套接字连接

go - docker 错误 : Volume specifies nonexistent driver inmemory

php - 无法安装 Composer - 缺少 json 扩展名

ubuntu - 如何在Ubuntu 18中解决hadoop节点问题