Kestrel在TLS证书更新时需要重启



当我们的证书被"让我们加密"自动更新时,需要重新启动我们的web API服务来使用新的证书。我有两个挑战:(1)如何自动检测证书何时更新,以及(2)如何使用新证书而不需要重新启动web API服务。

我们在应用设置中配置Kestrel来支持https。json文件。类似于:

HttpsInlineCertAndKeyFile": {
"Url": "https://localhost:5002",
"Certificate": {
"Path": "<path to .pem/.crt file>",
"KeyPath": "<path to .key file>",
"Password": "$CREDENTIAL_PLACEHOLDER$"
}
}

我们正在c# .net core 6中开发

有可能在不重新启动的情况下重新加载证书。基本上有一个回调机制,为每个请求加载证书。

.UseKestrel(options =>
{
options.ConfigureHttpsDefaults(o =>
{
o.ServerCertificateSelector = (context, dnsName) =>
{
return GetCertificateFromPath();
};
});
});

因为它为每个请求调用这个GetCertificateFromPath方法,所以您必须在GetCertificateFromPath()方法中以某种方式缓存证书,并且仅在更改时读取。

应该可以通过检查修改日期之类的方法来实现。

最新更新