Сертификат Let’s Encrypt: плюсы и минусы, инструкция по установке бесплатного SSL на сайт

Сертификат Let's Encrypt: плюсы и минусы, инструкция по установке бесплатного SSL на сайт Сертификаты
Содержание
  1. Истек сертификат let’s encrypt. что делать?
  2. Основные преимущества.
  3. 2: получение сертификата
  4. 4: настройка tls/ssl на веб-сервере nginx
  5. Let’s encrypt docker
  6. Letsencrypt продление сертификата — я и программист
  7. Mysql
  8. Nextcloud
  9. Nginx
  10. Nginx-proxy
  11. Obtaining and renewing let’s encrypt ssl certificate
  12. Tags и полный docker-compose файл
  13. Yet another инструкция по получению ssl-сертификата let’s encrypt
  14. Автоматизация: версия 3
  15. Быстрый запуск nextcloud и onlyoffice на ubuntu ssl от letsencrypt
  16. Вариант 2: настройка ssl с сертификатом с собственной подписью
  17. Запуск let’s encrypt
  18. Защита веб-интерфейса nextcloud с помощью ssl
  19. Использование плагина webroot
  20. Как это работает
  21. Какую техническую поддержку вы предлагаете?
  22. Конфигурационный файл let’s encrypt
  23. Настройка nextcloud
  24. Настройка безопасности
  25. Настройка учетной записи администратора
  26. Обновление сертификатов
  27. Получение wildcard сертификата
  28. Получение дополнительной информации о nextcloud snap
  29. Получение сертификата с использованием nginx
  30. Пример обновления сертификатов веб-сервера из хранилища сертификатов
  31. Проверка порта 80
  32. Регистрация в let’s encrypt
  33. Создадим базу mysql
  34. Устанавливаем ssl сертификат let’s encrypt (инструкция)
  35. Установка nextcloud
  36. Шаг 1 — установка клиента letsencrypt
  37. Шаг 4 — настройка автопродление
  38. Заключение

Истек сертификат 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.

Про сертификаты:  Что такое Let's Encrypt - Let's Encrypt

Создаём каталоги для него:

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

Про сертификаты:  Руководство по OpenSSL: SSL-сертификаты, ключи и CSR

Устанавливаем 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.conf

ssl_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 – небольшая компания, мы полагаемся на автоматизацию для снижения издержек. Поэтому мы не можем предложить непосредственную техническую помощь каждому из наших пользователей. Но у нас есть другие способы помочь вам:

  1. Полноценная документация
  2. Активный и полезный форум сообщества. Члены нашего сообщества ведут активную работу по поиску ответов на вопросы, и, скорее всего, на ваш вопрос уже найден ответ.

Вот видео, которое нам нравится – о значимости большого сообщества.

Конфигурационный файл 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:

Про сертификаты:  Купить Стеклотканевая лента 3М™ Scotch ® 27, 19 мм х 55 м по выгодной цене с доставкой в интернет магазине 3M

Настройка безопасности

При первом входе в админку вы увидите сообщение, что требуется дополнительная настройка, чтобы обезопасить ваш сервер. Сейчас расскажу, что нужно сделать.

Редактируем .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 nextcloud
Output

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 nextcloud
Output

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.Так вы заручитесь доверием пользователей и покажете, что вы серьезная компания, которая заботится о безопасности данных клиентов.

Оцените статью
Мой сертификат
Добавить комментарий