Не може да се зареди екземпляр на сертификат от работна роля на Azure

Имам работна роля в Azure, която искам да извикам на услугата за управление (напр. REST API) и да събирам информация относно свързани услуги. Въпреки това, когато се опитвам да заредя моя сертификат, той не успява да го намери. Ето стъпките, които следвах:

1. Създадох сертификат с помощта на MakeCert и го регистрирах като мой сертификат за управление през портала

makecert -r -pe -a sha1 -n "CN=MyCnName" -ss My -len 2048 -sp "Microsoft Enhanced RSA и AES криптографски доставчик" -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 Project Role в раздела Certificates .

person JoeGeeky    schedule 15.07.2012

Имам подобен проблем за уеб роля, приложих заобиколно решение.

  1. Свържете се с отдалечен работен плот към VM, където са внедрени услугата и сертификатът
  2. Елемент от списък
  3. Копирайте вашия сертификат или pfx на вашия локален диск на VM (напр. 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