在本地开发中查找我的网站使用的过期 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 配置。
我有一组 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 配置。