我试图添加客户端证书身份验证,以实现“合成mTLS”,因为当前的基础设施是Internet -> IIS -> nginx ->应用程序(Docker)。API也受到JWT的保护。我已经上传了一个拷贝到GitHub
红隼
在Windows上运行Kestrel很好,浏览器提示输入已安装的客户端证书。选择由受信任的证书签名的任何授予访问权限的证书。
Docker
然而,在Docker (没有nginx)上,我发现了PartialChain: unable to get local issuer certificate的问题。我将证书添加为
ADD root.crt /usr/local/share/ca-certificates/root.crt
RUN update-ca-certificates注意:在我的公司,我们使用基于阿尔卑斯的图像,并有一个关于证书的警告。我将在获得标准运行之后再处理这件事。见问题。
nginx
nginx配置为客户端证书。
server {
...
ssl_verify_client optional_no_ca;
ssl_client_certificate /etc/nginx/client_certs/root.crt;
...
}在这种情况下,日志没有给我任何东西
dbug: Microsoft.AspNetCore.Authentication.Certificate.CertificateAuthenticationHandler[9]
AuthenticationScheme: Certificate was not authenticated.
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
Authorization failed.如果尝试发送未由nginx中指定的证书颁发的客户端证书,那么nginx不应该停止访问吗?
有人能帮我弄清楚怎么让这件事起作用吗?
谢谢
发布于 2020-12-14 17:43:57
我也面临着同样的问题,在我的例子中,我不得不为Kestrel注册一些环境变量。
配置了env变量以使用根证书的容器示例:
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关于文档的更多信息
https://stackoverflow.com/questions/64555526
复制相似问题