Бесплатные SSL сертификаты letsencrypt
Потерял я сертификат для доступа в панель управления StartSSL и морочиться не хотелось с восстановлением доступа. Попробовал у неких китайских ребят wosign, но что-то не получилось, поэтому разобрался с letsencrypt. Меня смущало то, что необходимо ставить какой-то сторонний софт, но, внимательнее почитав инструкцию, я понял, что сторонный софт можно держать в контейнере и просто при необходимости в него проксировать запросы, что вполне меня устраивает :)
Итак, устанавливаю ПО:
emerge -av app-crypt/letsencryptДля других дистрибутивов есть инструкция (достаточно просто склонировать git-репозитарий и доставить python пакетики через pip). Сертификат выдаётся автоматически с помощью клиента из консоли на 90 дней, так что придётся обновлять сертификат.
Теперь сделаем конфиг для веб-севрера. У меня везде работает читый nginx:
location ~ ^/(.well-known/acme-challenge/.*)$ { proxy_pass http://letsencrypt/$1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }Зарулил на upstream, который есть контейнер.
Теперь переадресуем все запросы на https:
server { listen 192.168.254.2:80; server_name _; root /var/www/it-e.ru; index index.htm; if ($request_uri !~ "^/(index.htm(l)?|.well-known/acme-challenge/.*)$") { return 301 https://$host$request_uri; } include /etc/nginx/letsencrypt.conf; location / { index index.html index.htm; autoindex off; } }То есть тут я сказал всем клиентам переходить на https://$host$request_uri, кроме запросов на index.html и .well-known/acme-challenge. То есть теперь все мои домены отвечают по https, кроме запросов необходимых для работы letsencrypt. Соотвественно я не запрашиваю обновление сертификата, поэтому в локешне ".well-known/acme-challenge." ответ для клиента будет 502. Это можно поменять.
Теперь запустим команду в контейнере:
letsencrypt --agree-tos --renew-by-default --standalone --standalone-supported-challenges http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory certonly -d it-e.ruСгенерируются сертификаты в директории /etc/letsencrypt/archive/it-e.ru/. Но мы будет использовать симлинк из /etc/letsencrypt/live/it-e.ru/. Измените конфиг сервера:
listen 192.168.254.2:443 ssl; ssl_certificate /etc/letsencrypt/live/it-e.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/it-e.ru/privkey.pem;А ещё лучше подключите http2 и прочие интересные настроечки, но это расмотрим в другой статье.
Обновление сертификата делаем через крон первого числа каждого месяца:
0 1 1 * * /usr/bin/letsencrypt renew >> /dev/null 2>&1 10 1 1 * * /etc/init.d/nginx restart >> /dev/null 2>&1ну или reload :)
Имейте ввиду, что существует ограничение на число выдаваемых сертификатов - rate limit.
Подготовка сертификата для ejabberd:
openssl rsa -in /etc/letsencrypt/live/jabber.it-e.ru/privkey.pem -out /tmp/privkey.key cat /tmp/privkey.key >> /etc/ssl/ejabberd/it-e.ru.pem cat /etc/letsencrypt/live/jabber.it-e.ru/fullchain.pem >> /etc/ssl/ejabberd/it-e.ru.pemТеперь подправьте конфиги и автоматизируйте под свои нужды.
Комментарии (1)
Записки админа:
сен 30, 2016 at 05:10
с китайцами не так-то сложно. https://4admin.info/%D0%B1%D0%B5%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D0%BD%D1%8B%D0%B9-ssl-%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82/
процедура установки letsencrypt мне показалась муторной в принципе, хотя тут она нормально расписана