Содержимое было перенесено с Qiita.
Давайте попробуем использовать Let’s Encrypt с веб-акселератором Sakura Cloud!
Дополнение (2021/01/29)
Теперь у веб-акселератора есть функция автоматического обновления Let’s Encrypt,
поэтому больше нет необходимости сталкиваться с такими проблемами! 🎉
- Мы начали предоставлять функцию автоматического обновления сертификатов Let’s Encrypt на веб-акселераторе
- 【веб-акселератор】Использование сертификата Let’s Encrypt с автоматическим обновлением
Обзор
Если вы используете собственный домен с веб-акселератором Sakura Cloud,
вы можете установить SSL-сертификат (также поддерживается HTTP2),
поэтому я расскажу о процессе использования сертификата Let’s Encrypt.
Что нужно сделать
- Выдайте сертификат с помощью Let’s Encrypt
- Попробуйте зарегистрировать SSL-сертификат через API
Предварительная информация
- У вас уже есть веб-акселератор, работающий с собственным доменом
- В этом примере предполагается, что сервер-источник работает на nginx
Текущее состояние

- Настройки nginx на сервере-источнике
server {
listen 80;
server_name www.example.jp;
location / {
root /usr/share/nginx/html;
index index.html;
add_header Cache-Control s-maxage=3600;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
- Содержимое сервера-источника кэшируется в течение одного часа (3600 секунд)
Подготовка к выдаче сертификата с Let’s Encrypt
Подготовка инструмента выдачи сертификатов
Хотя на официальном сайте предлагается использовать инструмент certbot,
он требует установки Python и поэтому довольно неудобен, поэтому я воспользуюсь lego, написанным на golang.
https://github.com/xenolf/lego/releases
Существует уже скомпилированный бинарный файл, так что я собираюсь использовать его.
- Скачивание (в данном случае для 64-битного Linux)
# curl -L -O https://github.com/xenolf/lego/releases/download/v0.3.1/lego_linux_amd64.tar.xz
# tar xvf lego_linux_amd64.tar.xz
- Тестирование работы команды
# cd lego
# ./lego --verison
На этот раз я планирую использовать команду lego для проверки владения доменом через метод webroot (размещение файла удостоверения домена в указанной директории) и выдачи сертификата.
Файлы и кэш для удостоверения домена
Проблема в том, что файлы, используемые для удостоверения домена, могут кэшироваться на веб-акселераторе, поэтому необходимо
добавить настройки nginx, чтобы это предотвратить.
Файлы удостоверения домена необходимо разместить в директории /.well-known/ под корнем документа,
поэтому нужно создать отдельное location, чтобы указать, что содержимое под /.well-known/ не должно кэшироваться.
server {
listen 80;
server_name www.example.jp;
location / {
root /usr/share/nginx/html;
index index.html;
add_header Cache-Control s-maxage=3600;
}
+ location /.well-known/ {
+ root /usr/share/nginx/html;
+ index index.html;
+ }
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Веб-акселератор не будет кэшировать содержимое, если к заголовку Cache-Control не добавлен s-maxage.
Попробуем выдать сертификат с помощью lego
# ./lego --path ./ --webroot /usr/share/nginx/html/ --email hoge@example.jp --domains www.example.jp --accept-tos run
Если все верно, файлы с приватным ключом и сертификатом должны находиться в директории certificate.
| Имя файла | Содержимое |
|---|---|
| www.example.jp.crt | Сертификат сервера и промежуточный сертификат |
| www.example.jp.key | Приватный ключ |
Если зарегистрировать этот сертификат и промежуточный сертификат в веб-акселераторе, то его можно будет использовать как SSL.
Регистрация сертификата в веб-акселераторе через API
Сертификат SSL можно зарегистрировать и через панель управления,
но с учетом автоматического обновления, было бы лучше использовать API для будущих обновлений.
Дополнение 2017/12/21 Официальный API был опубликован, так что теперь можно обновлять его с уверенностью!
Сообщение о добавлении функции веб-акселератораПожалуйста, обратите внимание, что информация о регистрации API для сертификатов SSL, кажется, не является общедоступной? Мы исследуем API, который использует панель управления,
но это не задокументированный API… используйте на свой страх и риск!
Сначала получите токен API от Sakura Cloud.
Объяснение API Sakura Cloud здесь опущено.
- Инфраструктурным инженерам: давайте попробуем API “Sakura Cloud” 【введение】
- Документация API Sakura Cloud
- Публичный AIP веб-акселератора
Настройка сертификата через API
# curl -X POST --user "Access Token":"Access Token Secret" \
https://secure.sakura.ad.jp/cloud/zone/is1a/api/webaccel/1.0/site/<サイトID>/certificate \
-d "{\"Certificate\": { \"CertificateChain\": \"$(perl -pe 's/\n/\\n/' certificates/www.example.jp.crt | perl -pe 's/\\n$//')\", \"Key\": \"$(perl -pe 's/\n/\\n/' certificates/www.example.jp.key | perl -pe 's/\\n$//')\" }}" | jq .
- Пожалуйста, измените токен API, <サイトID> и имена файлов сертификатов по мере необходимости.
Если регистрация была успешной, при доступе к https://www.example.jp/ ваш сайт должен отображаться с сертификатом Let’s Encrypt.
В заключение
Обновление сертификата SSL также может быть автоматизировано с использованием Let’s Encrypt и API Sakura Cloud,
что позволит создавать систему автоматического обновления.
Похоже, что обновление сертификата можно выполнять, просто запустив команду ниже, и это выглядит довольно удобно.
# ./lego --path ./ --webroot /usr/share/nginx/html/ --email hoge@example.jp --domains www.example.jp --accept-tos renew
# curl -X PUT --user "Access Token":"Access Token Secret" \
https://secure.sakura.ad.jp/cloud/zone/is1a/api/webaccel/1.0/site/<サイトID>/certificate \
-d "{\"Certificate\": { \"CertificateChain\": \"$(perl -pe 's/\n/\\n/' certificates/www.example.jp.crt | perl -pe 's/\\n$//')\", \"Key\": \"$(perl -pe 's/\n/\\n/' certificates/www.example.jp.key | perl -pe 's/\\n$//')\" }}" | jq .