Установка SSL сертификата для Apache
Мой блог работает на связке LAMP, т.е. Linux, Apache, MySQL и PHP. Разработчики Let’s Encrypt постарались на славу и упростили настройку сертификата для Apache до уровня «проще некуда». Весь процесс сводится к следующим шагам:
После ввода этой команды появится окно, где необходимо будет заполнить пару деталей, включая электронный адрес владельца. Остальное скрипт сделает за вас:
- Проверит принадлежность домена
- Выпустит необходимый сертификат сроком на 90 дней
- Внесёт все необходимые настройки для веб-сервера Apache
После всех этих манипуляций мне только оставалось настроить 301 редирект (Moved Permanently) с http на https и перезагрузить веб-сервер.
С настройкой nginx дела обстоят хуже, в первую очередь потому что этот плагин пока не работает в связке с letsencrypt-auto. Если есть необходимость настройки SSL сертификатов для nginx (а она разумеется есть, nginx как ни крути один из самых популярных веб-серверов), то я бы порекомендовал сделать это вручную. О том как, читайте ниже.
Аннотация
- Настройка и включить сертификаты сервера, чтобы клиенты могли быть уверены в том, что ваш веб-сайт действителен, и что любая информация, которую они отправляют вам, остается конфиденциальной и конфиденциальной.
- Использование сторонних сертификатов для обеспечения безопасного слоя sockets (SSL), а также общего обзора процесса, используемого для создания запроса на подписание сертификата (CSR), который используется для получения сертификата стороннее.
- Как включить подключение SSL для вашего веб-сайта.
- Как обеспечить соблюдение SSL для всех подключений и установить необходимую длину шифрования между вашими клиентами и веб-сайтом.
Функции безопасности SSL на веб-сервере можно использовать для двух типов проверки подлинности. Вы можете использовать сертификат сервера для проверки подлинности веб-сайта перед передачей персональных данных, например номера кредитной карты. Кроме того, вы можете использовать клиентские сертификаты для проверки подлинности пользователей, запрашивают информацию на вашем веб-сайте.
В этой статье предполагается, что для проверки подлинности веб-сервера используется сторонний орган сертификации (CA).
Чтобы включить проверку сертификата SSL-сервера и обеспечить уровень безопасности, необходимый вашим клиентам, необходимо получить сертификат от сторонного ЦС. Сертификаты, которые выдают вашей организации сторонним ЦС, как правило, привязаны к веб-серверу, а точнее к веб-сайту, к которому необходимо связать SSL. Вы можете создать собственный сертификат на сервере IIS, но если вы это сделаете, ваши клиенты должны неявно доверять вам как органу сертификации.
Статья предполагает следующее:
- Вы установили IIS.
- Вы создали и опубликовали веб-сайт, который необходимо защитить с помощью SSL.
Назначение CredSSP
Что такое CredSSP — это Win32 API, используемый системами Microsoft Windows для выполнения различных операций, связанных с безопасностью, таких как аутентификация. SSPI функционирует, как общий интерфейс для нескольких поставщиков поддержки безопасности (SSP). Поставщик поддержки безопасности — это библиотека динамической компоновки (DLL), которая делает один или несколько пакетов безопасности доступными для приложений.
CredSSP позволяет приложению делегировать учетные данные пользователя от клиента целевому серверу для удаленной аутентификации. CredSSP предоставляет зашифрованный канал протокола безопасности транспортного уровня . Клиент проходит проверку подлинности по зашифрованному каналу с использованием протокола SPNEGO (Simple and Protected Negotiate) с Microsoft Kerberos или Microsoft NTLM.
После проверки подлинности клиента и сервера клиент передает учетные данные пользователя на сервер. Учетные данные дважды шифруются с использованием ключей сеанса SPNEGO и TLS. CredSSP поддерживает вход в систему на основе пароля, а также вход в систему с использованием смарт-карт на основе X.509 и PKINIT.
Подробнее на Microsoft https://docs.microsoft.com/en-us/windows/desktop/secauthn/credential-security-support-provider
Windows SSP
Следующие поставщики общих служб устанавливаются вместе с Windows:
- NTLM (Представлено в Windows NT 3.51 ) (msv1_0.dll) — обеспечивает проверку подлинности NTLM с запросом/ответом для клиент-серверных доменов до Windows 2000 и для не доменной аутентификации (SMB /CIFS).
- Kerberos (Представлен в Windows 2000 и обновлен в Windows Vista для поддержки AES ) (kerberos.dll). Предпочтителен для взаимной аутентификации клиент-серверного домена в Windows 2000 и более поздних версиях.
- Согласование (введено в Windows 2000) (secur32.dll) — выбирает Kerberos и, если не доступно, протокол NTLM. SSP обеспечивает возможность единого входа , иногда называемую встроенной аутентификацией Windows (особенно в контексте IIS). В Windows 7 и более поздних версиях представлен NEGOExts, в котором согласовывается использование установленных пользовательских SSP, которые поддерживаются на клиенте и сервере для аутентификации.
- Безопасный канал (он же SChannel) — Представлен в Windows 2000 и обновлен в Windows Vista и выше для поддержки более надежного шифрования AES и ECC. Этот поставщик использует записи SSL/TLS для шифрования полезных данных. (Schannel.dll)
- PCT (устарел) реализация Microsoft TLS/SSL — криптография SSP с открытым ключом, которая обеспечивает шифрование и безопасную связь для аутентификации клиентов и серверов через Интернет. Обновлено в Windows 7 для поддержки TLS 1.2.
- Digest SSP (Представлено в Windows XP ) (wdigest.dll) — Обеспечивает проверку подлинности HTTP и SASL на основе запросов/ответов между системами Windows и не-Windows, где Kerberos недоступен.
- Учетные данные (CredSSP) (Представлено в Windows Vista и доступно в Windows XP с пакетом обновления 3 (SP3)) (credssp.dll) — обеспечивает SSO и проверку подлинности на уровне сети для служб удаленных рабочих столов.
- Аутентификация с распределенным паролем (DPA) — (Представлено в Windows 2000) (msapsspc.dll) — Обеспечивает аутентификацию через Интернет с использованием цифровых сертификатов.
- Криптография с открытым ключом «пользователь-пользователь» (PKU2U) (представлена в Windows 7 ) (pku2u.dll) — обеспечивает одноранговую аутентификацию с использованием цифровых сертификатов между системами, которые не являются частью домена.
Подробнее на https://en.wikipedia.org/wiki/Security_Support_Provider_Interface
Автоматическое продление
Linux
Смотрим полный путь до скрипта certbot:
which certbot
Открываем на редактирование cron и добавляем следующее:
crontab -e
а) для Ubuntu / Debian:
0 0 * * 1,4 /usr/bin/certbot renew
б) для CentOS:
0 0 * * 1,4 /bin/certbot renew
* в данном примере проверка и продление сертификата будет выполняться по понедельникам и четвергам (1,4) в 00:00. /usr/bin/certbot или /bin/certbot — путь, который мне выдала команда which certbot.
Команда certbot renew проверяет для всех наших сертификатов срок окончания, и если осталось менее 30 дней, запрашивает новый, сохраняет его в каталоге /etc/letsencrypt/archive/<домен> и обновляет симлинк.
Стоит иметь ввиду, что многие приложения, использующие сертификат, потребуют перезапуска, чтобы перечитать его. Поэтому хорошей идеей будет не просто обновлять сертификат, но и перезапускать сервис, который использует сертификат. Например, для NGINX:
0 0 * * 1,4 /bin/certbot renew && systemctl reload nginx
Windows
Настройка задания на автоматическое продление создается при получении сертификата. Проверить задание можно в планировщике заданий Windows:
Проверка сертификата ssl/tls в почтовом сервере
Способов проверить сертификат в почтовом сервере множество. Например, у меня есть статья, где я настраиваю мониторинг сертификатов с помощью Zabbix. Там же есть примеры и для почтового сервера. Вот так с помощью openssl в консоли сервера можно посмотреть текущие сертификаты.
# openssl s_client -starttls smtp -connect mail.site.ru:25 | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d'=' -f2
Это самый простой и быстрый способ. Можете проверить прямо из консоли почтового сервера. Так же можно воспользоваться каким-то готовым сервисом, например https://ssl-tools.net/mailservers.
Если у вас все в порядке, значит настройка ssl в postfix закончена. Остался последний штрих.
Установка SSL сертификата на IIS
Скачиваем программу LetsEncrypt-Win-Simple
Скачиваем и распаковываем архив в директорию на жёстком диске. Для выпуска сертификата нам нужно будет запустить из каталога файл wacs.exe. Но это чуть позже.
Если мы сейчас попытаемся выпустить сертификат, то получим предупреждение
No sites with host bindings have been configured in IIS. Add one in the IIS Manager or choose the plugin 'Manual input' instead.
Запускаем Диспетчере служб IIS через панель управления — администрирование. Или через WIN + R
InetMgr.exe
Добавляем записи в Диспетчере DNS
Открываем Диспетчер DNS через команду выполнить WIN + R (или любым удобным для вас способом )
dnsmgmt.msc
Выбираем сервер, правой кнопкой по каталогу сайтов и нажимаем Добавить веб-сайт… Указываем каталог для нового сайта. Дальше нам нужно создать псевдоним CNAME в
зоне прямого просмотра (forward lookup zones).
Так как домен у меня находится у хостинг провайдера, то я на всякий случай указал в Диспетчере DNS его NS сервера. В свою очередь у хостинг провайдера прописываем A запись с
нашим выделенным IP адресом. Позже мы настроим правило для того чтобы входящее соединение перебрасывало на нужный сервер.
Выпуск SSL сертификата Let’s Encrypt
В принципе всё готово. По части сертификата. Программа автоматически добавляет привязку 443 SSL порта к сайту в Диспетчере служб IIS и в Планировщике заданий таск на автоматический перевыпуск сертификата, но можно в этом убедиться самостоятельно
Настройка шлюза (роутера)
В моём случае это был Kerio Control. Я добавил правило для всех входящих по HTTPS (443 порт) и по HTTP (80 порт) переадресацию на нужный сервер IIS с SSL сертификатом
Перенаправление трафика IIS сайта с HTTP на HTTPS адрес
Чтобы перенаправить весь входящий HTTP трафик на HTTPS сайт, нужно установить модуль Microsoft URL Rewrite Module (https://www.iis.net/downloads/microsoft/url-rewrite), и убедиться, что в настройках сайта не включена опция обязательного использования SSL (Require SSL). Осталось настроить редирект в файле web.config:
Также вы можете настроить перенаправление трафика через URL Rewrite через графический интерфейс IIS Manager. Выберите Sites -> yoursitename -> URL Rewrite.
Создайте новое правило Add Rule -> Blank rule.
Укажите имя правила и измените значения параметров:
- Requested URL -> Matches the Pattern
- Using -> Regular Expressions
- Pattern -> (.*)
В блоке Conditions измените Logical Grouping -> Match All и нажмите Add. Укажите
- Condition input -> {HTTPS}
- Check if input string -> Matches the Pattern
- Pattern -> ^OFF$
Теперь в блоке Action выберите:
- Action Type -> Redirect
- Redirect URL -> https://{HTTP_HOST}/{R:1}
- Redirect type -> Permanent (301)
Откройте браузер и попробуйте открыть ваш сайт по HTTP адресу, вас должно автоматически перенаправить на HTTPS URL.
Клиент WACS для установки TLS сертификата Let’s Encrypt в IIS на Windows Server
Самый простой способ получить SSL сертификат от Let’s Encrypt — воспользоваться консольной утилитой Windows ACME Simple (WACS) (ранее проект назывался LetsEncrypt-Win-Simple). Она представляет собой простой мастер, который позволяет выбрать один из сайтов, запущенных на IIS, и автоматически выпустить и привязать к нему SSL сертификат.
Итак, предположим у нас имеется веб сайт на IIS, развёрнутый под управлением Windows Server 2016. Наша задача, переключить его в HTTPS режим, установив SSL сертификат от Let’s Encrypt.
Скачайте последний релиз клиента WACS со страницы проекта на GitHub https://github.com/PKISharp/win-acme/releases (в моем случае это версия v2.0.10 – файл win-acme.v2.0.10.444.zip).
Распакуйте архив в каталог на сервере с IIS: c:\inetpub\letsencrypt
Для использования Win-Acme требуется установить .NET Framework 4.7.2 или выше (Как узнать какая версия .Net установлена?).
Откройте командную строку с правами администратора, перейдите в каталог c:\inetpub\ letsencrypt и запустите wacs.exe.
Запустится интерактивный мастер генерации сертификата Let’s Encrypt и привязки его к сайту IIS. Чтобы быстро создать новый сертификат выберите N — Create new certificates (simple for IIS).
Затем нужно выбрать тип сертификата. В нашем примере нет необходимости использовать сертификат с псевдонимами (несколькими SAN — Subject Alternative Name), поэтому достаточно выбрать пункт 1. Single binding of an IIS site. Если вам нужен Wildcard-сертификат, выберите опцию 3.
Далее утилита выведет список сайтов, запущенных на сервере IIS и предложит выбрать сайт, для которого нужно создать и привязать новый SSL сертификат.
Процесс генерации и установки SSL сертификата Let’s Encrypt для IIS полностью автоматизирован.
По умолчанию выполняется валидация домена в режиме http-01 validation (SelfHosting). Для этого нужно, чтобы в DNS домена имелась запись, указывающая на ваш веб сервера. При запуске WACS в ручном режиме можно выбрать валидацию типа — 4 Create temporary application in IIS (recommended). В этом случае на веб-сервере IIS будет создано небольшое приложение, через которое сервера Let’s Encrypt смогут провести валидацию.
Примечание. При выполнении TLS/HTTP проверки ваш сайт должен быть доступен снаружи по полному DNS имени по протоколам HTTP (80/TCP) и HTTPS (443/TCP).
Утилита WACS сохраняет закрытый ключ сертификата (*.pem), сам сертфикат и ряд других файлов в каталог C:\Users\%username%\AppData\Roaming\letsencrypt-win-simple. Затем она в фоновом режиме установит сгенерированный SSL сертификат Let’s Encrypt и привяжет его к вашему сайту IIS. Если на сайте уже установлен SSL сертификат (например, самоподписанный), он будет заменен новым.
В IIS Manager откройте меню Site Binding для вашего сайта и убедитесь, что для него используется сертификат, выданный Let’s Encrypt Authority X3.
Этот сертфикат будет доверенным, если вы своевременно обновляли корневые сертфикаты Windows.
В хранилище сертификатов компьютера сертификат Let’s Encrypt для IIS вы можете найти в разделе Web Hosting -> Certificates.
Windows ACME Simple создает новое правило в планировщике заданий Windows (win-acme-renew (acme-v02.api.letsencrypt.org)) для автоматического продления сертификата. Задание запускается каждый день, продление сертификата выполняется через 60 дней. Планировщик запускает команду:
Эту же команду вы можете использовать для ручного обновления сертфиката.
Setup the IIS Site with your Domain Name
- Open the Windows start menu and navigate to the Windows Administrative Tools subgroup.
- Select Internet Information Services (IIS) Manager from the list.
- In the IIS Manager Window, click > next to your server name to expand the list.
-
Expand Sites, and click Add Website on the right Actions bar.
-
Enter your Web Application name in the Site Name: field.
- Under Content Directory, click to browse and set the Physical path: to your domain web files directory.
- Keep as the Type under Binding, and as the port.
- To assign your domain a specific IP address, select it from the drop-down list, or keep All Unassigned to use all Server IP addresses.
- Enter your domain name in the Hostname: field.
- Click OK to save changes and automatically start the website.
-
Visit your domain to confirm successful integration.
The hello world HTML application should display.
Установка модуля ACMESharp Module
Модуль ACMESharp доступен в галерее скриптов PowerShell Gallery. Чтобы загрузить и установить модуль из галереи PowerShell, можно воспользоваться командлетом Install-Module, входящий в PowerShellGet. Модули PowerShellGet включены в Windows Management Framework 5 (установлен по умолчанию Windows 10 и Windows Server 2016).
Если у вас более старая ОС, необходимо скачать и установить WMF 5 или отдельный установщик PowerShellGet (https://docs.microsoft.com/en-us/powershell/gallery/readme).
Итак, если у вас уже установлен PowerShellGet, выполните команду:
В процессе выполнения команды вам будет предложено установить NuGet. Согласитесь с его установкой, т.к. NuGet обеспечивает функции получения пакетов из PowerShell Gallery.
Также вам будет предложено добавить репозитарий галереи PSGallery в доверенные.
Перенаправление трафика IIS сайта с HTTP на HTTPS адрес
Чтобы перенаправить весь входящий HTTP трафик на HTTPS сайт, нужно установить модуль Microsoft URL Rewrite Module (https://www.iis.net/downloads/microsoft/url-rewrite), и убедиться, что в настройках сайта не включена опция обязательного использования SSL (Require SSL). Осталось настроить редирект в файле web.config:
Также вы можете настроить перенаправление трафика через URL Rewrite через графический интерфейс IIS Manager. Выберите Sites -> yoursitename -> URL Rewrite.
Создайте новое правило Add Rule -> Blank rule.
Укажите имя правила и измените значения параметров:
- Requested URL -> Matches the Pattern
- Using -> Regular Expressions
- Pattern -> (.*)
В блоке Conditions измените Logical Grouping -> Match All и нажмите Add. Укажите
- Condition input -> {HTTPS}
- Check if input string -> Matches the Pattern
- Pattern -> ^OFF$
Теперь в блоке Action выберите:
- Action Type -> Redirect
- Redirect URL -> https://{HTTP_HOST}/{R:1}
- Redirect type -> Permanent (301)
Откройте браузер и попробуйте открыть ваш сайт по HTTP адресу, вас должно автоматически перенаправить на HTTPS URL.
Обновление сертификата
Если планируется использовать сертификат SSL от Let’S Encrypt более 90 дней, его придется систематически обновлять. И делать это рекомендуется заранее, минимум за 30 дней до истечения срока действия. Иначе возникают риски временной неработоспособности протокола SSL, когда сайт перестает открываться по прежним ссылкам (браузеры предупреждают об ошибке).
Выполняется процедура обновления командой:
$ certbot renew
После ее ввода будут проверены все ранее выпущенные и установленные в системе сертификаты и заново созданы те, по которым сроки подходят к концу. Если хочется настроить автоматический перевыпуск SSL, нужно ввести команду cron:
$crontab -e 30 2 * * 1 /usr/bin/certbot renew >> /var/log/renew-ssl.log
В таком виде она каждый понедельник в 2:30 будет выполнять проверку актуальности всех SSL и записывать результат в файл с указанным названием.
Протоколы SSL и TLS
SSL (Secure Sockets Layer) и TLS (Transport Level Security) — криптографические протоколы, обеспечивающие защищенную передачу данных в компьютерной сети. Они широко используются в веб-браузерах, а также при работе с электронной почтой, обмене мгновенными сообщениями и в IP-телефонии.
Соединение, защищенное протоколом TLS, обладает одним или несколькими следующими свойствами:
- Безопасность: симметричное шифрование защищает передаваемую информацию от прочтения посторонними лицами.
- Аутентификация: «личность» участника соединения можно проверить с помощью асимметричного шифрования.
- Целостность: каждое сообщение содержит код (Message Authentication Code, MAC), с помощью которого можно проверить, что данные не были изменены или потеряны в процессе передачи.
Так как большинство протоколов связи могут быть использованы как с TLS/SSL, так и без него, при установке соединения необходимо явно указать серверу, хочет ли клиент устанавливать TLS. Один способ добиться этого — использовать порт, по которому соединение всегда устанавливается с использованием TLS (например, 443 для HTTPS). Другой способ — использовать специальную команду серверу от клиента переключить соединение на TLS (например, STARTTLS для протоколов электронной почты).
Настройка HTTPS
Если вы используете файрвол ufw, HTTPS по умолчанию будет отключен. Сначала давайте проверим статус:
$ ufw status
В моем случае он был отключен:
Status: inactive
Включаем:
$ ufw enable
Повторяем проверку и, скорее всего, увидим:
Status: active
Чтобы пропустить трафик HTTPS, разрешаем профиль Apache Full и SSH, так как если этого не сделать, подключиться по SSH в будущем не выйдет:
$ ufw allow ‘Apache Full’
$ ufw allow ssh
И после повторной проверки увидим:
To Action From
— —— —-
Apache Full ALLOW Anywhere
22/tcp ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
После этого мы можем перейти непосредственно к выпуску сертификата.
Checking the New SSL Certificate
After completing the certificate request and installation using the win-acme client, checking the existence of the new certificate is optional but recommended. Given how easy it is to check for certificates gives you no reason not to do it.
Use this code below in PowerShell to display the certificate information. In this example the code checks for the certificate matching the subject name blog.psh-lab.gq inside the local machine’s Web Hosting certificate store.
# Go to the Web Hosting certificate store locationSet-Location Cert:\LocalMachine\WebHosting\# Get the certificate matching the blog.psh-lab.gq subject nameGet-ChildItem | Where-Object {$_.Subject -match 'blog.psh-lab.gq'} | Format-List
The screenshot below shows that there is one certificate in the Web Hosting certificate store matching the certificate installed by win-acme.
The new SSL certificate installed in the LocalMachinecertificate store
If you want to learn more about managing certificates in Windows, please refer to Managing Certs with Windows Certificate Manager and PowerShell .
How to redirect HTTP to HTTPS in IIS
Now that you have a Let’s Encrypt SSL certificate added to your Microsoft IIS site, you will most likely want to redirect all non-secure (HTTP) traffic to HTTPS.
To do so, you will need to download and install the IIS Rewrite Module from here, https://www.iis.net/downloads/microsoft/url-rewrite.
Once that is completed, just follow the below steps.
- Open IIS Manager and select the website on the left and open URL Rewrite.
- Click on Add Rule then select Blank rule.
- Next give the new rule a name and under Match URL change the Requested URL to “Matches the Pattern” and Using to “Regular Expressions” and for the Pattern type in (.*)
- Expand the Conditions block and under Logical Grouping change the drop down to Match All and click on Add.
- For the Condition input type in {HTTPS} in Add Condition prompt. For Check if input string select Matches the Pattern. For Pattern enter ^OFF$
- Now expand the Action block and select Redirect for the Action Type. In the Redirect URL enter: https://{HTTP_HOST}/{R:1} and set the Redirect type select Permanent (301)
- Finally, click Apply
I’ve been a big fan and donor of Let’s Encrypt for a long while now. Let’s Encrypt certs are automated, offer short lifetimes (90 days) and are completely FREE! What’s not to like about them?
If you’ve found this post helpful please consider donating to Let’s Encrypt!
Использование сертификата Let’s Encrypt для Remote Desktop Services
Если вы используете для подключения внешних пользователей в корпоративную сеть шлюз Remote Desktop Gateway/ RD Web Access, вы можете использовать нормальный SSL сертификат Let’s Encrypt вместо обычного самоподписанного сертификата. Рассмотрим, как корректно установить сертификат Let’s Encrypt для зажиты служб Remote Desktop Services в Windows Server.
Если на Remote Desktop Gateway сервере поднята также роль RDSH, нужно запретить пользователям Read доступ к каталогу, в котором у вас хранится WACS (в моем примере это c:\inetpub\letsencrypt) и к каталогу с сертификатами сертификат Let’s Encrypt (C:\ProgramData\win-acme).
Затем на сервере RDP GW, запускаете wacs.exe, как описано выше, и вы выбираете нужный сайт IIS (обычно, Default Web Site). Let’s Encrypt выдает вам новый сертификат, который устанавливается для веб-сайта и в планировщике появляется задание на автоматические обновление сертификата.
Вы можете вручную экспортировать данный сертификат и привязать его к нужным службам RDS через SSL binding. Но вам придется выполнять эти действия вручную каждые 60 дней при перевыпуске сертификата Let’s Encrypt.
Нам нужен скрипт, который бы сразу после получения (продления) сертификата Let’s Encrypt применял бы его для RD Gateway.
В проекте win-acme есть готовый PowerShell скрипт ImportRDGateway.ps1 (https://github.com/PKISharp/win-acme/tree/master/dist/Scripts
)
, который позволяет установить выбранный SSL сертификат для служб Remote Desktop. Главный недостаток скрипта – приходится вручную указывать отпечаток нового сертификата: ImportRDGateway.ps1
Для автоматического получения отпечатка сертификата с указанного сайта IIS используйте доработанный скрипт (основан на стандартном ImportRDGateway.ps1).
Инструкция и модифицированный PowerShell скрипт присланы нашим читателем Антоном, за что посылаем ему лучи благодарности!
Вы можете запустить это скрипт вручную:
powershell -File ImportRDGateway_Cert_From_IIS.ps1
Если у вас RDS Gateway живет на стандартном IIS сайте «Default Web Site» с индексом 0, можете использовать скрипт без изменений.
Чтобы получить ID сайта в IIS, откройте консоль PowerShell и выполните:
Import-Module WebAdministrationGet-ChildItem IIS:Sites
Получите список вида:
В колонке ID указан индекс вашего сайта, отнимите от него единицу. Полученный индекс вашего сайта нужно указать вместо 0 в 27 строке скрипта PowerShell:
$NewCertThumbprint = (Get-ChildItem IIS:SSLBindings).Thumbprint
Теперь откройте задание планировщика win-acme-renew (acme-v02.api.letsencrypt.org) и на вкладке Action добавьте новое задание, которое запускает скрипт ImportRDGateway_Cert_From_IIS.ps1 после обновления сертификата.
Чтобы не менять разрешения на выполнение скриптов PowerShell, вы можете вызывать скрипт командой:
PowerShell.exe -ExecutionPolicy Bypass -File c:\inetpub\letsencrypt\ImportRDGateway_Cert_From_IIS.ps1
Теперь скрипт привязки SSL сертификата к службам RDS будет выполнятся сразу после продления сертификата Let’s Encrypt. При этом автоматически перезапускается служба RD Gateway командой:
При перезапуске службы TSGateway все текущие сессии пользователей разрываются, поэтому желательно изменить периодичность запуска задания обновления сертфиката на 1 раз в 60 дней.
Отметим, что сертификаты Let’s Encrypt в настоящий момент широко используются на сайтах многих крупных компаний и им доверяют все браузеры. Надеюсь, что судьба бесплатного центра сертификации Let’s Encrypt не постигнет участь WoSign и StartCom.
Файлы SSL сертификата
В /etc/letsencrypt/live/devreadwrite.com/ будут следующие файлы:
privkey.pem — приватный ключ для сертификата. В Apache он используется в директиве SSLCertificateKeyFile. В Nginx используется в директиве ssl_certificate_key.
cert.pem — сертификат сервера. Его требует директива Apache SSLCertificateFile.
chain.pem — связка всех сертификатов, которые обслуживаются браузером, за исключением cert.pem. Используется Apache SSLCertificateChainFile.
fullchain.pem — вся связка сертификатов (объединение chain.pem и cert.pem). Используется в Nginx для ssl_certificate.
Вот мы и получили сертификат. Не забудьте запустить Nginx:
service nginx start
Теперь мы можем подключить протокол HTTPS к сайту.
Клиент WACS для установки TLS сертификата Let’s Encrypt в IIS на Windows Server
Самый простой способ получить SSL сертификат от Let’s Encrypt — воспользоваться консольной утилитой Windows ACME Simple (WACS) (ранее проект назывался LetsEncrypt-Win-Simple). Она представляет собой простой мастер, который позволяет выбрать один из сайтов, запущенных на IIS, и автоматически выпустить и привязать к нему SSL сертификат.
Итак, предположим у нас имеется веб сайт на IIS, развёрнутый под управлением Windows Server 2016. Наша задача, переключить его в HTTPS режим, установив SSL сертификат от Let’s Encrypt.
Скачайте последний релиз клиента WACS со страницы проекта на GitHub https://github.com/PKISharp/win-acme/releases (в моем случае это версия v2.0.10 – файл win-acme.v2.0.10.444.zip).
Распакуйте архив в каталог на сервере с IIS: c:inetpubletsencrypt
Откройте командную строку с правами администратора, перейдите в каталог c:inetpub letsencrypt и запустите wacs.exe.
Запустится интерактивный мастер генерации сертификата Let’s Encrypt и привязки его к сайту IIS. Чтобы быстро создать новый сертификат выберите N — Create new certificates (simple for IIS).
Затем нужно выбрать тип сертификата. В нашем примере нет необходимости использовать сертификат с псевдонимами (несколькими SAN — Subject Alternative Name), поэтому достаточно выбрать пункт 1. Single binding of an IIS site. Если вам нужен Wildcard-сертификат, выберите опцию 3.
Далее утилита выведет список сайтов, запущенных на сервере IIS и предложит выбрать сайт, для которого нужно создать и привязать новый SSL сертификат.
Процесс генерации и установки SSL сертификата Let’s Encrypt для IIS полностью автоматизирован.
По умолчанию выполняется валидация домена в режиме http-01 validation (SelfHosting). Для этого нужно, чтобы в DNS домена имелась запись, указывающая на ваш веб сервера. При запуске WACS в ручном режиме можно выбрать валидацию типа — 4 Create temporary application in IIS (recommended). В этом случае на веб-сервере IIS будет создано небольшое приложение, через которое сервера Let’s Encrypt смогут провести валидацию.
Утилита WACS сохраняет закрытый ключ сертификата (*.pem), сам сертфикат и ряд других файлов в каталог C:Users\%username%AppDataRoamingletsencrypt-win-simple. Затем она в фоновом режиме установит сгенерированный SSL сертификат Let’s Encrypt и привяжет его к вашему сайту IIS. Если на сайте уже установлен SSL сертификат (например, самоподписанный), он будет заменен новым.
В IIS Manager откройте меню Site Binding для вашего сайта и убедитесь, что для него используется сертификат, выданный Let’s Encrypt Authority X3.
В хранилище сертификатов компьютера сертификат Let’s Encrypt для IIS вы можете найти в разделе Web Hosting -> Certificates.
Windows ACME Simple создает новое правило в планировщике заданий Windows (win-acme-renew (acme-v02.api.letsencrypt.org)) для автоматического продления сертификата. Задание запускается каждый день, продление сертификата выполняется через 60 дней. Планировщик запускает команду:
C:inetpubletsencryptwacs.exe –renew –baseuri «https://acme-v02.api.letsencrypt.org»
Эту же команду вы можете использовать для ручного обновления сертфиката.
Как установить SSL/TLS, если на сервере несколько сайтов
Обычно, проблемы возникают, когда на сервере уже есть 1 сайт на HTTPS, и на этот сервер нужно перенести другой сайт.
Либо, ещё более патовая ситуация: нужно перенести сайт на HTTP и сделать его доступным по HTTPS. Проблема будет возникать из-за того, что на сервере на порту уже есть сайт с сертификатом SSL/TLS, и обращения будут идти на него, и certbot не сможет прописать сертификат сайту, а сайты по HTTP будут недоступны.
Для решения этой проблемы можно сгенерировать временный самоподписанный сертификат:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
Эта команда создаст 2 файла в директории, из которой вызывается команда (обычно это ):
- cert.pem — это сертификат SSL/TLS;
- key.pem — это ключ к сертификату.
Самоподписанные сертификаты годится, скорее, для служебных целей, нежели чем для использования на рабочих сайтах. Дело в том, что к ним нет никакого доверия, они не обеспечивают должной защиты для пользователя, и браузеры будут предупреждать об этом. Но, скажем, в случае настройки сервера с несколькими сайтами, а также для редиректа с HTTPS на HTTP вполне годятся.
Ещё пример, когда такое решение пригодится — на CloudFlare, настроенном на Flexible SSL, плагин Broken Link Checker при сканировании выдаёт ошибки доступа к изображениям . И тут тоже помогут самоподписанные сертификаты на 443 порту сайта.
Ключи прописываете в конфигурации сервера (пример есть ниже). Далее:
- Если сайт нужен по HTTP, просто делаете редирект с HTTPS на HTTP, по аналогии с редиректом на HTTPS, только наоборот (пример далее);
- Если сайт нужен по HTTPS, делаете сайт доступным по HTTP, затем получаете сертификат с помощью certbot, а дальше всё как по инструкции выше — редирект на HTTPS, прописывание сертификатов, настройка URL, и так далее.
Пример, как сделать редирект с HTTPS на HTTP в NGINX
Допустим, самоподписанные сертификаты сгенерированы командой выше и располагаются в каталоге . Тогда, чтобы настроить редирект с HTTPS на HTTP для нового сайта , мы можем использовать следующую конфигурацию ( заменяем на свой домен, — на свой IP сервера):
server { server_name example.com www.example.com; listen 1.2.3.4:443 ssl; ### Вместо 1.2.3.4 нужно подставить IP сервера ssl_certificate /root/cert.pem; # Путь к самоподписанному сгенерированному сертификату ssl_certificate_key /root/key.pem; # Путь к ключу самоподписанного сертификата rewrite ^(.*) http://$host$1 permanent; } server { server_name example.com www.example.com; listen 1.2.3.4:80 ; ### Вместо 1.2.3.4 нужно подставить IP сервера ### Остальные правила ### }