Подтвердить что ты не робот

Доступ к загруженным сертификатам на лазурных веб-сайтах

Когда я использовал веб-роль, я просто загружал этот сертификат на лазурный портал, и я смог его увидеть. Теперь я перешел на сайт в лазурном режиме, и я загрузил сертификат на портал управления Azure, но мой код не видеть его вообще.

Есть ли какие-то конфигурации, которые нам нужно сделать или какой-либо другой способ получить доступ к загруженным сертификатам на лазурных веб-сайтах.

Вот как я пытаюсь получить доступ к загруженному сертификату.

private List<string> GetAvailableCertificatesFromStore()
{
    var list = new List<string>();
    var store = new X509Store(StoreName.My,StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadOnly);

    try
    {
        foreach (var cert in store.Certificates)
        {
            // todo: add friendly name
            list.Add(string.Format("{0}", cert.Subject));
        }
    }
    finally
    {
        store.Close();
    }

    return list;
}
4b9b3361

Ответ 1

ОБНОВЛЕНИЕ - 23 июля 2015 г.: Этот ответ устарел (это было правильно в то время, когда оно было предоставлено). Пожалуйста, см. Ответ S Армстронга ниже.

Вещи работают по-разному в Azure Cloud Services (Web/Worker Roles) и Azure Websites. В Azure Cloud Services, когда вы загружаете сертификат через портал управления и указываете этот отпечаток сертификата и устанавливаете местоположение в своих свойствах роли, когда ваша роль развертывается в виртуальной машине, ответственный за нее сетевой контроллер также автоматически устанавливает эти сертификаты. Именно по этой причине приведенный выше код работает в веб-роли.

На веб-сайте вам нужно будет сделать это самостоятельно. К сожалению, из-за ограничений безопасности на веб-сайте Azure вы просто не можете установить сертификат в хранилище сертификатов. Чтобы работать с сертификатами, вам нужно будет включить файл сертификата PFX вместе с кодом и работать с этим файлом сертификата. Вы не можете установить сертификат в хранилище сертификатов.

В любой небольшой работе, которую я сделал с сайтом Azure и сертификатами, я обнаружил, что сертификат работает только в том случае, если файл PFX включен в папку AppData. Также вы можете столкнуться с ошибками, например, CryptographicException: The system cannot find the file specified. Если вы столкнулись с этой ошибкой, вы можете найти это сообщение в блоге полезным: http://blog.tylerdoerksen.com/2013/08/23/pfx-certificate-files-and-windows-azure-websites/

Ответ 2

Использование сертификатов в Azure WebSite работает по-разному, как это делается в локальной копии IIS или даже при запуске веб-сайта в режиме отладки из Visual Studio. Короче говоря, веб-сайт не имеет доступа к хранилищу сертификатов в традиционном смысле этого слова... все это делается в памяти.

Во-первых, после того, как вы загрузили свой сертификат через портал Azure, вам нужно добавить appsetting (также через портал), называемый WEBSITE_LOAD_CERTIFICATES, и установить для него значение отпечатка вашего загруженного сертификата. Это может быть список разделенных запятыми нескольких отпечатков, если вы хотите, или даже * загрузить все ваши загруженные сертификаты. Я предполагаю, что это вынуждает сертификаты загружаться в память.

Чтобы загрузить сертификат, вы можете сделать следующее:

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

var certs = store.Certificates.Find(X509FindType.FindByThumbprint, YOUR_THUMBPRINT, false);

Измените значение "false" на "true", если вы хотите, чтобы сертификат был действительным.

Я нашел здесь эту информацию, которая объясняет это намного лучше, чем у меня: http://azure.microsoft.com/blog/2014/10/27/using-certificates-in-azure-websites-applications/