HTTPS вместе с Сertbot и Nginx на FreeBSD 12.1

В данной статье мы будет переводить сайт с HTTP на HTTPS. Сертификат будем получать через Let's Encrypt.
Let's Encrypt — центр сертификации который выдает бесплатные SSL/TLS сертификаты для сайтов.
Сертификат выдается на 3 месяца, после этого времени его нужно будет автомотически обновить.
Получать сертификат и обновлять будем средствами Сertbot.

Обновляем дерево портов и устанавливаем Сertbot:
root@localhost:/ # cd /usr/ports/security/py-certbot
root@localhost:/usr/ports/security/py-certbot # make install clean

Сertbot может автоматически обновлять записи в nginx и apache, но я буду делать все в ручную.
The certbot plugins to support apache and nginx certificate installation
will be made available in the following ports:

 * Apache plugin: security/py-certbot-apache
 * Nginx plugin: security/py-certbot-nginx

Так же теперь не надо делать запись с параметрами в cron, достаточно добавить строчку weekly_certbot_enable="YES" в файл /etc/periodic.conf
In order to automatically renew the certificates, add this line to
/etc/periodic.conf:

    weekly_certbot_enable="YES"

Приступаем к получению сертификата:
root@localhost:/ # certbot certonly -d notanony.ru

Надо выбрать как будет происходить подтверждение домена: 1 — создание виртуального веб-сервера, 2 — в директории nginx сервера. Выбираем 2.
How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Plugins selected: Authenticator webroot, Installer None

Далее указываем e-mail адрес для уведомлений и безопасности и соглашаемся с правилами:
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): tommy@notanony.ru

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: a

На вопрос подписаться на новости отчем n.
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: n

Далее нам надо указать директорию где находится наш сайт, там будет созданы директории и файлы для подтверждения домена:
Input the webroot for notanony.ru: (Enter 'c' to cancel): /usr/local/www/notanony/

Важно что бы nginx мог дать доступ для Let's Encrypt в адрес notanony.ru/.well-known
Если certbot выдает ошибку до добавляем в nginx.conf строки в раздел нашего сайта:
location /.well-known {
root /usr/local/www/notanony;
}

Получаем сертификат, теперь надо настроить nginx
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /usr/local/etc/letsencrypt/live/notanony.ru/fullchain.pem
   Your key file has been saved at:
   /usr/local/etc/letsencrypt/live/notanony.ru/privkey.pem
   Your cert will expire on 2020-04-21. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /usr/local/etc/letsencrypt. You should
   make a secure backup of this folder now. This configuration
   directory will also contain certificates and private keys obtained
   by Certbot so making regular backups of this folder is ideal.
 - 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

Пример конфигурации nginx.conf выглядит у меня так:
#Раздел с HTTPS нужен для перенапраления пользователей https версию сайта и для обновления сертификаты. Пускай подтверждение домена происходить по http протоколу
server {
		listen 80; #http - 80 порт
		server_name notanony.ru;
		
		#Раздел для получение Let's Encrypt сертификата
		location /.well-known { #Директория .well-known будет создаваться на время получение сертификата
		root /usr/local/www/notanony;
		}
		
		#Перенаправление всех обращений с http на https версию сайта
		location / {
		return 301 https://notanony.ru$request_uri;
		}
}
#Раздел HTTPS
server {
		listen 443 ssl; #Порт 443, и то что это ssl
		server_name notanony.ru;

		charset utf-8;

		#Пути к списку сертификатов, на моменте выдачи сертификат они были указаны
		ssl_certificate /usr/local/etc/letsencrypt/live/notanony.ru/fullchain.pem;
		ssl_certificate_key  /usr/local/etc/letsencrypt/live/notanony.ru/privkey.pem;
		ssl_trusted_certificate /usr/local/etc/letsencrypt/live/notanony.ru/chain.pem;
		
		ssl_protocols TLSv1.2 TLSv1.3; #Разрешает указанные протоколы
		ssl_prefer_server_ciphers on; #Приоритетно использовать серверные шифры а не клиентские

		access_log off; #Отключен лог доступа
		error_log /var/log/nginx/notanony.ru-error.log; #Лог ошибок

		#Это оставляем так как было в http версии, ну или меняем если что-то нужно поменять. -:)
		location / {
		root /usr/local/www/notanony/;
		index index.html;
		}
}


Перезапускаем nginx:
root@localhost:/ # /usr/local/etc/rc.d/nginx restart

Заходим на https://notanony.ru/ и смотрим что все работает, так же проверяем перенаправление.
Теперь проверим что автообновления Let's Encrypt сертификат будут работать, делаем тестовое получение сертификата. параметр --dry-run отвечает за тестовое получение сертификата.
root@localhost:/ # certbot renew --dry-run

Если ошибок нет, то все мы перевели сайт с HTTP на HTTPS. Осталось добавить автоонбновление сертификатов.
Добавляем в файл /etc/periodic.conf строчку:
weekly_certbot_enable="YES"

Что бы изменить e-mail, используем команду:
certbot update_account --email tommy@notanony.ru
0.10
25.05.2020 13:08