- Истек сертификат let’s encrypt. что делать?
- Основные преимущества.
- 2: получение сертификата
- 4: настройка tls/ssl на веб-сервере nginx
- Let’s encrypt docker
- Letsencrypt продление сертификата — я и программист
- Mysql
- Nextcloud
- Nginx
- Nginx-proxy
- Obtaining and renewing let’s encrypt ssl certificate
- Tags и полный docker-compose файл
- Yet another инструкция по получению ssl-сертификата let’s encrypt
- Автоматизация: версия 3
- Быстрый запуск nextcloud и onlyoffice на ubuntu ssl от letsencrypt
- Вариант 2: настройка ssl с сертификатом с собственной подписью
- Запуск let’s encrypt
- Защита веб-интерфейса nextcloud с помощью ssl
- Использование плагина webroot
- Как это работает
- Какую техническую поддержку вы предлагаете?
- Конфигурационный файл let’s encrypt
- Настройка nextcloud
- Настройка безопасности
- Настройка учетной записи администратора
- Обновление сертификатов
- Получение wildcard сертификата
- Получение дополнительной информации о nextcloud snap
- Получение сертификата с использованием nginx
- Пример обновления сертификатов веб-сервера из хранилища сертификатов
- Проверка порта 80
- Регистрация в let’s encrypt
- Создадим базу mysql
- Устанавливаем ssl сертификат let’s encrypt (инструкция)
- Установка nextcloud
- Шаг 1 — установка клиента letsencrypt
- Шаг 4 — настройка автопродление
- Заключение
Истек сертификат let’s encrypt. что делать?
Утро, понедельник, приходит письмо от клиента со скриншотом и сакраментальным «Что делать?».
Вдумайтесь, только зашел на сайт, еще ничего не сделал, а тут толпы злоумышленников во всю трясут с тебя пароли, сообщения, кредитные карты, деньги, золото, бриллианты. Страх и ужОс.
Примечательно то, что дело происходит летом, сертификат ставил сотрудник, который давно работает не с нами, а босс в отпуске. В общем, типичный, веселый, белый, пушистый, подкрадывающийся незаметно северный зверёк.
Но нам не привыкать.
Внимание! Всё, что будет рассказываться дальше, очень опасно в руках растущих не из того места. Чисто теоретически: бездумно пытаясь сделать так, как написано в посте, вы можете повредить сайт, сервер и собственный мозг. Поэтому, если не понимаете что и как делалось, а главное для чего, то не стоит даже пытаться. Обратитесь к
квалифицированному врачу
специалисту.
Но если все-таки что-то пошло не так, то я тут не при чем, а значит, все претензии к себе-любимому.
Я принимаю только благодарности и только финансовые. Хотя…
Во-первых, смотрим подробности сертификата.
Из этих подробностей выясняем, что это Let’s Encrypt, и что сертификат истек 29 июня. Сегодня 1 июля! Значит все правильно. Нужно просто перевыпстить сертификат.
Let’s Encrypt — центр сертификации, который раздает бесплатные криптографические сертификаты X.509 для TLS-шифрования (HTTPS). Выдача сертификатов полностью автоматизирована (пишет нам википедия).
Лезем на 2ip.ru и выясняем, где припаркован домен. Кстати, картинки кликабельны.
Какой кошмар. Домен припаркован в Российской Федерации! Опять этот «русский след». Прекрасно!)
Что мы видим? Мы видим IP хоста, мы видим название Хостера (Таймвеб, в данном случае). Осталось обыскать наши базы паролей и…
Да! Доступы в панель управления хостингом у нас есть.
Заходим и… выясняем, что такого домена, в панели управления хостингом, нет. Никакой сертификат там не привязан… Ну ооооок.
Лезем на сервер по SSH.
Зачем? Поскольку в Let’s Encrypt выдача сертификатов полностью автоматизирована, значит мы точно найдем задание для Cron, на обновление сертификатов. Чтобы найти все задачи крона, вводим в консоль команду crontab -l
Вот что мы на это получаем:
CONTENT_TYPE="text/plain; charset=utf-8" 15 02 * * * sudo /usr/local/vesta/bin/v-update-sys-queue disk 10 00 * * * sudo /usr/local/vesta/bin/v-update-sys-queue traffic 30 03 * * * sudo /usr/local/vesta/bin/v-update-sys-queue webstats */5 * * * * sudo /usr/local/vesta/bin/v-update-sys-queue backup 10 05 * * * sudo /usr/local/vesta/bin/v-backup-users 20 00 * * * sudo /usr/local/vesta/bin/v-update-user-stats */5 * * * * sudo /usr/local/vesta/bin/v-update-sys-rrd 31 7 * * * sudo /usr/local/vesta/bin/v-update-sys-vesta-all 52 2 * * * sudo /usr/local/vesta/bin/v-update-letsencrypt-ssl
Что нам это дает? Ну, во-первых, мы видим строку с ключевыми словами update и letsencrypt. Значит этот скрипт и обновляет сертификат, а чтобы его запустить, просто введем в консоль команду sudo /usr/local/vesta/bin/v-update-letsencrypt-ssl
Собственно, вводим и получаем вот что:
domain.ru Error: domain alias domain.ru doesn’t exist
В примерном переводе это означает: Что-то там пошло не так, и я не могу обновить сертификат автоматически. Крутитесь дальше как хотите.
Тогда нам остается то самое во-вторых. В задачах крона мы видим ключевое слово vesta. А Vesta CP — это панель управления сервером. Похоже, кто-то накатил ее на VPS. Значит домен наверняка привязан в ней.
Зайти в Vesta CP (а значит доказать ее наличие) довольно легко: в адресную строку браузера вписываем https://IP_Адрес:8083/list/user/
Само-собой, вместо IP_Адрес вставляем тот IP, который подсмотрели на 2IP.RU.
Отлично. Домен найден, а в редактировании мы видим и настройки сертификата.
Раз автоматическое обновление не работает — обновим вручную.
Делай раз: Снимаем галочку в чекбоксе «Поддержка SSL» и сохраняем.
Делай два: Ставим галочку в чекбоксе «Поддержка SSL» и сохраняем.
Всё. Сертификат продлен до 29 сентября и браузер пугающих надписей клиенту больше не показывает. Пока.
Дело сделано. Осталось выпить чашечку горячего ароматного, и продолжить работу. Солнце-то, все еще высоко. Лето…
А чтобы тот «комсомолец», которому 29 сентября прилетит «письмо счастья» от клиента, не искал решение слишком долго, я написал этот пост. Ну и всем остальным, кто (ну мало-ли) столкнется с истекшим сертификатом от Let’s Encrypt, этот пост тоже пригодится.
Основные преимущества.
- бесплатно: любой владелец сайта (в частности, доменного имени) может получить и установить доверенный TLS-сертификат Let’s Encrypt (TLS — наследник SSL);
- автоматизация: все функции установки, конфигурации и обновления проводятся в автоматическом режиме;
- безопасность: все методы шифрования Let’s Encrypt отвечают текущим стандартам;
- прозрачность: публичная доступность информации о выпуске и отзыве каждого сертификата для любого желающего;
- свободно: будет использован принцип Open Standard для протоколов взаимодействия с CA (Certificate Authority).
2: получение сертификата
Let’s Encrypt предлагает несколько способов получения сертификата при помощи разных плагинов. На данный момент плагины позволяют только получить сертификат, а настройку сервера для использования этого сертификата нужно выполнить вручную; исключением является плагин для Apache, работа с которым описана здесь.
Примечание: Плагины, которые помогают получить сертификат, но не устанавливают его, называются аутентификаторами.
В данном руководстве для создания SSL-сертификата используется плагин Standalone.
4: настройка tls/ssl на веб-сервере nginx
Теперь нужно настроить веб-сервер Nginx для обслуживания сертификата.
Если веб-сервер Nginx ещё не установлен, установите его при помощи команды:
sudo apt-get install nginx
Затем отредактируйте конфигурационный файл Nginx; по умолчанию он хранится в /etc/nginx/sites-available/default.
sudo nano /etc/nginx/sites-available/default
Найдите блок server, он имеет примерно такой вид:
server {listen 80 default_server;listen [::]:80 default_server ipv6only=on;root /usr/share/nginx/html;index index.html index.htm;location / {try_files $uri $uri/ =404;}}
Закомментируйте или удалите строки, настраивающие этот блок для прослушивания порта 80:
listen 80 default_server;listen [::]:80 default_server ipv6only=on;
Этот блок нужно настроить для прослушивания порта 443.
Добавьте в этот блок server { следующие строки:
Let’s encrypt docker
Добавляем сервис в наш Compose-файл:
...
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nextcloud-letsencrypt
depends_on:
- nginx-proxy
networks:
- nextcloud_network
volumes:
- /data/nextcloud/nginx/vhost.d:/etc/nginx/vhost.d:rw
- /data/nextcloud/nginx/html:/usr/share/nginx/html:rw
- /data/nextcloud/nginx/certs:/etc/nginx/certs:rw
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
...Перезапускаем стек:
Let’s Encrypt сгенерировал сертификат – проверяем:
Letsencrypt продление сертификата — я и программист
В этой заметке я рассказывал как можно получить SSL сертификат на свой сайт совершенно бесплатно. Через три месяца сертификат истекает и его нужно обновить, опять-таки бесплатно.
Для этого нужно выполнить простую последовательность действий.
Сначала перейдем в директорию с склонированным letsencrypt и обновим его.
Затем нужно остановить веб-сервер, в моем случае – nginx:
Далее, провести само обновление и снова запустить сервер.
Во время обновления можно столкнуться с ошибками, причина которых – нехватка оперативной памяти на сервере. Чтобы их избежать можно освободить больше памяти остановив такие процессы, как mysql, php-fpm, uwsgi или другие, интенсивно потребляющие память. О том какой процесс больше расходует памяти можно узнать с помощью этого совета.
Для автоматизации задачи можно набросать простой shell скрипт. Будьте внимательны, задавая свои пути.
Установить его на выполнение на cron от root пользователя:
Единицу на третьей позиции, обозначающую день, стоит заменить на день месяца когда вы обновили сертификат.
Mysql
Установим базу данных MySQLsudo apt-get install mysql-serverЗадайте рут-пароль для базы данных. Обязательно запомните или запишите его.
Затем запустите команду для настройки безопасностиmysql_secure_installationОтветьте на несколько вопросов. Можете отказаться от принудительной проверки сложности пароля и замены рут-пароля (первые два вопроса, отвечайте ‘N’), на остальные вопросы отвечайте ‘Y’.
PHP
Установим PHP 7 и нужные модулиsudo apt-get install php libapache2-mod-php php-mcrypt php-mysqlДобавим php-clisudo apt-get install php-cliИ модуль для кэширования php-apcuapt-get install php-apcuОткроем файл конфигурации и отредактируем егоsudo nano /etc/apache2/mods-enabled/dir.confВ списке файлов index с разным расширением, перепишите его так, чтобы в начале был index.php.
Перезапустите Apachesudo systemctl restart apache2
Nextcloud
И, наконец-то – добавляем сам Nextcloud.
Создаём каталоги для него:
root@setevoy-do-nextcloud-production:~# mkdir -p /data/nextcloud/app/{config,custom_apps,data,themes,html}
Обновляем Compose:
...
nextcloud-app:
image: nextcloud:latest
container_name: nextcloud-app
networks:
- nextcloud_network
depends_on:
- letsencrypt
- nginx-proxy
- mysql
volumes:
- /data/nextcloud/app/html:/var/www/html
- /data/nextcloud/app/config:/var/www/html/config
- /data/nextcloud/app/custom_apps:/var/www/html/custom_apps
- /data/nextcloud/app/data:/var/www/html/data
- /data/nextcloud/app/themes:/var/www/html/themes
- /etc/localtime:/etc/localtime:ro
environment:
- VIRTUAL_HOST=cloud.example.org.ua
- LETSENCRYPT_HOST=cloud.example.org.ua
- LETSENCRYPT_EMAIL=root@example.org.ua
restart: unless-stopped
...Переменная VIRTUAL_HOST используется nginx-proxy для выбора направления что и куда проксировать, а LETSENCRYPT_HOST – самим Lets Encrypt контейнером для выбора имени хоста, для которого будет сгенерирован сертификат. См. документацию тут>>>.
Запускаем стек:
Nginx
Nginx предполагает несколько иной подход к настройке. Для каждого виртуального хоста в секцию server следует добавить блок:
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
location = /.well-known/acme-challenge/ {
return 404;
}Я также рекомендуем вынести указанный блок в отдельный шаблон, например, /etc/nginx/letsencrypt.conf и впоследствии подключать в конфигурацию виртуального хоста именно его и в общих чертах это должно выглядеть так:
Nginx-proxy
Создаём каталоги для файлов NGINX и Lets Encrypt:
root@setevoy-do-nextcloud-production:/data/nextcloud# mkdir -p /data/nextcloud/nginx/{certs,vhost.d,html}
Создаём файл /opt/nextcloud/nextcloud-compose.yml, начнём с конца – добавляем сеть:
networks: nextcloud_network:
Теперь добавляем контейнер с nginx-proxy, который использует эту сеть, монтируем каталоги и приводим файл к такому виду:
version: '3'
services:
nginx-proxy:
image: jwilder/nginx-proxy:alpine
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
container_name: nextcloud-proxy
networks:
- nextcloud_network
ports:
- 80:80
- 443:443
volumes:
- /data/nextcloud/nginx/vhost.d:/etc/nginx/vhost.d:rw
- /data/nextcloud/nginx/html:/usr/share/nginx/html:rw
- /data/nextcloud/nginx/certs:/etc/nginx/certs:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: unless-stopped
networks:
nextcloud_network:
Строка labels: com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true будет использоваться контейнером с Lets Encrypt, что бы определить “свой” прокси-сервис.
Каталоги, которые монтируем:
/etc/nginx/certs: для хранения сертификатов и приватных ключей (read-only для контейнераnginx-proxy, т.к. файлы создаются контейнером с клиентом Lets Encrypt)./etc/nginx/vhost.d: для настройки виртуалхостов/usr/share/nginx/html: для верификации домена при генерации сертификата
Запускаем:
И пробуем подключиться к хосту:
Отлично. Ошибка 503 нам сейчас не важна, т.к. кроме NGINX ещё ничего не запущено.
Obtaining and renewing let’s encrypt ssl certificate
Не так давно в промышленную эксплуатацию был запущен центр сертификации Let’s Encrypt.
От всех прочих провайдеров SSL сертификатов его отличает две главные особенности.
Во-первых, Let’s Encrypt позволяет получить (и в ряде случаев даже установить) полученный сертификат в вашу систему в автоматическом режиме, а, во-вторых, сделать это совершенно бесплатно.
Сочетание этих двух факторов даёт возможность легко получить, быстро установить и забыть об обновлении полученного (одного или нескольких) SSL сертификатов в будущем.
Итак, небольшой how-to который был подготовлен на базе настройки этого самого блога.
Tags и полный docker-compose файл
Перед тем, как закончить со всем этим – давайте обновим Compose-файл, и вместо latest зададим конкретные теги (версии) для запускаемых сервисов – хорошая практика для любого production-ready решения.
На момент написания теги:
- jwilder/nginx-proxy:0.4.0
- jrcs/letsencrypt-nginx-proxy-companion:v1.12
- mariadb:10.4.10
- nextcloud:17.0.1-apache
Весь файл сейчас выглядит так:
Yet another инструкция по получению ssl-сертификата let’s encrypt
Тема получения сертификата Let’s Encrypt уже подымалась на хабре (см.
тут
), да и в сети можно найти много рецептов разного качества.
Читал я и ужасался: одни пишут, что то нужно nginx или apache остановить («на пару минуточек всего»), другие предлагают файлы подкладывать в папку веб-сервера (в соседней ssh-сессии), третьи — о том, как важно соблюсти правильный Content-type для файлов проверки домена…
Давайте попробуем обойтись без всего этого: чтобы не было мучительно больно ни на стадии установки, ни очередном продлении — даже если придётся обновлять сразу много доменов. Собственно, вот и вся цель моей небольшой заметки: это не пошаговый степ-бай-степ, не длинная теоретическая статья о том, как функционирует Let’s Encrypt — просто описывается правильный на мой взгляд подход, который будет правилен для конфигурации любой сложности.
Вся суть в двух словах: пусть Let’s Encrypt запустит веб-сервер на 9999 порту, а мы допишем конфиг nginx, чтобы он пробросил запрос на этот бекенд. Кому интересны детали — прошу под кат
Установка Let’s Encrypt в настоящее время рекомендуется из репозитория на гитхабе:
git clone https://github.com/letsencrypt/letsencrypt && cd letsencrypt
Для некоторых операционок уже есть готовые пакеты (более того — вместо команды letsencrypt-auto (которая по сути есть лишь обёртка для letsencrypt) можно использовать letsencrypt), но установка из репозитория меня, как программиста вполне устраивает.
Далее — нужно подготовить наш сервер.
В принципе, всё, что от нас требуется — это чтобы по адресу mysubdomain.mydomain.tld/.well-known/acme-challenge/6il4rb2ErDWuBnUsTw_qrJc_tXGNv43p2a4kQQc0CvE отдавался заранее определённый контент с нужными заголовками.
Переложим эту работу на сам Let’s Encrypt: пусть сам подымет на 127.0.0.1:9999 собственный веб-сервер, а мы — лишь допишем в конфиг nginx правило для проброса запросов на этот бекенд. Не нужно ни останавливать ничего, ни тем более создавать файлы вручную.
Итак. Создаём файл /etc/nginx/template/letsencrypt.conf следующего вида:
location ~ ^/(.well-known/acme-challenge/.*)$ {
proxy_pass http://127.0.0.1:9999/$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;
}
И подключим в конфиг-файлы нужных поддоменов:
include template/letsencrypt.conf;
Собственно, это всё. Дальше можно запустить одну-единственную команду — собственно запустить Let’s encrypt:
letsencrypt-auto --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 mydomain.tld -d www.mydomain.tld -d i1.mydomain.tld -d i2.mydomain.tld
Здесь я получаю сертификат сразу для четырёх поддоменов, указываю, что нужно запустить веб-сервер на порту 9999, согласиться с лицензионным соглашением. (В принципе, можно указать в командной строке е-мейл, чтобы вообще не пришлось в интерактивный режим входить и довносить эту информацию: читайте описание ключей в документации)
В принципе, больше описывать нечего. Как внести сертификат в конфиг-файл nginx достаточно хороших и правильных описаний.
Единственное — осталось добавить в cron команду автоматического продления:
letsencrypt-auto renew >> /dev/null 2>&1
В getting-started приведены другие примеры скриптов обновления, рекомендую посмотреть: можно предусмотреть допустим отправку письма в случае, если обновление закончилось неудачей или автоматически рестартовать демон веб-сервера.
Вот и всё. От себя добавлю, что очень не люблю быть в первых рядах новой технологии («пока не выйдет первый сервис-пак — нет смысла обновлять винду на новую»), но в принципе, вижу, что Let’s Encrypt уже можно потихоньку начинать использовать в продакшн.
PS В качестве основы для своей заметки я взял статью Дмитрия из его блога. Не знаю, есть ли он на хабре, в любом случае от меня — большое спасибо.
Автоматизация: версия 3
Казалось бы, всё, отмучались, всё работает, как часы, в автоматическом режиме сертификаты перевыпускаются и делаются доступными для требующего их ПО. Но… 30-го сентября истёк срок действия сертификата, который выступал к качестве корневого для всей цепочки (ну, не совсем корневого, им был соподписан (cross-signed) корневой сертификат Let’s Encrypt). И да, мне опять пришло письмо – 14-го мая.
Быстрый запуск nextcloud и onlyoffice на ubuntu ssl от letsencrypt
Мало того, что многие не доверяют общедоступным облакам, так они еще и предлагают непозволительно малые объемы дискового пространства.
Однажды мне понадобилось 1Tb облачного хранилища и выбор пал на Nextcloud, который и было решено развернуть на собственном домашнем сервере
В данной статье я опишу как быстро и безболезненно установить и настроить облако Nextcloud и облачный редактор Onlyoffice
Статья предполагает, что у вас уже установлен и настроен Ubuntu.
Все действия были проверены на Ubuntu Server 20.04
Что будем делать:
1. Установим Apache, PHP и MySQL
2. Добавим бесплатный SSL-сертификат Let’s Encrypt
3. Развернем NextCloud
4. Произведем тонкие настройки сервера
5. Установим Onlyoffice
Бесплатные доменные имена в домене .tk можно получить на www.freenom.com
Первым делом, устанавливаем вспомогательные утилиты
sudo apt-get install nano mc zip -yЭтот пункт можно пропустить, если настраиваете облако на локальный диск, а не на отдельную машину с доступом по nfs, мне понадобилось сделать это именно на nfs
# Ставим nfs-client
sudo apt install nfs-common -y
# -------------------
# Монтируем папку nfs# Ставим nginx
sudo mkdir -p /nfs/nc
sudo mount your_host_ip:/папка_шары_nfs/ /nfs/nc
sudo ls -l /nfs/nc/
sudo df -h
sudo du -sh /nfs/nc/
# -------------------
# Монтируем nfs при загрузке
sudo nano /etc/fstab
# Добавим такую строку в конец файла
your_host_ip:/папка_шары_nfs/ /nfs/nc nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Ставим nginx
sudo apt install nginx -y
sudo nginx -V
sudo systemctl enable nginx
sudo systemctl start nginxСтавим php 7.4
sudo apt install php7.4-fpm php7.4-mysql php7.4 php7.4-curl php7.4-gd php7.4-json php7.4-mbstring php7.4-common php7.4-xml php7.4-zip php7.4-opcache php-apcu php-imagick -yНастраиваем php 7.4
sudo nano /etc/php/7.4/fpm/pool.d/www.conf
снимаем комментарии со строк
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
# Настраиваем php.ini:
sudo nano /etc/php/7.4/fpm/php.ini
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
Разрешаем автозапуск php-fpm и перезапускаем его:
sudo systemctl enable php7.4-fpm
sudo systemctl restart php7.4-fpmУстанавливаем MariaDB:
sudo apt install mariadb-server
sudo systemctl enable mariadb
sudo systemctl start mariadbЗапуск сценария безопасности (здесь можно поменять пароль рута, убрать ненужные разрешения):
sudo mysql_secure_installationСоздаем базу данных для Nextcloud (в примере указан пароль nextcloud, его лучше заменить на свой) :
sudo mysql -u root -pВводим пароль рута для MariaDB
>
CREATE DATABASE nextcloud;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'nextcloud';
GRANT ALL ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'nextcloud' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
Теперь надо создать файл конфигурации Nginx для Nextcloud
sudo nano /etc/nginx/sites-enable/nextcloud.confИ вставляем в него следующий текст, естественно, заменив nc.myhost.com на свои сервера
server {
listen 80;
server_name nc.33rus.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name nc.33rus.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
root /var/www/nextcloud;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
client_max_body_size 10G;
fastcgi_buffers 64 4K;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php;
error_page 403 = /core/templates/403.php;
error_page 404 = /core/templates/404.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(data|config|.ht|db_structure.xml|README) {
deny all;
}
location / {
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/core/doc/[^/] /)$ $1/index.html;
try_files $uri $uri/ index.php;
}
location ~ ^(. ?.php)(/.*)?$ {
try_files $1 = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
fastcgi_param HTTPS on;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
location ~* ^. .(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires modified 30d;
access_log off;
}
}
Теперь необходимо получить сертификаты для ssl
Устанавливаем Certbot и его плагин для Nginx:
sudo apt install certbot python3-certbot-nginxПолучаем сертификаты для всего (я получал для всех поддоменов, которые прописал на freenom, в т.ч. для почты, заббикса, и т.п., у вас могут быть и должны быть свои)
Сначала с ключом –dry-run проверяем все ли в порядке
sudo certbot certonly --agree-tos --email you@mail -d nc.myhost.com-d www.myhost.com -d zabbix.myhost.com --nginx --dry-run --dЕсли все хорошо, то получаем сертификаты
sudo certbot certonly --agree-tos --email почта@администратора -d myhost.com-d nc.myhost.com-d cloud.myhost.com-d zabbix.myhost.com-d www.myhost.com-d mail.myhost.com sudo certbot certonly --agree-tos --email your@mail -d nc.myhost.com-d www.33rus.com -d zabbix.33rus.com --nginx n Сертификаты появятся в папке /etc/letsencrypt/live/myhost.com cert.pem chain.pem fullchain.pem privkey.pem
Подключаем сертификаты к сайту
sudo nano /etc/nginx/sites-available/nextcloud.confssl_certificate /etc/letsencrypt/live/myhost.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myhost.com/privkey.pem;
Устанавливаем Nextcloud:
Скачиваем последнюю версию с сайте Nextcloud:
cd /tmp/
sudo wget https://download.nextcloud.com/server/releases/nextcloud-21.0.0.zip
sudo unzip nextcloud-21.0.0.zip
sudo cp -R nextcloud /var/www/nextcloud/
cd /var/www/
sudo chown -R www-data:www-data nextcloud/
sudo chown -R www-data:www-data /nfs/ncОбратите внимание, в данном случае я использую папку на nfs, вам необходимо использовать папку в соответствии с вашими настройками
Почти все. Заходим на https://nc.myhost.com
Создаем пользователя, пароль, прописываем доступ к каталогу /nfs/nc/
Прописываем созданную ранее базу данных и пароль к ней.
Теперь тонкая настройка Nextcloud и установка Onlyoffice
Ставим Redis и APCu
sudo apt install memcached php-memcached -y
sudo apt install php-apcu redis-server php-redis -y
sudo nano /var/www/nextcloud/config/config.phpИ добавляем следующие строки перед закрывающей скобкой )
'memcache.local' => 'OCMemcacheAPCu',
'memcache.distributed' => 'OCMemcacheRedis',
'redis' =>
array (
'host' => '127.0.0.1',
'port' => 6379,
),
'memcache.locking' => 'OCMemcacheRedis',
Переиндексация файлов (если вдруг вы скопировали файлы в папку nexcloud не через интерфейсы nextcloud, то их надо переиндексировать)
sudo -u www-data php /var/www/nextcloud/occ files:scan --allУстанавливаем OnlyOffice DocumentServer
Первым делом устанавливаем версию PostgreSQL, включенную в вашу версию Ubuntu:
sudo apt install postgresql -yПосле установки PostgreSQL создайте базу данных и пользователя PostgreSQL:
Пользователем и паролем для созданной базы данных должны быть onlyoffice.
sudo -i -u postgres psql -c "CREATE DATABASE onlyoffice;"
sudo -i -u postgres psql -c "CREATE USER onlyoffice WITH password 'onlyoffice';"
sudo -i -u postgres psql -c "GRANT ALL privileges ON DATABASE onlyoffice TO onlyoffice;"Установка rabbitmq и nginx-extras:
sudo apt install rabbitmq-server -y
sudo apt install nginx-extras -yУстановка ONLYOFFICE Docs
Добавьте GPG-ключ:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5Добавьте репозиторий ONLYOFFICE Docs:
sudo echo "deb https://download.onlyoffice.com/repo/debian squeeze main" | sudo tee /etc/apt/sources.list.d/onlyoffice.list
sudo apt updateУстанавливаем mariadb-client!
sudo apt install mariadb-client -yУстанавливаем ONLYOFFICE Docs. Не ошибитесь с вводом пароля. Это должен быть onlyoffice
sudo apt install onlyoffice-documentserver -yПереводим onlyoffice на https
sudo cp -f /etc/onlyoffice/documentserver/nginx/ds-ssl.conf.tmpl /etc/onlyoffice/documentserver/nginx/ds.conf
sudo nano /etc/onlyoffice/documentserver/nginx/ds.conf Меняем порт ssl не забыв пробросить его в роутере
listen 0.0.0.0:7443 ssl;
listen [::]:7443 ssl default_server;
Перезапускаем nginx
sudo service nginx restartНастраиваем cron
sudo crontab -u www-data -e# Добавляем строчку
*/5 * * * * php -f /var/www/nextcloud/cron.php
Ну, вот и все, останется через веб-интерфейс установить плагин ONLYOFFICE в вашем Nextcloud и прописать сервер https://myhost.com:7443
Вариант 2: настройка ssl с сертификатом с собственной подписью
Если у вашего сервера Nextcloud нет доменного имени, вы можете защитить веб-интерфейс, создав сертификат SSL с собственной подписью. Этот сертификат обеспечит доступ к веб-интерфейсу через шифрованное соединение, но не сможет подтверждать подлинность вашего сервера, и поэтому ваш браузер может вывести предупреждение при попытке открыть сервер.
Чтобы сгенерировать сертификат с собственной подписью и настроить Nextcloud для его использования, введите:
Запуск let’s encrypt
Перейдите в каталог letsencrypt.
cd /opt/letsencrypt
Затем используйте плагин Standalone:
./letsencrypt-auto certonly –standalone
Примечание: Программное обеспечение Let’s Encrypt требует привилегий суперпользователя. Программа может запросить пароль.
После запуска letsencrypt запросит некоторые данные.
Примечание: Вопросы, задаваемые при первом запуске программы, отличаются от вопросов, задаваемых при дальнейшем её использовании. В руководстве предполагается, что программа запущена впервые.
Укажите адрес электронной почты, который будет использоваться для отправки извещений и восстановления утерянных ключей.
После этого нужно принять условия соглашения подписчика Let’s Encrypt.
Затем программа запросит доменное имя (или имена). Если вы хотите использовать один сертификат для нескольких доменных имен, укажите их в предложенном поле:
Защита веб-интерфейса nextcloud с помощью ssl
Прежде чем мы начнем использовать Nextcloud, нам нужно обеспечить защиту веб-интерфейса.
Если с вашим сервером Nextcloud связано доменное имя, пакет Nextcloud snap может помочь вам получить и настроить защищенный сертификат SSL от Let’s Encrypt. Если у вашего сервера Nextcloud нет доменного имени, Nextcloud может настроить самоподписанный сертификат, который будет шифровать ваш веб-трафик, но которому ваш браузер не будет автоматически доверять.
Учитывая это, перейдите к разделу, который соответствует вашей ситуации.
Использование плагина webroot
Плагин Webroot помещает специальный файл в каталог ./well-known в главном каталоге веб-сервера. После этого Let’s Encrypt может открыть этот файл, чтобы подтвердить домен. В зависимости от настроек сервера вам может понадобиться явно разрешить доступ к каталогу ./well-known.
Чтобы центр сертификации Let’s Encrypt смог получить доступ к каталогу, нужно изменить настройки Nginx.
sudo nano /etc/nginx/sites-enabled/default
В блок server для ssl добавьте следующий код:
location ~ /.well-known {allow all;}
Также можно уточнить путь к root-каталогу в директиве root. Этот путь необходим плагину Webroot; по умолчанию это каталог /usr/share/nginx/html.
Сохраните и закройте файл.
Теперь можно использовать плагин Webroot для обновления сертификата. Указать доменные имена можно при помощи опции –d.
Как это работает
Полное описание процесса доступно по
Важно лишь знать, что для подтверждения владения доменом и успешной генерации сертификата нужно будет иметь доступ к записям DNS или к серверу куда ссылается A-запись, что вполне логично.
Смысл программного набора Automated Certificate Management Environment (ACME) (написан на Python) в том, чтобы автоматизировать генерацию и установку сертификата в Linux-окружении.
Существует неофициальный Windows-клиент с открытыми исходными кодами, который может генерировать и устанавливать сертификаты на Windows IIS и Amazon Web Services, но у нас была задача получить ключи и установить их вручную. Предлагаю любому желающему написать статью по работе с ним.
Какую техническую поддержку вы предлагаете?
Let’s Encrypt – небольшая компания, мы полагаемся на автоматизацию для снижения издержек. Поэтому мы не можем предложить непосредственную техническую помощь каждому из наших пользователей. Но у нас есть другие способы помочь вам:
- Полноценная документация
- Активный и полезный форум сообщества. Члены нашего сообщества ведут активную работу по поиску ответов на вопросы, и, скорее всего, на ваш вопрос уже найден ответ.
Вот видео, которое нам нравится – о значимости большого сообщества.
Конфигурационный файл let’s encrypt
Чтобы упростить процесс обновления Let’s Encrypt, создайте конфигурационный файл:
sudo cp /opt/letsencrypt/examples/cli.ini /usr/local/etc/le-renew-webroot.ini
Откройте файл для редактирования:
sudo nano /usr/local/etc/le-renew-webroot.ini
Раскомментируйте строки email, domains и webroot-path, а затем укажите в них свои данные.
Файл должен выглядеть так (закомментированные строки опущены):
Настройка nextcloud
Далее всё выполняется аналогично NextCloud: установка сервера на Debian с NGINX и PHP-FPM, и клиента на Arch Linux, с той разницей, что адрес сервера баз данных указываем в том виде, в котором он указан в Compose-файле, т.е. в данном примере mysql – Docker сам выполнит DNS-resolution по имени контейнера в его IP из сети nextcloud_network:
Настройка безопасности
При первом входе в админку вы увидите сообщение, что требуется дополнительная настройка, чтобы обезопасить ваш сервер. Сейчас расскажу, что нужно сделать.
Редактируем .htaccesssudo nano /var/www/nextcloud/.htaccessСразу после строчки<IfModule mod_headers.c>добавьтеHeader always set Strict-Transport-Security “max-age=15768000; includeSubDomains; preload”
Удаляем страницу Apache по-умолчаниюsudo rm -rf /var/www/html/
ВНИМАНИЕ: выполните команду только в том случае, если сервер был чистый, а в директории /var/www/html нет ничего ценного.
Включаем memcache
Остановим Apachesudo systemctl stop apache2Отредактируем конфигурацию NextCloudsudo nano /var/www/nextcloud/config/config.phpВ конце файла перед символами ); добавим строчку’memcache.local’ => ‘OCMemcacheAPCu’,Откроем файл конфигурации Apache PHPsudo nano /etc/php/7.0/apache2/php.
opcache.enable=1opcache.enable_cli=1opcache.interned_strings_buffer=8opcache.max_accelerated_files=10000opcache.memory_consumption=128opcache.save_comments=1opcache.revalidate_freq=1
Перезапускаем Apache.sudo systemctl reload apache2Все предупреждения о проблемах с безопасностью должны исчезнуть, останется надпись All checks passed.
Настройка учетной записи администратора
Существует несколько разных способов настройки snap Nextcloud. В этом мануале вместо веб-интерфейса для создания администратора мы используем командную строку: это позволит отключить окно, в котором страница регистрации администратора будет доступна для всех, кто посещает IP-адрес вашего сервера или доменное имя.
Чтобы настроить Nextcloud с новой учетной записью администратора, используйте команду nextcloud.manual-install. Вы должны ввести имя пользователя и пароль в качестве аргументов:
sudo nextcloud.manual-install 8host password
Если все правильно, Nextcloud выдаст такое сообщение:
Обновление сертификатов
Для получения списка сертификатов выполните:
Сертификаты Let’s Encrypt выдаются на 3 месяца, поэтому не ранее, чем за месяц, их необходимо обновить.
Для обновления сертификатов используйте команду:
Эта команда обрабатывает конфигурационные файлы в
и при необходимости выполняет обновление сертификатов.
Для автоматического обновления сертификатов создайте файл для cron:
Согласно указанным настройкам, каждый понедельник в 4:30 будет производиться получение новых SSL-сертификатов взамен старых, если их пора обновлять, с записью лога в файл.
При обновлении сертификатов необходимо выполнять различные действия: перезапускать службы, которые их используют, переносить сертификаты на другие машины и т.п.. Для этих целей используется каталог /etc/letsencrypt/renewal-hooks/deploy/. Скрипты в этой папке будут выполнены при обновлении хотя бы одного сертификата.
Получение wildcard сертификата
Подтверждение сертификатов Wildcard-доменов происходит через DNS. Для проверки наличия записей будет использоваться утилита
. Поставьте пакет .
emerge -a net-dns/bind-tools
Выполните регистрацию Let’s Encrypt ACME аккаунта второй версии, указав почтовый адрес, на который в будущем будут приходить важныe сообщения:
Выполните команду для получения сертификата для доменов
example.orgwww.example.org
. В ходе выполнения программа запросит создать в DNS TXT-записи. Их нужно добавить вручную через DNS-хостинг.
Для проверки наличия TXT-записи используйте следующую команду:
Автоматическое обновление сертификатов, полученных вручную, не поддерживается, поэтому их необходимо обновлять отдельно.
Получение дополнительной информации о nextcloud snap
Если вам нужна дополнительная информация о Nextcloud snap, вам могут помочь несколько полезных команд.
Команда snap info показывает описание, доступные команды управления Nextcloud, установленную версию и отслеживаемый канал snap:
snap info nextcloudПакеты snap могут определять поддерживаемые ими соединительные интерфейсы, включающие элементы slot и plug, сочетание которых дает snap определенные уровни доступа. Например, если пакет snap требуется использовать в качестве сетевого клиента, у него должен быть соединительный интерфейс network. Чтобы увидеть, какие соединительные интерфейсы задает этот пакет snap, введите:
snap connections nextcloudOutput
Interface Plug Slot Notes
network nextcloud:network :network -
network-bind nextcloud:network-bind :network-bind -
removable-media nextcloud:removable-media - -Чтобы узнать обо всех конкретных службах и приложениях, предоставляемых этим пакетом snap, вы можете посмотреть файл определения snap, для чего нужно ввести следующее:
cat /snap/nextcloud/current/meta/snap.yamlЭто позволит вам увидеть отдельные компоненты, входящие в пакет snap, если вам потребуется помощь с отладкой.
Получение сертификата с использованием nginx
Данная схема подходит, если на указанной машине уже работает сервер Nginx.
Создайте настройки для включения в конфигурации серверов:
mkdir /var/calculate/www/acme
Включите ACME в настройку необходимого сервера
example.org
и перезапустите Nginx:
Выполните следующую команду для получения сертификата для доменов
example.orgwww.example.org:
Пример обновления сертификатов веб-сервера из хранилища сертификатов
В данном примере скрипт
при обновлении сертификата для
example.org
будет вызывать скрипт, который обновит сертификаты на
webserver
, а также перезапустит на нём Nginx.
Установите права на выполнение скрипта:
chmod 700 /etc/letsencrypt/renewal-hooks/deploy/push-to-nginx
Проверка порта 80
Плагин Standalone позволяет быстро получить сертификат SSL. Он временно запускает отдельный веб-сервер на порт 80, к которому подключается Let’s Encrypt CA и подтверждает сертификат. Следовательно, для работы плагина необходим порт 80, потому нужно временно отключить обычный веб-сервер, если он занимает этот порт.
К примеру, при использовании Nginx нужно ввести:
sudo service nginx stop
Чтобы узнать, занят ли порт 80, введите:
netstat -na | grep ‘:80.*LISTEN’
Если команда не вернула никакого результата, значит, порт свободен, и можно запускать плагин Standalone.
Регистрация в let’s encrypt
Регистрация нужна для формирования ключевой пары, которой впоследствии подписываются все запросы, что позволяет удостовериться в подлинности отправителя. Это важно, так как все запросы передаются по открытым каналам и теоретически возможен их перехват и модификация.
Адрес электронной почты указываемый при регистрации используется для рассылки уведомлений, например, при неудачной попытке продления сертификата, поэтому следует указывать рабочий ящик, лучше всего собственный. Один и тот-же адрес можно использовать для регистрации на разных хостах, ограничений по этому параметру нет.
Для регистрации выполните команду:
Создадим базу mysql
Перейдём в MySQL, при входе понадобится рут-пароль MySQL, который мы создавали ранее.mysql -u root -pСоздадим новую базу данных под названием nextcloudCREATE DATABASE nextcloud;Зададим ей параметры, не забудьте вставить новый парольGRANT ALL ON nextcloud.* to ‘nextcloud’@’localhost’ IDENTIFIED BY ‘ваш_новый_пароль_для_базы’;Сбросим параметры и выйдем из MySQLFLUSH PRIVILEGESexit
Устанавливаем ssl сертификат let’s encrypt (инструкция)
Рассмотрим использование сертификата применительно к серверам , используемым на нашем хостинге.
Подавляющее большинство наших серверов используют версию Plesk 12.5 где данный модуль уже включён в дистрибутив Plesk 12.5 и установка его проста и удобна. Достаточно зайти в панель плеск в раздел «Сайты и домены », кликнуть на модуль Let’s Encrypt,
выбрать нужные опции и после нажатия кнопки «Установить», установка произойдёт менее чем за минуту.
Так как данный сертификат рассчитан на срок не более 90 дней, то в панели плеск создана соответствующая задача cron в разделе Инструменты и настройки – Планировщик задач
Стоит заметить, что существуют некоторые ограничения на генерацию сертификата:
- дублирующие сертификаты — не более 5 в неделю;
- количество попыток генерации сертификата не более 5 раз в час.
Установка nextcloud
Мы выполним установку Nextcloud с помощью системы пакетов Snap. Эта система пакетов доступна в Ubuntu 20.04 по умолчанию. Она позволяет организациям поставлять программное обеспечение со всеми зависимостями и конфигурациями в самодостаточном блоке с автоматическими обновлениями.
Чтобы загрузить пакет Nextcloud snap и установить его в системе, введите:
sudo snap install nextcloudПакет Nextcloud будет загружен и установлен на ваш сервер. Вы можете проверить успешность установки посредством вывода изменений, связанных с пакетом snap:
snap changes nextcloudOutput
ID Status Spawn Ready Summary
4 Done today at 16:12 UTC today at 16:12 UTC Install "nextcloud" snapИнформация о состоянии и сводная информация показывают, что установка была выполнена без проблем.
Шаг 1 — установка клиента letsencrypt
Итак, что мы имеем:
— Веб сервер под управлением CentOS, Nginx;
— Установленные программы Git, Bc.
На всякий случай:
sudo yum -y install git bc
После того, как git и bc установлены, переходим к клонированию проекта letsencrypt из GitHub.
Шаг 4 — настройка автопродление
Сертификаты действительный 90 дней, но рекомендуется продлевать сертификаты каждые 60 дней. Мы это автоматизируем с помощью cron.
Чтобы запустить процесс обновления для всех установленных доменов, выполните следующую команду:
/opt/letsencrypt/letsencrypt-auto renew
Так как мы недавно установили сертификат, то команда будет проверять только дату истечения срока действия и распечатает сообщение, информирующее о том, что сертификат не нуждается в продлении. Вы увидите примерно следующие в консоли:
Заключение
Подводя итоги, можно сказать, что Центр Сертификации Let’s Encrypt достаточно успешный проект, популярность которого растет с каждым годом среди пользователей сети.
И если вам нужен простой сертификат для одного домена, вы обладаете соответствующими навыками администрирования, а также если нет необходимости в SSL с проверкой компании (OV- organization validation) или наличие зеленой адресной строки и указания названия компании в сертификате, то данный сертификат можно использовать.
Тем не менее, мы рекомендуем крупным компаниям, интернет-магазинам, банкам и другим e-commerce проектам устанавливать коммерческие SSL – сертификаты от известных Центров сертификации, таких как, например, GlobalSign, Comodo.Так вы заручитесь доверием пользователей и покажете, что вы серьезная компания, которая заботится о безопасности данных клиентов.
