J'ai un certificat de signature de code de Thawte que j'utilise pour générer et signer dynamiquement des manifestes de déploiement ClickOnce. Le problème est que l'application ASP.NET qui génère et signe ces manifestes fonctionne très bien quand on va redémarrer IIS ou réimporter le certificat de signature, mais au fil du temps la fonction suivante ne trouve pas le certificat:Certificat stocké dans le magasin de certificats disparaissant de l'application ASP.NET au fil du temps
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();
}
}
Finalement, le l'application commence à lancer des erreurs qu'elle ne peut pas trouver le certificat. Je suis perplexe parce que je pense que le CERT est installé correctement (ou plutôt correct) parce qu'il trouve le CERT quand nous démarrons l'application ASP.NET, mais à un certain moment nous frappons la branche Count == 0 et ce n'est pas vrai: le certificat se trouve dans le magasin de certificats "Current User \ Personal" de l'utilisateur du pool d'applications. Question: Pourquoi un cert peut-il soudainement «disparaître» ou ne pas être retrouvé?