WordPress на Windows Azure и Letsencrypt
Популярность сервисов по раздаче бесплатных SSL-сертификатов растёт. Одним из таковых является новоиспечённый Letsencrypt. Для получения сертификата на домен/поддомены используются как официальный софт работающий с API, так и самодельный. Рассмотрим способ получения бесплатного сертификата на домен stackoff.ru и поддомен www.stackoff.ru.
Про Windows Azure
В Azure существует множество видов ресурсов. Чаще всего люди пользуются виртуальными серверами, но иногда удобнее развернуть образ сайта и коллекции Microsoft.
За дело
Первым делом нужно получить данные для подключения по FTP. Эту информацию можно получить скачав профиль публикации.
- автоматическое создание проверочных файлов в корне сайта
- автонастройка веб-серверов (nginx, apache)
Нам подходит первый вариант.
Монтируем FTP ресурс как локальную папку
Для этого потребуются полученные на предыдущем шаге данные.
Устанавливаем curlftpfs.
sudo apt-get install curlftpfs
Создаём директорию:
mkdir /tmp/azureftp
Открываем /etc/fstab и добавляем строку в конец файла:
curlftpfs#ftp://{пользователь из конфига}:{пароль из конфига}@{хост из конфига} /tmp/azureftp fuse rw,allow_other,noauto,user 0 0
Сохранив fstab монтируем ресурс:
mount azureftp/
Если всё прошло успешно при выполнении команды ls /tmp/azureftp увидим листинг похожиий на этот:
user@ubuntu:/# ls -la /tmp/azureftp/
total 0
d--------- 1 root root 0 Apr 19 18:47 data
d--------- 1 root root 0 Apr 18 08:47 LogFiles
d--------- 1 root root 0 Apr 18 08:47 site
Клиент LE создаёт файлы для проверки в директории /.well-known/acme-challenge/, но по умолчанию доступ к файлам внутри директорий с точно запрещен. Необходимо это исправить. Модифицируем файл web.config, который лежит в директории /site/wwwroot на FTP сервере.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="wordpress" patternSyntax="Wildcard">
<match url="*"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
</conditions>
<action type="Rewrite" url="index.php"/>
</rule>
</rules>
</rewrite>
<handlers>
<clear />
<add
name="StaticFile"
path=".well-known/acme-challenge/*" verb="*"
modules="StaticFileModule"
resourceType="Either"
requireAccess="Read" />
</handlers>
<staticContent>
<mimeMap fileExtension=".*" mimeType=" text/plain" />
</staticContent>
</system.webServer>
</configuration>
Добавив хендлер и секцию статики переходим к следующему этапу.
Установка и использование Letsencrypt клиента
Клонируем репозиторий Letsencrypt.
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt && cd /opt/letsencrypt
./letsencrypt-auto certonly -t
Выбираем нужные параметры и вводим домен (через пробел можно указать поддомены).
После успешной генерации файлов получим следующее:
user@ubuntu:/opt/letsencrypt# ls -la /etc/letsencrypt/live/kiv.im/
total 8
drwxr-xr-x 2 root root 4096 Apr 20 02:28 .
drwx------ 3 root root 4096 Apr 20 02:16 ..
lrwxrwxrwx 1 root root 30 Apr 20 02:26 cert.pem -> ../../archive/stackoff.ru/cert2.pem
lrwxrwxrwx 1 root root 31 Apr 20 02:26 chain.pem -> ../../archive/stackoff.ru/chain2.pem
lrwxrwxrwx 1 root root 35 Apr 20 02:26 fullchain.pem -> ../../archive/stackoff.ru/fullchain2.pem
lrwxrwxrwx 1 root root 33 Apr 20 02:26 privkey.pem -> ../../archive/stackoff.ru/privkey2.pem
Преобразовываем сертификат в нужный формат (для azure необходим pfx файл):
openssl pkcs12 -inkey /etc/letsencrypt/live/stackoff.ru/privkey.pem -in /etc/letsencrypt/live/stackoff.ru/cert.pem -export -out /etc/letsencrypt/live/stackoff.ru/output.pfx
Необходимо будет придумать пароль для экспорта, который впоследствии нужно будет ввести на сайте.
Полученный файл output.pfx можно загружать в Windows Azure.
Полученный результат: