Nginx背后的客户端证书身份验证ASP.NET Core Docker(alpine)

时间:2020-10-27 13:28:48

标签: docker asp.net-core nginx

由于当前的基础架构是 Internet-> IIS-> nginx->应用程序(Docker),我正在尝试添加客户端证书身份验证以实现“合成mTLS”。该API也受JWT保护。我已将一个副本上传到GitHub

茶est

在Windows上运行Kestrel可以正常工作,并且浏览器会提示您已安装的那些客户端证书。选择由受信任的授予访问权限的证书签名的任何内容。

Docker

但是,在Docker(没有nginx)上,我遇到了tags.every((tag: any) => doc.tags.includes(tag)) && tags.length === doc.tags.length; 的问题。我将证书添加为

PartialChain: unable to get local issuer certificate

注意::在我公司,我们使用基于Alpine的图片,并且有关于证书的警告。在建立标准并运行之后,我将在下面处理。参见issue

nginx

为客户端证书配置了nginx

ADD root.crt /usr/local/share/ca-certificates/root.crt
RUN update-ca-certificates

在这种情况下,日志没有给我任何东西

server {
  ...
  ssl_verify_client      optional_no_ca;
  ssl_client_certificate /etc/nginx/client_certs/root.crt;
  ...
}

如果尝试发送不是由nginx指定的证书颁发的客户端证书,nginx不会停止访问吗?

有人可以帮助我阐明如何使它工作吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,就我而言,我必须为Kestrel注册一些环境变量。

具有配置为使用根证书的环境变量的容器的示例:

docker run --rm -it -p 5000:80 -p 5001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=5001 -e ASPNETCORE_Kestrel__Certificates__Default__Path=/usr/local/share/ca-certificates/myCert.crt imageName:latest

documentation中的更多信息