Должен ли я утилизировать X509Certificate2? - PullRequest
1 голос
/ 28 мая 2019

Я использую 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. Когда вы закончили использовать тип, вы должны избавиться от него прямо или косвенно.

1 Ответ

1 голос
/ 28 мая 2019

Нет, вы не должны утилизировать объект сертификата во время работы приложения, поскольку при запросе IdentityServer попытается использовать удаленный объект сертификата и завершится ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...