Самый опасный конструктор в .NET
От: Danchik Украина  
Дата: 14.02.20 09:56
Оценка: 181 (10)
Привет, вот набрел на реддите.
Может, кому-то и не в новизну, а я пошел проверять.

Касается конструктора X509Certificate2
https://snede.net/the-most-dangerous-constructor-in-net/
Re: Самый опасный конструктор в .NET
От: Jericho113 Украина  
Дата: 17.02.20 11:15
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Привет, вот набрел на реддите.

D>Касается конструктора X509Certificate2
D>https://snede.net/the-most-dangerous-constructor-in-net/

Спасибо за информацию очень полезно.
Не увере что у меня та же ситуация что и в статье по ссылке но вот замечаю такую закономерность
1) Есть EC2 инстансы в AWS на которых крутится WebAPI2 сервис (.NET 4.7.2 ) который при старте один раз вычитывает из AWS ParamStore сертификаты и импортит их как
X509Certificate2 x509Cert2;
x509Certificate2.Import(rawCertificateBinaryData, password, X509KeyStorageFlags.MachineKeySet);

2) по ходу работы, сервис много раз обращается к сертификатам, НО, т.к. сертификат каждый раз нужно освобождать,
то напрямую его взять не получится и поэтому перед его использованием делаю копию
var originalCert = GetCertificate(...);
using(var certToUse = new X509Certificate2((X509Certificate) originalCert))
using (RSACryptoServiceProvider privateKey = (RSACryptoServiceProvider) certToUse.PrivateKey)
{
    return privateKey.Decrypt(value, true)
}


И вот со временем(порядка 2-3 дней после рестарта/редеплоя) WebAPI2 сервис начинает кидать странные ошибки из метода Decrypt
"Keyset does not exist"

at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
   at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
   at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
   at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
   at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
....


Насколько я понял такие ошибки могут быть связаны с тем что у юзера под которым крутится сервис внезапно пропадают права на доступ к
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys но как то они странно эти права пропадают спустя 2-3 дня нормальной работы..
проверил никто не реконфигурировал сервис и не вносил иных любых изменений в EC2 инстанс.

Кто-либо сталкивался с подобным повереднием или же это я один такой удачливый?
NetDigitally yours ....
Отредактировано 17.02.2020 13:29 Jericho113 . Предыдущая версия .
.net x509certificate2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.