首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nginx背后的客户证书认证ASP.NET核心码头(高寒)

nginx背后的客户证书认证ASP.NET核心码头(高寒)
EN

Stack Overflow用户
提问于 2020-10-27 13:28:48
回答 1查看 1.1K关注 0票数 0

我试图添加客户端证书身份验证,以实现“合成mTLS”,因为当前的基础设施是Internet -> IIS -> nginx ->应用程序(Docker)。API也受到JWT的保护。我已经上传了一个拷贝到GitHub

红隼

在Windows上运行Kestrel很好,浏览器提示输入已安装的客户端证书。选择由受信任的证书签名的任何授予访问权限的证书。

Docker

然而,在Docker (没有nginx)上,我发现了PartialChain: unable to get local issuer certificate的问题。我将证书添加为

代码语言:javascript
复制
ADD root.crt /usr/local/share/ca-certificates/root.crt
RUN update-ca-certificates

注意:在我的公司,我们使用基于阿尔卑斯的图像,并有一个关于证书的警告。我将在获得标准运行之后再处理这件事。见问题

nginx

nginx配置为客户端证书。

代码语言:javascript
复制
server {
  ...
  ssl_verify_client      optional_no_ca;
  ssl_client_certificate /etc/nginx/client_certs/root.crt;
  ...
}

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

代码语言:javascript
复制
dbug: Microsoft.AspNetCore.Authentication.Certificate.CertificateAuthenticationHandler[9]
      AuthenticationScheme: Certificate was not authenticated.
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
      Authorization failed.

如果尝试发送未由nginx中指定的证书颁发的客户端证书,那么nginx不应该停止访问吗?

有人能帮我弄清楚怎么让这件事起作用吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-12-14 17:43:57

我也面临着同样的问题,在我的例子中,我不得不为Kestrel注册一些环境变量。

配置了env变量以使用根证书的容器示例:

代码语言:javascript
复制
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

关于文档的更多信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64555526

复制
相关文章

相似问题

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