В одном из проектов была задача использовать Windows Azure, а так же он должно работать на https протоколе. Поскольку до этого никогда с облачными хостингами и SSL сертификатами я не работал, то это был хороший опыт, с которым не грех поделиться. Приложение создавалось на ASP.NET MVC 3, с помощью Microsoft Visual Studio 2010.
Доступ к
Первая проблема, с которой я столкнулся, это время публикации. У меня оно занимало 15-20 минут. Если Вы измените web.config Вашего приложения, то его нужно заново перезалить, поэтому несколько раз проверьте перед публикацией. Так же возникло кучу мелочей при переносе БД, синхронизацией боевой базы из тестовой, а так же при развертывании эмулятора Azure у себя локально на компьютере, но в этой статье поговорим о проблемах, которые возникали при разработке приложения на https протоколе.
Изучив интернет, я узнал как использовать самозаверенный сертификат (Self-signed certificate), но он не подходит, поэтому начнем:
1) Создаем запрос на получение сертификата. Открываем «Диспетчер служб IIS» (правой клавишей на «Мой Компьютер» -> «Управление» -> «Службы и приложения» -> «Диспетчер служб IIS» -> «имя машины»). В разделе IIS дважды нажимаем на «Сертификаты сервера». В панели Действия (справа) жмем «Создать запрос сертификата....»
Перед нами открывается Wizard для создания запроса. Все поля в нем обязательны для заполнения и должны быть указаны полные официальные названия без сокращений, так как они будут проверяться компанией VeriSign (примечание, «Полное имя» — это домен сайта, тип шифрования RSA, минимальная длина ключа 2048 бит). После прохождения всех шагов Wizard, получим текстовый файл, который нужно отправить в службу выдачи цифровых сертификатов SSL(в моем случае это VeriSign).
2)Получение сертификата. После того, как Вы отправили запрос в компанию VeriSign, оплатили сертификат (Standard Secure Site Intermediate CA), Вам будет предоставлена ссылка для скачивания. Перейдя по ней Вы увидите информацию о полученных сертификатах и кнопку «Download», нажатие на которую приведет на страничку с двумя сертификатами: «PKCS #7 format» и «X.509 format». Копируем текст сертификатов (например в текстовый файл) и сохраняем первый в формате .p7b, а второй в формате .cer.
Но для загрузки сертификата на Azure, нам необходимо использовать файл формата .pfx
3) Запрос установки сертификата. Теперь нужно загрузить любой из файлов (.p7b или .cer) на компьютер. Сделать мы это можем, только на той машине, где выполнялся шаг 1. Опять переходим в «Диспетчер служб IIS», так же как и на первом шаге, и выбираем действие «Запрос установки сертификата». Указываем путь к файлу (рекомендую загружать .cer) и любое имя. После этого есть три варианта сценариев.
Первый, сертификат успешно добавлен, значит переходим к шагу 5.
Второй, у Вас выдало ошибку «Не удалось найти запрос сертификата, связанный с данным файлом сертификата. Запрос сертификата должен выполняться на том же компьютере, где создавался запрос» (Cannot find the certificate request associated with this certificate file. A certificate request must be completed on the computer where it was created).
Третий, выдало ошибку "There was an error while performing this operation
Details: CertEnroll::CX509Enrollment::p_InstallResponse: ASN1 bad tag value met. 0x8009310b (ASN:276)"
Во всех трех случаях сертификат установлен правильно, несмотря на сообщение об ошибке. Осталось его как-то получить (Microsoft обещает в ближайшее время устранить эту неполадку).
4) Устраняем неполадку с загрузкой
-Открываем MMC console (Start > Run > пишем MMC и enter)
-Выбираем меню «Консоль» > «Добавить или удалить оснастку...»(File > Add/Remove Snap-in...)
-Выбираем «Сертификаты» (Certificate), жмем Добавить
-Выбираем «учетной записи компьютера» (Computer Account)
-«локальным компьютером» (Local Computer)
-Жмем ОК, тем самым закрываем окно
-Переходим в «Личное»>«Сертификаты» (Personal>Certificate)
-В этой папке должен быть Ваш сертификат. Если его нету, то импортируйте файл .cer сюда («Все задачи» > «Импорт...» > указываем путь к .cer файлу)
-для простоты переименуем наш файл в sslcert.cer и скопируем его на диск D:
-загрузим из сайт VeriSign primarycacert.cer и secondarycacert.cer (нужно выбрать тот тип сертификата, который Вы купили, у меня это Secure Site). Сохраним эти файл в том же месте, где и sslcert.cer
— открываем командную строку (cmd) и в ней выполняем три команды:
certutil -addstore my D:sslcert.cer
certutil -addstore ca D:primarycacert.cer
certutil -addstore ca D:secondarycacert.cer
Они должны закончиться результатом CertUtil: -addstore command completed successfully.
-Открываем sslcert.cer файл (два раза жмем на него)
-Переходим на закладку «Состав» поле «Отпечаток» («Details» > «Thumbprint»)
копируем содержимое этого поля
-в командной строке вызываем
certutil -repairstore my "thumbprint", где нужно thumbprint заменить на ваш код
пример: certutil -repairstore my «00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f»
Если эта операция у Вас не прошла, то Вам придется получать заново сертификат или Вы не на этом компьютере делали запрос.
-открываем еще раз MMC console, добавляем оснастку Сертификаты (см. выше)
— переходим на папку «Доверенные корневые центры сертификации» (Trusted Root Certification Authorities) > Сертификаты
-ищем в этом списка VeriSign Class 3 Public Primary Certification Authority — G5
-Если он есть, то в контекстном меню выбираем «Свойства» и выбираем «Запретить все назначения для этого сертификата» (Disable all purposes for this certificate).
-Жмем Ок. Закрываем MMC.
5) Экспортируем .pfx сертификат. После успешно сделанных всех шагов у Вас в IIS->«Сертификаты сервера» должен появится сертификат. Жмем правой клавишей на нем, и выбираем меню «Export...» Сохраняем этот файл с паролем себе на компьютер. Если в IIS-е сертификата нету, то попытайтесь его забрать в формате .pfx из MMC console Certificate (см. шаг 4)
6) Загружаем сертификат на Azure. Переходим на портал управления Azur-ом и добавляем в размещенную службу сертификат.
7) Настраиваем Web Role. Открываем наше приложение в Microsoft Visual Studio. И открываем свойства Web Role, которая должна работать на https.
-На закладке Cretificates добавляем наш сертификат (воспользуйтесь кнопкой "..." для выбора сертификата). Имя укажите такое же как и на Azure
-На вкладке «Endpoints» создаем еще одну точку выхода. Protocol выбираем https, Public Port указываем 443, SSL Certificate Name выбираем наш сертификат. Если хотим что бы сайт работал только на https протоколе, то точку выхода с http нужно удалить.
-На вкладке «Configuration» в разделе «Startup action» можно указать какой протокол мы будем использовать при дебаге.
На этом все, создаем с нашего приложения пакет, и отправляем в Azure.
П.С. Что бы развернуть приложение на Azure ушло очень много времени. Основные проблемы это мало опыта, и слишком много не доработок Microsoft с которым приходиться бороться (публикация приложения, настройка эмулятора).
Автор: spamprom