как создать самоподписанный сертификат ssl windows
Как выпустить самоподписанный SSL сертификат и заставить ваш браузер доверять ему
Все крупные сайты давно перешли на протокол https. Тенденция продолжается, и многие наши клиенты хотят, чтобы их сайт работал по защищенному протоколу. А если разрабатывается backend для мобильного приложения, то https обязателен. Например, Apple требует, чтобы обмен данными сервера с приложением велся по безопасному протоколу. Это требование введено с конца 2016 года.
На production нет проблем с сертификатами. Обычно хостинг провайдер предоставляет удобный интерфейс для подключения сертификата. Выпуск сертификата тоже дело не сложное. Но во время работы над проектом каждый разработчик должен позаботиться о сертификате сам.
В этой статье я расскажу, как выпустить самоподписанный SSL сертификат и заставить браузер доверять ему.
Чтобы выпустить сертификат для вашего локального домена, понадобится корневой сертификат. На его основе будут выпускаться все остальные сертификаты. Да, для каждого нового top level домена нужно выпускать свой сертификат. Получить корневой сертификат достаточно просто.
Сначала сформируем закрытый ключ:
Затем сам сертификат:
Нужно будет ввести страну, город, компанию и т.д. В результате получаем два файла: rootCA.key и rootCA.pem
Переходим к главному, выпуск самоподписанного сертификата. Так же как и в случае с корневым, это две команды. Но параметров у команд будет значительно больше. И нам понадобится вспомогательный конфигурационный файл. Поэтому оформим все это в виде bash скрипта create_certificate_for_domain.sh
Первый параметр обязателен, выведем небольшую инструкцию для пользователя.
Создадим новый приватный ключ, если он не существует или будем использовать существующий:
Запросим у пользователя название домена. Добавим возможность задания “общего имени” (оно используется при формировании сертификата):
Чтобы не отвечать на вопросы в интерактивном режиме, сформируем строку с ответами. И зададим время действия сертификата:
В переменной SUBJECT перечислены все те же вопросы, который задавались при создании корневого сертификата (страна, город, компания и т.д). Все значение, кроме CN можно поменять на свое усмотрение.
Сформируем csr файл (Certificate Signing Request) на основе ключа. Подробнее о файле запроса сертификата можно почитать в этой статье.
Формируем файл сертификата. Для этого нам понадобится вспомогательный файл с настройками. В этот файл мы запишем домены, для которых будет валиден сертификат и некоторые другие настройки. Назовем его v3.ext. Обращаю ваше внимание, что это отдельный файл, а не часть bash скрипта.
Да, верно, наш сертификат будет валидным для основного домена, а также для всех поддоменов. Сохраняем указанные выше строки в файл v3.ext
Возвращаемся в наш bash скрипт. На основе вспомогательного файла v3.ext создаем временный файл с указанием нашего домена:
Переименовываем сертификат и удаляем временный файл:
Скрипт готов. Запускаем его:
Получаем два файла: mysite.localhost.crt и device.key
Теперь нужно указать web серверу пути к этим файлам. На примере nginx это будет выглядеть так:
Запускаем браузер, открываем https://mysite.localhost и видим:
Браузер не доверяет этому сертификату. Как быть?
Нужно отметить выпущенный нами сертификат как Trusted. На Linux (Ubuntu и, наверное, остальных Debian-based дистрибутивах) это можно сделать через сам браузер. В Mac OS X это можно сделать через приложение Keychain Access. Запускаем приложение и перетаскиваем в окно файл mysite.localhost.crt. Затем открываем добавленный файл и выбираем Always Trust:
Обновляем страницу в браузере и:
Успех! Браузер доверяет нашему сертификату.
Сертификатом можно поделиться с другими разработчиками, чтобы они добавили его к себе. А если вы используете Docker, то сертификат можно сохранить там. Именно так это реализовано на всех наших проектах.
Делитесь в комментариях, используете ли вы https для локальной разработки?
Максим Ковтун,
Руководитель отдела разработки
Как создать самоподписанный сертификат в Windows?
New-SelfSignedCertificate: командлет PowerShell для генерации самоподписанного сертификата
Для создания самоподписанного сертификата в PowerShell нужно использовать командлет New-SelfSignedCertificate, входящий в состав модуля PKI (Public Key Infrastructure).
Чтобы вывести список всех доступных командлетов в модуле PKI, выполните команду:
Самоподписанные сертификаты рекомендуется использовать в тестовых целях или для обеспечения сертификатами внутренних интранет служб (IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess и т.п.), в тех случая когда по какой-то причине приобретение сертификата у внешнего провайдера или разворачивание инфраструктуры PKI/CA невозможны.
Для создания сертификата нужно указать значения –DnsName (DNS имя сервера, имя может быть произвольным и отличаться от имени localhost) и —CertStoreLocation (раздел локального хранилища сертификатов, в который будет помещен сгенерированный сертификат). Командлет можно использовать для создания самоподписанного сертификата в Windows 10 (в нашем примере), Windows 8/8.1 и Windows Server 2019/2016/2012 R2.
Чтобы создать новый SSL сертификат типа SSLServerAuthentication (по умолчанию) для DNS имени test.contoso.com (указывается FQDN имя) и поместить его в список персональных сертификатов компьютера, выполните команду:
Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint Subject
По-умолчанию генерируется самоподписанный сертификат со следующим параметрами:
Данная команда создаст новый сертификат и импортирует его в персональное хранилище компьютера. Откройте оснастку certlm.msc и проверьте, что в разделе Personal хранилища сертификатов компьютера появился новый сертификат.
С помощью командлета Get-ChildItem можно вывести все параметры созданного сертификата по его отпечатку (Thumbprint):
Можно создать цепочку сертфикатов. Сначала создается корневой сертификат (CA), а на основании него генерируется SSL сертификат сервера:
Для экспорта полученного сертификата c закрытым ключом в pfx файл, защищенный паролем, нужно получить его отпечаток (Thumbprint). Сначала нужно указать пароль защиты сертификата и преобразовать его в формат SecureString. Значение Thumbprint нужно скопировать из результатов выполнения команды New-SelfSignedCertificate.
Можно экспортировать открытый ключ сертификата:
Проверьте, что в указанном каталоге появился cer(PFX)файл сертификата. Если щелкнуть по нему правой клавишей и выбрать пункт меню Install Certificate, можно с помощью мастера импорта сертификатов добавить сертификат в корневые доверенные сертификаты компьютера.
Полученный открытый ключ или сам файл сертификата можно распространить на все компьютеры и сервера в домене с помощью GPO (пример установки сертификата на компьютеры с помощью групповых политик).
Одной из полезных возможностей командлета New-SelfSignedCertificate является возможность создать сертификат с несколькими различными именами Subject Alternative Names (SAN).
Если создается сертификат с несколькими именами, первое имя в параметре DnsName будет использоваться в качестве CN (Common Name) сертификата. К примеру, создадим сертификат, у которого указаны следующие имена:
Команда создания сертификата будет такой:
Также можно сгенерировать wildcard сертификат для всего пространства имен домена, для этого в качестве имени сервера указывается *.contoso.com.
Создать самоподписанный сертфикат типа Code Signing для подписывания кода
В PoweShell 3.0 командлет New-SelfSifgnedCertificate позволял генерировать только SSL сертификаты, которые нельзя было использоваться для подписывания кода драйверов и приложений (в отличии сертификатов, генерируемых утилитой MakeCert).
В версии PowerShell 5 новая версия командлета New-SelfSifgnedCertificate теперь может использоваться для выпуска сертификатов типа Code Signing.
Для создания самоподписанного сертфиката для подписывания кода приложений, выполните команду:
Если при выполнении команды появится предупреждение UnknownError, значит этот сертификат недоверенный, т.к. находится в персональном хранилище сертификатов пользователя.
После этого вы можете подписать свой PowerShell скрипт с помощью данного самоподписанного сертификата.
Использование самоподписанного SSL сертификата SHA-256 в IIS
Обратите внимание, что при создании самоподписанный сертификат для IIS через консоль Internet Information Manager (пункт меню Create Self-Signed Certificate), создается сертификат с исопльзованием алгоритма шифрования SHA-1. Такие сертификаты многими браузерами считаются недоверенными, поэтому они могут выдавать предубеждение. Командлет New-SelfSignedCertificate позволяет создать более популырный тип сертификата с помощью алгоритма шифрования SHA-256.
Вы можете привязать самоподписанный сертификат SHA-256, созданный в PowerShell, к сайту IIS. Если вы с помощью PowerShell создали SSL сертификат и поместили его в хранилище сертификатов компьютера, он будет автоматически доступен для сайтов IIS.
Запустите консоль IIS Manager, выберите ваш сайт, затем в настройке Site Binding, выберите созданный вами сертификат и сохраните изменения.
Создание самозаверяющего сертификата Шлюза приложений Azure с помощью пользовательского корневого ЦС
В SKU Шлюза приложений версии 2 используются доверенные корневые сертификаты для поддержки внутренних серверов. То есть сертификаты аутентификации, которые были необходимы в SKU версии 1, больше не нужны. Корневой сертификат — это закодированный в Base64 корневой сертификат формата X.509(.CER) из внутреннего сервера сертификатов. Он определяет корневой центр сертификации (ЦС), выдавший сертификат сервера. Затем сертификат сервера используется для обмена данными по протоколу TLS/SSL.
Шлюз приложений доверяет сертификату вашего веб-сайта по умолчанию, если он подписан известным центром сертификации (например, GoDaddy или DigiCert). В этом случае вам не нужно явно загружать корневой сертификат. Дополнительные сведения см. в статье Общие сведения о завершении TLS и сквозном подключении TLS с помощью Шлюза приложений. Но если у вас есть среда разработки и/или тестирования и вы не хотите приобретать проверенный сертификат, подписанный центром сертификации, можно создать собственный пользовательский ЦС и создать самозаверяющий сертификат.
Самозаверяющие сертификаты не являются доверенными по умолчанию и могут быть сложными в обслуживании. Кроме того, они могут использовать устаревшие хэши и комплекты шифров, которые могут быть ненадежными. Для повышения безопасности приобретите сертификат, подписанный известным центром сертификации.
В этой статье раскрываются следующие темы:
Предварительные требования
OpenSSL на компьютере под управлением Windows или Linux.
Хотя для управления сертификатами могут быть доступны и другие инструменты, в этом учебнике используется OpenSSL. OpenSSL поставляется со многими дистрибутивами Linux, например Ubuntu.
Веб-сервер.
Например, Apache, IIS или NGINX для тестирования сертификатов.
SKU Шлюза приложений версии 2.
Создание сертификата корневого ЦС
Создайте сертификат корневого ЦС с помощью OpenSSL.
Создание корневого ключа
Войдите на компьютер, где установлен OpenSSL, и выполните следующую команду. Будет создан зашифрованный ключ.
Создание корневого сертификата и его самозаверение
Используйте следующие команды для создания запроса на подпись сертификата (CSR) и сертификата.
Предыдущие команды создают корневой сертификат. Вы будете использовать его для подписи сертификата сервера.
При появлении запроса введите пароль для корневого ключа и сведения об организации для пользовательского ЦС, такие как страна или регион, штат, организация, подразделение и полное доменное имя (домен издателя).
Создание сертификата сервера
Далее предстоит создать сертификат сервера с помощью OpenSSL.
Создание ключа сертификата
Используйте следующую команду, чтобы создать ключ для сертификата сервера.
Создание запроса на подпись сертификата (CSR)
CSR — это открытый ключ, предоставляемый ЦС при запросе сертификата. ЦС выдает сертификат для этого конкретного запроса.
Используйте следующую команду, чтобы создать CSR:
При появлении запроса введите пароль для корневого ключа и сведения об организации для пользовательского ЦС: страна или регион, штат, организация, подразделение и полное доменное имя. Это домен веб-сайта — он должен отличаться от издателя.
Создание сертификата с использованием CSR и ключа, а также подписывание сертификата с помощью корневого ключа ЦС
Используйте следующую команду, чтобы создать сертификат:
Проверка созданного сертификата
Используйте следующую команду, чтобы напечатать выходные данные CRT-файла и проверить его содержимое:
Проверьте свой каталог и убедитесь, что в нем есть следующие файлы:
Настройка сертификата в параметрах TLS веб-сервера
На веб-сервере настройте TLS с помощью файлов fabrikam.crt и brikam.key. Если веб-сервер не может принять два файла, их можно объединить в один файл PEM или PFX с помощью команд OpenSSL.
Инструкции по импорту сертификата и его передаче в качестве сертификата сервера в службах IIS см. в статье Практическое руководство. Импорт и установка сертификата на веб-сервере в Windows Server 2003.
Инструкции по привязке TLS см. в статье Как настроить SSL для IIS 7.
Apache
Ниже приведен пример конфигурации виртуального узла, настроенного для SSL в Apache:
NGINX
Ниже приведен пример конфигурации серверного блока NGINX с конфигурацией TLS:
Доступ к серверу для проверки конфигурации
Добавьте корневой сертификат в доверенное корневое хранилище компьютера. Войдя на веб-сайт, убедитесь, что в браузере отображается вся цепочка сертификатов.
Предполагается, что служба доменных имен (DNS) настроена таким образом, чтобы сопоставлять имя веб-сервера (в данном примере — www.fabrikam.com) с IP-адресом вашего сервера. В противном случае можно изменить файл hosts, чтобы разрешить имя.
Перейдите на свой веб-сайт и щелкните значок замка в поле адреса браузера, чтобы проверить сведения о сайте и сертификате.
Проверка конфигурации с помощью OpenSSL
Для проверки сертификата можно также использовать OpenSSL.
Передача корневого сертификата в параметры HTTP Шлюза приложений
Чтобы передать сертификат в Шлюз приложений, необходимо экспортировать CRT-сертификат в формат CER с кодировкой Base-64. Поскольку CRT-файл уже содержит открытый ключ в формате Base-64, просто измените расширение файла с CRT на CER.
Портал Azure
Чтобы отправить доверенный корневой сертификат с портала, выберите Параметры HTTP, а затем выберите протокол HTTPS.
Azure PowerShell
Для отправки корневого сертификата можно также использовать Azure CLI или Azure PowerShell. Следующий код является примером для Azure PowerShell.
В следующем примере в шлюз приложений добавляется доверенный корневой сертификат, создается новый параметр HTTP и добавляется новое правило (предполагается, что серверный пул и прослушиватель уже существуют).
🔐 Как создать самоподписанный сертификат SSL
Сертификаты SSL используются для облегчения аутентификации и шифрования в Интернете.
Обычно эти сертификаты выдаются доверенными сторонними центрами сертификации, такими как Let’s Encrypt.
Самоподписанный сертификат – это сертификат, который формируется без подтверждения стороннего центра сертификации.
TLS/SSL – это комбинация открытого сертификата и закрытого ключа.
Закрытый ключ надежно хранится на сервере или на балансировщике нагрузки, тогда как сертификат общедоступен.
В этом руководстве мы объясним, как создать самоподписанный сертификат SSL с помощью инструмента OpenSSL.
Предпосылки
Машина Linux и пользователь с привилегиями sudo.
Установка OpenSSL
OpenSSL доступен по умолчанию во всех основных дистрибутивах Linux.
Выполните приведенную ниже команду, чтобы убедиться, что OpenSSL уже установлен на вашем компьютере с Linux.
На Ubuntu и Debian:
На Red Hat дистрибутивах:
Синтаксис команды openssl:
Создадим самоподписанный сертификат SSL с помощью OpenSSL
Убедившись, что инструмент OpenSSL установлен на вашем компьютере с Linux, вы можете приступить к созданию сертификата.
Информация CSR требуется для создания закрытого ключа.
Поскольку мы генерируем самоподписанный сертификат, на самом деле не требуется выводить файл CSR, поскольку он требуется только в том случае, если вы отправляете информацию CSR в сторонний удостоверяющий центр.
Чтобы создать самоподписанный сертификат SSL, введите:
Эта команда создаст самоподписанный сертификат, который будет действителен в течение 365 дней.
Сертификат и файл ключа будут созданы в текущем каталоге, если явно не указан другой каталог.
Вот что обозначает каждый флаг:
Создадим самоподписанный сертификат, используя существующий закрытый ключ и CSR
В некоторых ситуациях, когда у вас есть закрытый ключ и csr, будет достаточно следующих шагов.
Как создать закрытый ключ OpenSSL
Сначала выполните команду, показанную ниже, чтобы создать и сохранить свой закрытый ключ.
Этот закрытый ключ необходим для подписи вашего SSL-сертификата.
Вы можете изменить my_key в приведенной ниже команде на свое собственное значение.
Вот что означают флаги команды:
Если вы не указали другое местоположение, ваш закрытый ключ будет храниться в текущем рабочем каталоге.
Как создать запрос на подпись сертификата
Следующим шагом является создание запроса на подпись сертификата (CSR).
CSR – это то, что вы обычно отправляете в УЦ.
Но в этом случае вы собираетесь подписать его самостоятельно.
При создании CSR вас попросят предоставить некоторую информацию.
Некоторые поля можно оставить пустыми, нажав клавишу ETCD_CLIENT_CERT_AUTH
Теперь запустите команду, показанную ниже, чтобы начать создание CSR.
Вот что обозначает каждый флаг команды
Подпишем сертификат самостоятельно
Когда вы запустите команду, показанную ниже, будет создан самоподписанынй сертификат, который будет действителен в течение 365 дней.
Проверим сертификат
Вы можете проверить детали сертификата в текстовом формате с помощью команды:
Заключение
В этом руководстве мы описали, как создать самоподписанный сертификат SSL с помощью инструмента openssl.
Учитывая, что основные браузеры не доверяют самоподписанным сертификатам, рекомендуется использовать его только для внутренних целей или в целях тестирования.
Как создавать надежные SSL-сертификаты для локальной разработки
Jul 23 · 6 min read
Есть некоторые различия в том, как браузеры работают с HTTP и HTTPS. Например, любые попытки загрузить JavaScript на HTTPS-странице по HTTP-ссылке будут заблокированы. Это значит, что если локальная разработка идет на HTTP, то добавленный тэг скрипта прекрасно будет работать на вашей машине, но сломается, как только вы развернете приложение на промежуточном или продакшен-окружении, где всё работает под HTTPS. Не очень вдохновляющая перспектива.
Ответ прост: создать собственный сертификат, либо подписывающий сам себя, либо заверенный локальным корневым сервером, и внести его в хранилище доверенных сертификатов операционной системы. Далее этим сертификатом можно пользоваться на локальном веб-сервере.
В этой статье мы разберем процесс создания локального корневого сертификата (также известного, как источник сертификатов). Это позволит вам создавать сколько угодно сертификатов для доменных имен, но доверять только одному сертификату — корневому.
Важно отметить вот что: с 1 сентября 2020 года SSL-сертификаты не выдаются дольше, чем на тринадцать месяцев (397 дней). Поэтому для сертификатов, создаваемых в этой статье, мы ограничимся двенадцатью месяцами.
Создание сертификата
Источник сертификата (Certificate Authority)
1. Создайте закрытый ключ и самоподписанный сертификат
Опционально: если необходимо, можно заменить MY-CA в CN на что-нибудь другое.
Если вам захочется проверить информацию сертификата, его содержимое можно вывести, запустив следующий код:
Сертификат доменного имени
В большинстве случаев достаточно зарегистрировать в сертификате вашу рабочую станцию. Тем не менее, если вы предпочитаете собственные доменные имена для локальных приложений, в созданный сертификат можно добавить несколько альтернативных имен.
1. Создайте файл расширения x509 v3:
Следуя этому шаблону, можно добавить сколько угодно доменных имен.
Примечание: пожалуйста, обновите DNS.4, DNS.5 и DNS.6 или удалите их, если у вас не настроены никакие локальные доменные имена.
2. Создайте закрытый ключ и запрос на подпись сертификата:
Опционально: страну, штат, город и организацию можно изменять.
3. Создайте самоподписанный сертификат:
Использование сертификата
Приложениям, обслуживающим ваш контент, понадобится доступ к файлам сертификата и закрытого ключа. Это может быть локальный веб-сервер (Apache или NGINX), локальный сервис или какой-то другой локальный инструмент, допустим, сборщик модулей DevServer.
Вот несколько примеров:
Apache
NGINX
webpack DevServer
Express.js
Как только вы настроите обслуживающий ваше приложение инструмент на работу с вашим сертификатом, ваше приложение будет доступно по URL’у с HTTPS.
Следуя приведенному выше примеру с Express, вы можете открыть вкладку браузера по адресу https://localhost:8000 и увидеть ваш контент:
Погодите секунду! Где же сообщение «это защищенный сервер»?
Вы рассчитывали увидеть кое-что другое, но именно этого и следовало ожидать — потому что источник сертификата еще не входит в число доверенных.
Доверие к сертификатам
Чтобы получить обозначение безопасного доступа, ваш новый источник сертификата должен считаться доверенным на вашей машине. Процесс присваивания этого статуса различается в зависимости от операционной системы и удовлетворит большинство браузеров. Если вы используете Firefox, процесс имеет некоторые отличия.
macOS — Chrome и Safari
1. Дважды кликните на корневом сертификате ( ca.crt ).
3. Добавьте сертификат.
4. Откройте «Keychain Access» (если еще не открыт).
5. Выделите keychain, который выбрали раньше.
6. Вы должны увидеть сертификат MY-CA (это будет имя, которое вы, как CN, дали вашему источнику сертификата).
7. Дважды кликните по сертификату.
8. Разверните «Доверять» и выберите опцию «Доверять всегда» в пункте «При использовании этого сертификата».
9. Закройте окно сертификата и введите свой пользовательский пароль (если требуется).
Windows 10 — Chrome, IE11 и Edge
1. Дважды кликните на сертификате ( ca.crt ).
2. Кликните на кнопку «Установить сертификат».
3. Выберите, хотите ли вы хранить его на уровне пользователя или на уровне машины.
5. Выберите «Разместить все сертификаты в следующем хранилище».
7. Выберите «Доверенные корневые источники сертификатов».
10. Кликните «Завершить».
11. Если появится подсказка, кликните «Да».
Firefox
Даже после того, как вы установите доверенный источник сертификата в хранилище, Firefox все равно будет выдавать предупреждения. Этого может не случиться в Windows 10, но почти наверняка случится в macOS. Справиться с этим достаточно просто. Firefox демонстрирует вот такой экран:
Чтобы добавить разрешения сертификату, кликните «Дополнительно…». Сразу же после этого кликните на «Принять риск и продолжить», чтобы дать понять, что вы знаете о риске.
Это нужно сделать всего один раз, но для каждого локального домена.
Заключение
Теперь, когда сертификат создан и доверие к нему обеспечено, вы без проблем можете посещать свой локальный домен! Обслуживание приложений стало безопасным, и вы можете спокойно продолжать разработку. Возвращаясь к примеру с Express, результат на экране будет таким:
Сайт полностью загружен, и рядом с URL в Chrome теперь отображается символ безопасного соединения.
Надеюсь, эта статья помогла вам превозмочь трудности с HTTPS.