我已经在网络和Stackoverflow上找了一些资料,但是我遇到了一些问题不能解决。我正在尝试将我的ASP.NET Core应用程序部署到Docker中。我有一个证书,称之为"FooCert.pfx",我也有一个".PEM"文件格式的副本(FooCert.pem)。我试图使我的应用程序在运行时能够找到这个证书。我有一个docker-compose.yml文件来构建和启动容器;我有一些环境变量来链接在Windows主机上证书的位置;最后,我有一个DockerFile来包装我应用程序所需的行为。
当我的应用程序尝试从linux容器的证书存储中读取时,它抛出异常。他说找不到证书并且无法识别存储。以下是我dockerfile中相关的行:
我知道Linux与Windows不同,缺少相同的证书存储库,我已在代码中进行了调整。我已尝试使用CurrentUser和LocalMachine打开根和证书颁发机构存储库,如下所示:
另外,我也了解到为了安全起见,将证书暴露在容器中并不是一个好习惯。
简而言之,存储证书的建议做法是什么?在ASP.NET Core中,如何正确访问/查找Linux容器上存储库中的证书?请注明HTML标签。
当我的应用程序尝试从linux容器的证书存储中读取时,它抛出异常。他说找不到证书并且无法识别存储。以下是我dockerfile中相关的行:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /src
...
COPY ./FooCert.pem /etc/ssl/certs/FooCert.pem
COPY ./FooCert.pem /usr/local/share/ca-certificates/FooCert.pem
COPY ./FooCert.pfx /usr/local/share/ca-certificates/FooCert.pfx
RUN openssl pkcs12 -in /usr/local/share/ca-certificates/FooCert.pfx -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > FooCert.key
RUN openssl pkcs12 -in /usr/local/share/ca-certificates/FooCert.pfx -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > FooCertClientcert.cer
RUN openssl pkcs12 -in /usr/local/share/ca-certificates/FooCert.pfx -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > FooCertcacerts.cer
COPY ./FooCert.pem /etc/ssl/certs/FooCert.pem
COPY ./FooCert.pem /usr/local/share/ca-certificates/FooCert.pem
RUN ls /usr/local/share/ca-certificates
RUN ls /etc/ssl/certs
RUN update-ca-certificates
...
[code to expose ports, define entrypoint, etc here]
我知道Linux与Windows不同,缺少相同的证书存储库,我已在代码中进行了调整。我已尝试使用CurrentUser和LocalMachine打开根和证书颁发机构存储库,如下所示:
var certStore = new X509Store(StoreName.CertificateAuthority, StoreLocation.LocalMachine);
但是这会导致Linux容器出现异常,而在Windows上没有问题。另外,我也了解到为了安全起见,将证书暴露在容器中并不是一个好习惯。
简而言之,存储证书的建议做法是什么?在ASP.NET Core中,如何正确访问/查找Linux容器上存储库中的证书?请注明HTML标签。
Program.cs
中从我的资源中读取。我认为这不是一个好的行业最佳实践,特别是对于有专门管理秘密(例如证书)的基础架构团队的组织。我也看到了在 MSFT 的 docker 和 docker-compose 示例中传递证书的方式。 - rdelgado-incinc.sh
脚本来安装和更新证书,然后通过主题名称(或其他从证书存储中读取的方法)来获取证书吗? - rdelgado-incinc