在本地开发中查找我的网站使用的过期 ssl 证书

Finding expired ssl certificate used by my website in local development

我有一组 Web 应用程序和项目,用于使用 Identity Server 4 测试 OAuth2 登录流程。这是大约 2 年的项目,我定期更新它以使用最新的 .Net Core 或 IdentityServer4 包。

昨天我尝试打开它时,收到警告消息说我的 ssl 证书已于 2021 年 12 月 21 日过期。

这是有道理的,我为本地计算机和当前用户打开了证书管理存储。我找到了过期的证书,并从 both 个人和受信任的根证书颁发机构.

中删除了它们

然后,我执行了“dotnet dev-certs https --trust”命令来执行一个新证书并将其安装到我的商店。添加了到期日期为 07/01/2023 的新证书,我将其复制到 受信任的根证书颁发机构

我尝试再次打开我的 Idsrv 和 Web 应用程序进行测试。

我的 Web 应用程序正在正确使用新添加的证书。

但是我的Idsrv4 项目仍在使用我已经删除的过期证书。我在证书库中找不到任何地方。我在 MMC 控制台中使用了 Find 功能,但只找到了有效期为 2023 年的新证书。

我多次清理我的解决方案。删除了 bin 和 obj 文件夹。尝试了不同的浏览器,证书错误仍然存​​在。

我的 Idsrv 设置简单且标准:

services.AddIdentityServer()
                    .AddDeveloperSigningCredential()
                    .AddTestUsers(Config.GetUsers())
                    .AddInMemoryIdentityResources(Config.GetIdentityResources())
                    .AddInMemoryApiResources(Config.GetApiResources())
                    .AddInMemoryApiScopes(Config.GetApiScopes())
                    .AddInMemoryClients(Config.GetClients())            
                    .AddProfileService<ProfileService>();

配置方法如下:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseIdentityServer();

            var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value;
            app.UseRequestLocalization(localizationOptions);

            app.UseStaticFiles();
            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapDefaultControllerRoute();
            });
        }

你能帮我看看如何强制我的 Identity Server 4 项目使用新生成的证书吗?或者我在哪里可以找到并删除旧的过期证书?

我想当您直接 运行 kestrel 或通过 IIS-Express 运行 时会有所不同。直接用 Kestrel 试试?

否则,看看这篇可能对你有帮助的文章: How to Change the HTTPS Certificate in IIS Express

我找到了问题的根本原因。我正在使用 Kestrel 运行 应用程序,这是由于机密文件中的 Kestrel:Certificates:DevelopmentPassword 值所致。

由于该设置,它仍然链接到过期的证书,该证书必须在我的机器中的某个地方。只需删除此行,我的网络应用程序就会开始使用正确的 ssl 证书。

更新 HTTPS 证书 IIS Express 或使用 Jexus Manager 也有助于解决问题(不能完全解决)。但它仅在您使用 IISExpress 时才能解决问题。如果您使用 Project 设置启动 Web 应用程序,则不会使用 IISExpress ssl 配置。