Я использую IdentityServer4 и хочу загрузить сертификат подписи из файла. Например,
var certificate = new X509Certificate2(
path,
password,
X509KeyStorageFlags.EphemeralKeySet);
services.AddIdentityServer()
.AddSigningCredential(certificate)
...
certificate.Dispose();
Приведенный выше код не будет работать, когда я запрашиваю токен у IdentityServer. Но это сработает, если я уберу certificate.Dispose();
.
Я также попробовал другой вариант. Я создал RsaSecurityKey
из закрытого ключа сертификата и использовал его для добавления учетных данных подписи. И в этом случае утилизация ничего не сломает.
var rsk = new RsaSecurityKey(certificate.GetRSAPrivateKey()))
services.AddIdentityServer()
.AddSigningCredential(rsk)
...
certificate.Dispose()
Так что мой вопрос более общий. Должен ли я распоряжаться X509Certificate2
объектом, созданным из существующего сертификата?
Из Документы Microsoft :
Начиная с .NET Framework 4.6, этот тип реализует интерфейс IDisposable. Когда вы закончили использовать тип, вы должны избавиться от него прямо или косвенно.