Я надеюсь, что смогу объяснить это правильно.Я унаследовал несколько приложений Windows, которым требуется сертификат, установленный в локальном хранилище сертификатов, чтобы получить доступ к секрету хранилища ключей Azure для выполнения этих приложений.В настоящее время все работает правильно.Срок действия сертификата в Azure истекает 10/31/2019.
Новый сертификат был создан с истечением в сентябре 2020 года.
Когда мне были брошены эти приложения, ябыл выдан сертификат для использования, но он имеет расширение .p12.Я могу экспортировать только новый сертификат Azure как .cer или .pfx.
Когда я устанавливаю только что экспортированный сертификат как .pfx или .cer, приложения перестают работать.Если я устанавливаю старый сертификат с расширением .p12, он работает.
Оба приложения используют приведенный ниже код для получения (я думаю) локального сертификата, который является текущим через «Эмитент», то есть CN = Value.Я проверил как старые, так и новые значения «Issuer / CN =», и они идентичны.
Должно ли сертификат, экспортируемый в Azure, иметь расширение .p12?Если да, то как мне это сделать.
Если сертификат в экспортированном Azure в порядке .pfx, где могут быть мои проблемы?
C # код в приложениях, которые получают локальный сертификат дляв свою очередь получает секрет Azure, необходимый для выполнения работы:
private static X509Certificate2 ReadCertificateFromStore(string certName)
{
X509Certificate2 cert = null;
try
{
using (X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certCollection = store.Certificates;
// Find unexpired certificates.
X509Certificate2Collection currentCerts = certCollection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
// From the collection of unexpired certificates, find the ones with the correct name.
X509Certificate2Collection signingCert = currentCerts.Find(X509FindType.FindBySubjectDistinguishedName, certName, false);
// Return the first certificate in the collection, has the right name and is current.
cert = signingCert.OfType<X509Certificate2>().OrderByDescending(c => c.NotBefore).FirstOrDefault();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return cert;
}