Не удалось загрузить экземпляр сертификата из рабочей роли Azure.

У меня есть рабочая роль Azure, с которой я хочу вызывать службу управления (например, REST API) и собирать информацию о связанных службах. Однако, когда я пытаюсь загрузить свой сертификат, он не может его найти. Вот шаги, которые я выполнил:

1. Я создал сертификат с помощью MakeCert и зарегистрировал его в качестве сертификата управления через портал.

makecert -r -pe -a sha1 -n "CN=MyCnName" -ss My -len 2048 -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" -sy 24 MyCert.cer

2. Установил сертификат на свой локальный компьютер, и все работает нормально. При локальном запуске рабочей роли я могу без проблем вызвать службу управления.

3. Экспортировал сертификат с моей машины и зарегистрировал экспортированный сертификат в целевой размещенной службе через портал.

4. Развернул роль. Когда роль запускается, ей не удается найти сертификат.

Вот выдержка из кода, который я использую для поиска сертификата.

// Open the certificate store for the current user.
var certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); // I also tried localmachine
certStore.Open(OpenFlags.ReadOnly);

// Find the certificate with the specified subject.
X509Certificate2Collection certCollection = certStore.Certificates.Find(
    X509FindType.FindBySubjectName,
    _myConfiguration.SubjectName,
    false);


if (certCollection == null || certCollection.Count < 1)
{
    // Find the certificate with the specified thumbprint.
    certCollection = certStore.Certificates.Find(
        X509FindType.FindByThumbprint,
        _myConfiguration.ThumbPrint,
        false);
}

// Close the certificate store.
certStore.Close();

// Check to see if a matching certificate was found.
if (certCollection.Count == 0)
{
    _logger.Warn("No certificate found");
}

Исключения нет, просто сертификат не найден. Может ли кто-нибудь пролить свет на то, что мне нужно сделать?


person JoeGeeky    schedule 15.07.2012    source источник


Ответы (2)


Разобрался с проблемой... Помимо настройки сертификата на портале, мне нужно было добавить сведения о сертификате (например, имя, хранилище и отпечаток) в настройки роли проекта Azure на вкладке Certificates .

person JoeGeeky    schedule 15.07.2012

У меня аналогичная проблема для веб-роли, я применил обходной путь.

  1. Подключитесь с помощью удаленного рабочего стола к виртуальной машине, на которой развернуты служба и сертификат.
  2. Пункт списка
  3. Скопируйте свой сертификат или pfx на локальный диск виртуальной машины (например, C:)
  4. Нажмите на свой файл pfx или .cert и установите его в определенное хранилище сертификатов «Доверенные люди»)
  5. Запустите свой сервис, даже если вы настроены на поиск в другом магазине, который вы найдете у доверенных лиц.

Я не знаю, почему моя веб-роль пытается найти сертификат в этом месте, если я заставляю искать в местоположении «Мой магазин», но метод поиска извлекает информацию из магазина доверенных лиц.

Проблема с этим обходным путем заключается в том, что при удалении развертывания сертификат и любая другая конфигурация будут стерты.

Этот фрагмент кода может дать вам некоторую информацию:

//the certificate must be in the Trusted People Store
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
try
{
    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
   //Commented
   //Get the first available match from cert store
   //X509Certificate2 cert = store.Certificates.Find(X509FindType.FindBySubjectName,
                 // subjectname,
                 // false)
                 // .Cast<X509Certificate2>()
                 // .FirstOrDefault();

   X509Certificate2 cert = new X509Certificate2();
   foreach (var ct in store.Certificates)
   {
       //Logger.TraceInformation(string.Format("Cert found: Subject {0} Tumbprt:{1}", ct.FriendlyName, ct.Thumbprint));
       if (ct.SubjectName.Name.ToString().Contains("*.certnamexx.extensionxx"))
       {
           return new X509SecurityToken(ct);
       }

    }
}
person user3414519    schedule 13.03.2014