更改 ASP.NET 核心数据保护 API 中的证书指纹

Changing the Certificate Thumbprint in ASP.NET Core Data Protection API

我有一个两年前即将开始的项目。两年前开始开发时,我决定将 AWS SSM Parameter Store 与 ASP.NET Core 的数据保护 API 一起使用。到目前为止效果很好,但我面临的问题是数据保护使用的 SSL 证书将在一个月后到期,并且其指纹被硬编码到数据保护中。无论如何我都必须更换它,因为它快要过期了,所以我想弄清楚如何处理它...

这是我目前在项目中配置数据保护的方式:

public static IServiceCollection AddApplicationAmazonSsm(
    this IServiceCollection services) => services.TryAddAWSService<IAmazonSimpleSystemsManagement>();

public static IServiceCollection AddApplicationDataProtection(
    this IServiceCollection services) {
    services.AddApplicationAmazonSsm()
            .AddDataProtection()
            .SetApplicationName("XYZ")
            .ProtectKeysWithCertificate("ABC...")
            .PersistKeysToAWSSystemsManager("data-protection",
                o => {
                    o.TierStorageMode = TierStorageMode.AdvancedUpgradeable;
                });

    return services;
}

该项目已部署到暂存和生产环境。每个环境都有自己的 SSL 通配符证书:

然而,每个环境都共享数据保护 SSL 证书:data-protection.xyz.com

我打算做的是通过让 data-protection.xyz.com SSL 证书过期来简化设置,并切换到使用临时和生产 SSL 证书进行数据保护。通过这种方式,我从管理三个 SSL 证书到只管理两个我已经永远更新的证书。我计划通过为指向暂存或生产 SSL 证书指纹的每个环境添加新的 Parameter Store 值来使指纹可配置。由于服务器每晚重新启动,它会在启动时看到更新的参数值并将它们应用于所有应用程序实例。

我有以下问题:

据我所知,数据保护应该只会影响用户登录,如果每个人都只是简单地注销,我可以接受,因为他们可以重新登录。提前致谢!

对于其他上下文,这是 ASP.NET Core 5 项目 运行 在 Windows Server 2019 服务器上。

更新跟进

当我实际将项目发布到登台服务器时,我实际上 运行 进入了重定向循环并注意到数据保护只是一遍又一遍地制作新密钥。经过一番调查,我记得我 运行 两年前用原始证书进入这个,问题是权限。因此,在证书管理控制台中,我授予 Everyone 对证书的权限,一切都按预期开始工作。

因此,请记住在证书上设置正确的权限,以便 ASP.NET Core 可以实际访问它。我选择授予 Everyone 权限,因为有七个应用程序可以访问它,我不想经历单独添加每个应用程序的过程。


我抽出时间对此进行了测试,答案是似乎什么也没有发生。对于我的问题:...

Will this have a general impact of only signing out anyone that was signed in at that time (had a valid cookie with the old certificate), or will this cause some other negative changes elsewhere in the application?

它似乎没有任何负面影响,事实上,当我更改证书指纹、重建项目并重新加载已登录用户的页面时,它甚至没有注销用户。

Is there anything else I should be aware of before making the changes I plan to make?

不像。

Should I keep the old SSL certificate on the server for a period of time after changing and it has expired?

我不知道,但如果我这样做也不会造成任何伤害,所以我会,然后在新证书使用一段时间后最终将其删除。