我正在努力为使用 docker 托管的 asp.net 核心应用程序实现客户端身份验证。通过遵循本教程,我在本地计算机上进行了客户端身份验证:https ://blog.kritner.com/2020/07/15/setting-up-mtls-and-kestrel/
但是一旦我从本地 Kestrel 切换到 Docker(也使用 Kestrel),它就不再工作了。邮递员显示以下错误:Error: socket hang up
. 在我将 ca 证书安装到我的机器之前,我的本地 Kestrel 显示了同样的错误。我创建了我自己的 ca 和客户端证书,由这个 ca 签名(参见教程)。
所以我将证书复制到我的项目文件夹中,并在 docker 容器上执行了 bash。然后我执行了以下命令,我在几个帖子中找到了这些命令:
cd /usr/local/share/ca-certificates
cp /app/myCa.pem .
mv myCa.pem myCa.crt
update-ca-certificates
一开始我确实使用了 crt 文件而不是 pem 文件,但后来我发现了那个帖子:在 Windows 上为 docker 容器安装 SSL CA 证书
update-ca-certificates 命令返回以下输出,看起来不错:
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
但我仍然得到同样的错误(套接字挂断)
有人知道如何解决这个问题吗?我必须在其他地方安装证书吗?谢谢您的回答 :)
附加信息:
我使用的是asp.net core version 5。我没有在问题中包含docker文件,因为我没有更改它,所以它是VSStudioEnterprise2022原始创建的文件。我使用 WSL 和 Ubuntu 在我的 Windows PC 上运行 Docker Desktop。
我在 Startup.cs 中配置了 Kestrel,方法如下:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureKestrel(options => {
options.ConfigureHttpsDefaults(configureOptions => {
configureOptions.ClientCertificateMode = ClientCertificateMode.RequireCertificate;
});
});
});