Установка сертификатов SSL Letsencrypt на NextCloud
disclaimer:
Рассматривается вариант установки NextCloud через snap и web-сервер Apache.
Именно так устанавливается NextCloud в Ubuntu Server, если чекнуть галочку в списке доп.программ при установке Ubuntu.
disclaimer 2:
SSL сертификаты выдаются только на домены! На IP нельзя сделать сертификат.
В этой статье предполагается что все необходимые NS-записи уже сделаны.
Т.е. для домена и поддомена subdomain3.subdomain2.ru сделана соответствующая А-запись для домена.
Letsencrypt - проверяет наличие этой записи, иначе будет ошибка.
По умолчанию NextCloud устанавливается для использования по протоколу HTTP, 80 порт.
Чтобы использовать протокол HTTPS надо установить сертификаты SSL.
В примере будут использоваться сертификаты от Letsencrypt.
Есть несколько вариантов установки сертификатов.
1. Установка сертификатов Letsencrypt средствами самого NextCloud.
По идее, это "самый правильный" вариант. Потому что лучше пользоваться средствами и инструментами, что дает сама система.
sudo snap run nextcloud.enable-https lets-encrypt
Дальше мастер установки будет задавать вопросы в интерактивном режиме - какую вводить почту, данные домена и т.д.
В конце должен сформировать сертификаты и автоматом запустить NextCloud по протоколу HTTPS.
Ключевое слово - "должен" ))
Но так как линукс - это какое-то недоразумение, а не операционная система, то..
У меня такой метод выдал ошибку:
find: Failed to restore initial working directory: /home/some-user: Permission denied
Linux он такой..
Беглый гугулеж говорит что это бага со snap.
Разбираться с багами линукса - не наш путь.
Поэтому используем более универсальный вариант:
2. Сгенерировать standalone сертификат.
В таком варианте мы можем получить сертификат и самому ручками подключить сертификат к нужному веб-серверу. Потому что веб-сервер может быть разным: apache, nginx, etc.
И способы подключения сертифов к веб-серверу могут быть разными. Поэтому генерируем standalone сертификат и подключаем ручками:
sudo certbot certonly --standalone --agree-tos --preferred-challenges http -d subdomain3.subdomain2.ru
но тут мы тоже получим ошибку:
Could not bind TCP port 80 because it is already in use by another process on
this system (such as a web server). Please stop the program in question and then
try again.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(R)etry/(C)ancel: c
Потому что по умолчанию NextCloud уже запущен на 80 порту.
А certbot для генерации сертификата от Let’s Crypt нужны 80 и 443 порты.
Есть два варианта:
- либо временно глушим NextCloud вместе апачем
- либо переопределяем порты работы NextCloud (можно временно, можно на постоянку)
Переопределить порт работы апач можно в конфиграционном файле апач - httpd.conf.
Но так как у на софт установлен через snap - воспользуемся его интсрументами:
Как изменить порт работы NextCloud ( установленный через snap)
Переопределяем порты работы NextCloud:
sudo snap set nextcloud ports.http=81и
sudo snap set nextcloud ports.https=444
и генерируем сертификаты:
sudo certbot certonly --standalone --agree-tos --preferred-challenges http -d subdomain3.subdomain2.ru
Должно появиться следующее сообщение:
certbot certonly --standalone --agree-tos --preferred-challenges http -d subdomain3.subdomain2.ru
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for subdomain3.subdomain2.ru
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/subdomain3.subdomain2.ru/fullchain.pem
Key is saved at: /etc/letsencrypt/live/subdomain3.subdomain2.ru/privkey.pem
This certificate expires on 2023-11-23.
These files will be updated when the certificate renews.
NEXT STEPS:
- The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Дальше снова переопределяем на стандартные порты 80 и 443.
Или оставляем на нестандартных – только надо не забывать дописывать порт в ссылке.
3. И не забывать продлевать сертификаты каждые 3 месяца!
Сертификаты от Let's Encrypt выдаются на 3 месяца (90 дней, если быть точным). Поэтому не забываем обновлять сертификаты.
- можно ручками:
certbot -q renewПредварительно лучше проверить возможность обновления: certbot renew --dry-run
Иногда обновление может завершиться неудачей. Тогда можно обновиться принудительно:
certbot --force-renewal
- можно в cron добавить задачу:
Через редактор cron добавить задачу:
sudo crontab -eи добавить следующую запись:
0 0 * * 1 /usr/bin/certbot renew >> /var/log/sslrenew.log
P.S.
Это не все варианты.
В зависимости от типа установки софта, используемого веб-сервера, доменов и/или поддоменов и т.д. возможны разные варианты установки. Приведенные выше примеры - ОДИН ИЗ ВАРИАНТОВ.
Не думайте, что это единственно возможный сценарий.