У меня есть сертификат подписи кода от Thawte, который я использую для динамического создания и подписания манифестов развертывания ClickOnce. Проблема в том, что приложение ASP.NET, которое генерирует и подписывает эти манифесты, работает нормально, когда мы перезапускаем IIS или повторно импортируем сертификат подписи, но со временем следующая функция не может найти сертификат:
private static X509Certificate2 GetSigningCertificate(string thumbprint)
{
X509Store x509Store = new X509Store(StoreLocation.CurrentUser);
try
{
x509Store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection x509Certificate2Collection = x509Store.Certificates.Find(
X509FindType.FindByThumbprint, thumbprint, false);
if (x509Certificate2Collection.Count == 0)
throw new ApplicationException(
"SigningThumbprint returned 0 results. Does the code signing certificate exist in the personal store?",
null);
if (x509Certificate2Collection.Count > 1)
throw new ApplicationException(
"SigningThumbprint returned more than 1 result. This isn't possible", null);
var retval = x509Certificate2Collection[0];
if(retval.PrivateKey.GetType() != typeof(RSACryptoServiceProvider))
throw new ApplicationException("Only RSA certificates are allowed for code signing");
return retval;
}
finally
{
x509Store.Close();
}
}
В конце концов приложение начинает выдавать ошибки, которые не могут найти сертификат. Я озадачен, потому что я думаю, что сертификат установлен правильно (или, в основном, правильно), потому что он находит сертификат, когда мы запускаем приложение ASP.NET, но в какой-то момент мы попадаем в ветвь Count == 0, и это просто неверно сертификат находится в хранилище сертификатов пользователя "Текущий пользователь \ Личный" в пуле приложений.
Вопрос: Почему сертификат может внезапно «исчезнуть» или не быть найденным?