Проблема с сертификатом (связанные с безопасностью?!?) - PullRequest
2 голосов
/ 15 февраля 2011

Я пытаюсь перечислить сертификаты из Azure в веб-роли (запущенной в версии 1.3 Azure SDK Dev Fabric), но при использовании следующего кода сертификаты не возвращаются.Однако важно отметить, что код работает нормально при запуске из консольной программы:

private static void EnumCerts()
{
    var selectedCerts = new X509Certificate2Collection();

    var store = new X509Store(
        StoreName.My, StoreLocation.CurrentUser);

    try
    {
        store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);

        foreach (X509Certificate2 cert in store.Certificates)
            Console.WriteLine(cert.Subject);
    }
    finally
    {
        store.Close();
    }
}

Я предполагаю, что это связано с проблемой безопасности.Моя веб-роль выполняется с повышенным доверием, но я предполагаю, что веб-экземпляры IIS - нет.

В любом случае я понятия не имею, как решить проблему, поэтому любая помощь будет принята с благодарностью ...

Ответы [ 3 ]

0 голосов
/ 16 февраля 2011

Вы должны удаленно (RDP) в роли и проверить магазин (ы).Честно говоря, я не знаю, куда портал Azure загружает сертификаты, но я подумал, что это CurrentUser (под которым, по-моему, работает IIS).

Вы также можете перечислять сертификаты через API управления службами, которыйможет не сработать для вашего решения.http://msdn.microsoft.com/en-us/library/ee795178.aspx

0 голосов
/ 25 февраля 2011

Я решил проблему, вложив сертификат в мой сервисный код и прочитав его с ресурса:

using System.IO;
using System.Reflection;
using System.Security.Cryptography.X509Certificates;

namespace AcsTest.Shared
{
    public static class CertHelper
    {
        public static X509Certificate2 GetCertFromManifest(
            Assembly assembly, string certName, string password)
        {
            byte[] bytes;

            using (var stream = assembly.
                GetManifestResourceStream(certName))
            {
                bytes = new BinaryReader(stream).
                    ReadBytes((int)stream.Length);
            }

            return new X509Certificate2(bytes, password,
                X509KeyStorageFlags.MachineKeySet);
        }
    }
}

Главное, что мне нужно было сохранить пароль в моей службезагрузите сертификат из хранилища сертификатов, чтобы я не получал преимущества безопасности, храня его в хранилище.

0 голосов
/ 16 февраля 2011

Сохраните сертификат X509 в LocalMachine вместо CurrentUser.CurrentUser для процесса IIS выполняется в контексте пользователя IIS, к которому у вас, вероятно, нет доступа.Кроме того, вы хотите убедиться, что вы импортировали сертификат на стороне Azure в хранилище сертификатов правильно, повторно подключив и проверив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...