Ключ Azure Valut и истекающий сертификат - PullRequest
0 голосов
/ 26 сентября 2019

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

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

First .p12, а также .pfx являются расширением для формата PKCS # 12.

Оба приложения используют приведенный ниже код для получения (я думаю) локального сертификата, действующего через «Эмитент», который имеет значение CN = Value.Я проверил как старые, так и новые значения «Issuer / CN =», и они идентичны.

На основании вашего неверного кода

// From the collection of unexpired certificates, find the ones with the correct name.
X509Certificate2Collection signingCert =
   currentCerts.Find(X509FindType.FindBySubjectDistinguishedName, certName, false);

В нем говоритсяFindBySubjectDistinguishedName, что означает, что subject обоих сертификатов должны быть одинаковыми.Вот пример:

enter image description here

И еще один с несколькими элементами в теме:

enter image description here

Вы также можете установить оба сертификата и поэкспериментировать, чтобы определить параметры для получения правильного сертификата.Я преобразовал части вашего кода в PowerShell:

$store = 
  new-object System.Security.Cryptography.X509Certificates.X509Store( `
    [System.Security.Cryptography.X509Certificates.StoreName]::My, `
    [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser);

$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadOnly);

$signingCert = 
   $store.Certificates.Find(
     [System.Security.Cryptography.X509Certificates.X509FindType]::FindBySubjectDistinguishedName, 
     "CN=...", `
     $false);

$signingCert
0 голосов
/ 27 сентября 2019

Тайна раскрыта.В дополнение к установке сертификата на рассматриваемых компьютерах вам также необходимо зарегистрировать сертификат (часть .cer) в приложениях Azure для регистрации приложений.

...