Начало:
0.
HTTPS: что это за протокол, знакомство1.
Криптография: простейшие термины этой науки2.
Система шифрования с открытым ключом3.
Зачем нужны центры сертификации при асимметричном шифровании4.
Зачем нужны самозаверенные сертификаты открытого ключа5.
Windows 10: хранилища сертификатов и инструменты для работы с ними У меня уже был настроен локальный веб-сервер IIS. Изначально я
включил его в прошлом году. Недавно
устанавливал для него интерпретатор языка PHP, а также
экспериментировал с СУБД «MySQL». Статический сайт и веб-приложение запускал по протоколу HTTP по известному URL-адресу
http://localhost/, он же
http://localhost:80/, так как по умолчанию для общения по протоколу HTTP используется
порт 80.
Теперь решил поэкспериментировать с локальным подключением по протоколу HTTPS.
В принципе, план подключения выглядит несложным:
1) Создать самозаверенный сертификат открытого ключа;
2) Установить этот сертификат на веб-сервер IIS;
3) Создать привязку (по-английски «binding») сайта с протоколом HTTPS, использующим самозаверенный сертификат открытого ключа, установленный в пункте 2 на веб-сервер IIS.
Сложность в том, чтобы создать правильный самозаверенный сертификат открытого ключа, при использовании которого браузер посчитает соединение с сайтом безопасным.
Создание самозаверенного сертификата открытого ключа с помощью диспетчера служб IIS
Я управляю веб-сервером IIS с помощью программы «Диспетчер служб IIS» (это основной способ, но не единственный, конечно). Программу эту, как обычно, открываю из строки поиска рядом с кнопкой «Пуск» операционной системы «Windows 10».
Окно «Диспетчера служб IIS» поделено на три части: слева - древовидное меню «Подключения», справа - меню «Действия» и в центре - главное меню с возможными модулями настроек. Вид пунктов в центральном меню можно поменять, доступны 4 режима: сведения, значки (по умолчанию), плитка, список (при этом можно еще поменять группировку пунктов: по категории, по области применения). Состав пунктов центрального меню зависит от выбора пункта в левом меню «Подключения». Состав пунктов в правом меню зависит и от выбора пункта в левом меню, и от выбора пункта в центральном меню.
Для выполнения первых двух пунктов плана (создание самозаверенного сертификата открытого ключа и установка этого сертификата на веб-сервер IIS) следует в левом меню «Подключения» выбрать веб-сервер (не следует веб-сервер путать с сайтом, это разные пункты в этом меню). После этого в центральном меню сформируется список пунктов, касающихся настройки веб-сервера. В центральном меню следует открыть пункт «Сертификаты сервера». Вот как это выглядит у меня:
После открытия пункта «Сертификаты сервера» в центральном меню откроется таблица установленных на сервер сертификатов. У меня она пуста. В правом меню сформируется список действий, которые можно совершить в рамках функции «Сертификаты сервера». Среди этих действий в правом меню следует выбрать пункт «Создать самозаверенный сертификат...». Вот как это выглядит у меня:
При выборе пункта «Создать самозаверенный сертификат...» откроется окно, в котором следует ввести информацию, которая нужна для создания самозаверенного сертификата:
Как видно из иллюстрации выше, всего лишь нужно ввести «понятное имя» сертификата и указать название подхранилища сертификатов, в которое будет помещен созданный самозаверенный сертификат. Я указал имя «localhost» и оставил выбранным подхранилище сертификатов «Личный». После нажатия на кнопку «ОК» в правом нижнем углу окна (эта кнопка станет активной после ввода «понятного имени») самозаверенный сертификат будет создан и появится в таблице «Сертификаты сервера», из которой можно будет просмотреть его свойства.
Также этот сертификат можно увидеть в подхранилищах «Личное» и «Доверенные корневые центры сертификации», если воспользоваться сохраненной консолью «certlm.msc». Еще этот сертификат можно просмотреть в подхранилище «Доверенные корневые центры сертификации» (но не в «Личное»), если воспользоваться сохраненной консолью «certmgr.msc». (См. об этом подробнее
предыдущий пост.)
Осталось выполнить третий пункт плана (создать привязку сайта к протоколу HTTPS с нужными свойствами). Для этого сначала в левом меню следует выбрать сайт, для которого нужно создать привязку. У меня сайт один (вообще их может быть множество на одном веб-сервере), поэтому запутаться сложно. В правом меню действий сформируется соответствующий список действий, из которого следует выбрать пункт «Привязки...». Вот как это выглядит у меня:
После выбора пункта «Привязки...» откроется окно «Привязки сайта»:
В этом окне с помощью кнопки «Добавить...» вызовем окно «Добавление привязки сайта»:
На иллюстрации выше я обвел красным маркером те свойства, на которые следует обратить внимание в первую очередь. Я выбрал тип привязки (HTTPS), порт уже был выбран по умолчанию как 443. И самое главное - я выбрал из выпадающего списка самозаверенный сертификат с именем «localhost», который создал ранее. Остальные пункты я оставил в том состоянии, в котором они были по умолчанию. После этого можно нажать на кнопку «OK» внизу окна, чтобы сохранить привязку сайта. Окно «Добавление привязки сайта» закроется. После этого можно закрыть окно «Привязки сайта» с помощью кнопки «Закрыть» в правом нижнем углу окна. Окно «Привязки сайта» будет закрыто.
Настройка закончена.
Тестирование работы сайта по протоколу HTTPS
Открыть сайт можно либо напрямую в браузере, введя в адресную строку браузера URL-адрес
https://localhost/ или URL-адрес
https://localhost:443/. Либо можно в «Диспетчере служб IIS» при выбранном в левом меню «Подключения» сайте в правом меню «Действия» выбрать пункт «Обзор *:443 (https)» и после этого нужная страница откроется в браузере. При этом одновременно останется доступ из браузера к этому же сайту по протоколу HTTP через порт 80.
Вот что я получил в своем браузере «Microsoft Edge» (на движке «Chromium»):
То, что показано на иллюстрации выше, не значит, что настройка веб-сервера IIS была выполнена неправильно. Наоборот, всё было сделано так, как следует. Если нажать на кнопку «Advanced», браузер выдаст дополнительную информацию об ошибке:
This server couldn't prove that it's localhost; its security certificate is from IlyaComp. This may be caused by a misconfiguration or an attacker intercepting your connection.
Однако, будет открыта и дополнительная ссылка «Continue to localhost (unsafe)», пройдя по которой, мы всё-таки попадем на сайт.
Ссылка по теме:
https://learn.microsoft.com/en-us/iis/manage/configuring-security/how-to-set-up-ssl-on-iis Причина ошибки
Дело в том, что хоть сама настройка веб-сервера IIS была выполнена правильно, но неправильно сфомирован самозаверенный сертификат. Веб-сервер IIS не дал нам при создании самозаверенного сертификата достаточного доступа к свойствам создаваемого сертификата. Вот как выглядит окно свойств созданного самозаверенного сертификата у меня (кстати, отмечу, что по умолчанию созданный сертификат имеет срок действия в один год; после окончания этого срока этот сертификат нужно будет удалить и создать новый, с новым сроком действия):
«Понятное имя» ни на что не влияет, оно нужно лишь для представления сертификата в списках. Кроме этого «понятного имени» у сертификата есть два более важных свойства: «Кому выдан» (оно же «Получатель сертфиката», оно же «Субъект») и «Кем выдан» (оно же «Поставщик», оно же «Издатель»). В случае самозаверенного сертификата значения этих двух свойств совпадают. Веб-сервер IIS, создавая самозаверенный сертификат, вписал в эти свойства имя моего компьютера - «IlyaComp», не спрашивая у меня, согласен ли я на это или нет.
Как видно из расширенного текста ошибки, приведенного выше (в разделе тестирования), указанный браузер считает, что имя получателя сертификата (субъекта) должно совпадать с именем домена сайта (в случае локального сайта это «localhost»). Только тогда браузер посчитает соединение с шифрованием с помощью этого самозаверенного сертификата безопасным и не станет выдавать вышеуказанное сообщение об ошибке (в общем-то, это даже не ошибка, а предупреждение).
Как исправить эту ошибку
Самозаверенный сертификат, созданный выше, я удалил (как и привязку сайта, в которой был указан этот сертификат). Удаление сертификата возможно прямо из списка «Сертификаты сервера» (работа с ним была показана выше) программы «Диспетчер служб IIS».
Очевидно, что следует создать самозаверенный сертификат с нужными свойствами другим способом. Этот способ должен позволить задавать значения любых свойств самозаверенного сертификата.
Продолжение следует...