Доступ к загруженным сертификатам на лазурных веб-сайтах
Когда я использовал веб-роль, я просто загружал этот сертификат на лазурный портал, и я смог его увидеть. Теперь я перешел на сайт в лазурном режиме, и я загрузил сертификат на портал управления 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;
}
Ответы
Ответ 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/