Windows azure, wordpress, letsencrypt ssl

WordPress на Windows Azure и Letsencrypt

Популярность сервисов по раздаче бесплатных SSL-сертификатов растёт. Одним из таковых является новоиспечённый Letsencrypt. Для получения сертификата на домен/поддомены используются как официальный софт работающий с API, так и самодельный. Рассмотрим способ получения бесплатного сертификата на домен stackoff.ru и поддомен www.stackoff.ru.

Про Windows Azure

В Azure существует множество видов ресурсов. Чаще всего люди пользуются виртуальными серверами, но иногда удобнее развернуть образ сайта и коллекции Microsoft.

Информация
Использование собственных SSL-сертификатов возможно в ценовых категориях базовый и стандартный. 

За дело

Первым делом нужно получить данные для подключения по FTP. Эту информацию можно получить скачав профиль публикации.

Профиль публикации
Клиент LE работает в двух режимах:

  • автоматическое создание проверочных файлов в корне сайта
  • автонастройка веб-серверов (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
Данный клиент написан на Python, поэтому при первом запуске будут подтянуты зависимости.
./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

Необходимо будет придумать пароль для экспорта, который впоследствии нужно будет ввести на сайте.

Загрузка PFX

Полученный файл output.pfx можно загружать в Windows Azure.

Полученный результат:

Используем загруженный сертификат для подтверждения подлинности