# Получение сертификата Let's Encrypt для HTTPS при помощи Certbot в FreeBSD 14.1

Сайт по незащищенному протоколу HTTP ? Любой сайт должен работать через HTTPS, а для этого нужен сертификат которому доверяют веб-браузеры. Существует сервис Let's Encrypt который выдает бесплатно сертификаты для сайта сроком на 3 месяца, а после можно бесплатно их перевыпустить. Для управления и автоматического обновления сертификатов существует утилита Certbot. В статье будет рассмотрена работа Certbot в FreeBSD и настройка nginx для работы с HTTPS протоколом.

<nav class="toc" id="bkmrk-%D0%9E%D0%B3%D0%BB%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8%3A-1"><span class="text-big">Оглавление статьи:</span>1. [1. Установка Certbot](https://notby.net/poluchenie-sertifikata-let-s-encrypt-dlya-https-pri-pomoshchi-certbot-v-freebsd#1)
2. [2. Создание аккаунта Let's Encrypt](https://notby.net/poluchenie-sertifikata-let-s-encrypt-dlya-https-pri-pomoshchi-certbot-v-freebsd#2)
3. [3. Получение сертификата для сайта](https://notby.net/poluchenie-sertifikata-let-s-encrypt-dlya-https-pri-pomoshchi-certbot-v-freebsd#3)
4. [4. Настройка nginx для работы с HTTPS](https://notby.net/poluchenie-sertifikata-let-s-encrypt-dlya-https-pri-pomoshchi-certbot-v-freebsd#4)
5. [5. Проверка HTTPS и перенаправление с HTTP](https://notby.net/poluchenie-sertifikata-let-s-encrypt-dlya-https-pri-pomoshchi-certbot-v-freebsd#5)
6. [6. Проверка обновлений сертификатов](https://notby.net/poluchenie-sertifikata-let-s-encrypt-dlya-https-pri-pomoshchi-certbot-v-freebsd#6)
7. [7. Автоматическое обновление сертификатов](https://notby.net/poluchenie-sertifikata-let-s-encrypt-dlya-https-pri-pomoshchi-certbot-v-freebsd#7)
8. [8. Изменение email адреса аккаунта](https://notby.net/poluchenie-sertifikata-let-s-encrypt-dlya-https-pri-pomoshchi-certbot-v-freebsd#8)

</nav>## 1. Установка Certbot

Устанавливаем через пакеты

```
```
pkg install py311-certbot
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Или устанавливаем из портов

```
```
cd /usr/ports/security/py-certbot/ && make install clean
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

После установки было выведено сообщение: что можно установить плагины для автоматической настройки Apache или Nginx, как включить автоматическое обновление сертификатов.

<figure class="image" id="bkmrk-">![FreeBSD, certbot успешно установлен, выедено сообщение как включить автоматическое обновление сертификатов и что есть плагины для Apache и Nginx](https://notby.net/images/03/freebsd-certbot-messages-after-installation.webp)</figure>В статье будет показан процесс ручной настройки и добавление сертификатов в веб-сервер nginx и включение автоматического обновления сертификатов Let's Encrypt.

## 2. Создание аккаунта Let's Encrypt

Создаем аккаунт командой:

```
```
certbot register
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Указываем свой email адрес

```
```plaintext
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): tommywirser@notby.net
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Соглашаемся с договором по использованию Let's Encrypt

```
```plaintext
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Отказываемся от передачи своего email адреса и получения новостей и рекламы

```
```plaintext
Would you be willing, once your first certificate is successfully issued, 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
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Аккаунт успешно создан.

## 3. Получение сертификата для сайта

Для получения сертификата используем команду:

```
```
certbot certonly -d notby.net
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

где **notby.net** — доменное имя сайта для которого необходимо выпустить сертификат Let's Encrypt.

Будет преложено два варианта как проверить собственность доменного имени сайта:

1. запустить встроенный веб-сервер certbot (не походит, так как уже есть рабочий веб-сервер);
2. использовать рабочий веб-сервер, например nginx.

**Выбираем 2 вариант**

Далее необходимо указать путь до каталога сайта. В каталоге сайте будет создан каталог .well-known/acme-challenge/ с файлами для проверки домена.

**Указываем каталог сайта**

<figure class="image" id="bkmrk--1">![Получение сертификата Let's Encrypt для домена notby.net командой “certbot certonly -d notby.net” в консоли FreeBSD](https://notby.net/images/03/freebsd-certbot-certonly-d-notby-net.webp)</figure>Нажимаем <kbd>Enter</kbd> и дожидаемся завершение процесса получения сертификата.

<figure class="image" id="bkmrk--2">![Консоль FreeBSD, сертификат Let's Encrypt успешно получен для домена notby.net, путь до сертификата и ключа](https://notby.net/images/03/freebsd-certbot-certonly-d-notby-net-successfully-received-certificate.webp)</figure>Сертификат Let's Encrypt успешно выдан сроком на 3 месяца.

Аналогично происходит получение сертификатов для других сайтов, если это необходимо. Можно получить сертификаты для неограненного количества сайтов.

Если во время получения сертификата произошла ошибка, возможны следующие причины:

- Для утилиты certbot недостаточно прав на создание каталога проверки домена внутри каталога сайта;
- Невозможно получить доступ по URL адресу http://&lt;домен&gt;/.well-known/acme-challenge/.

Проверяем что каталог сайта имеет права как минимум 5 (r-x) для пользователя веб-сервера или любых пользователей.

```
```
ls -lh /usr/local/www/
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

```
```shell
drwxr-x---  2 www www  1.0K Feb 21 12:33 notby.net
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Добавляем в конфигурацию nginx в раздел настроек сайта следующие строки:

```
```nginx
location /.well-known {
	root /usr/local/www/notby.net/; # Каталог сайта.
}
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

## 4. Настройка nginx для работы с HTTPS

Настраиваем nginx на обслуживания сайта через HTTPS по 443 порту с указанием путей сертификатов Let's Encrypt и перенаправление всего трафика с HTTP на HTTPS.

Открываем **конфигурационный файл настроек для сайта** или **nginx.conf**, вносим измерения в раздел настроек сайта

```
```nginx
# Вместо домена notby.net указывай свой домен сайта.
# Блок server для домена notby.net по 80 порту (HTTP).
server {
	listen 80; # Порт сервера.
	server_name notby.net; # Домен сайта.
	
	# Настройка location для получения Let's Encrypt сертификата через HTTP, можно перенести в раздел HTTPS.
	# Каталог .well-known будет создан certbot'ом на время получения сертификата Let's Encrypt.
	location /.well-known {
		root /usr/local/www/notby.net/;
	}
	
	#Перенаправление всего трафика с http на https.
	location / {
		return 301 https://$host$request_uri;
	}
}

# Блок server для домена notby.net по 443 порту (HTTPS).
server {
	listen 443 ssl; # 443 порт, поддержка SSL.
	http2 on; # Использовать HTTP/2.
	server_name notby.net; # Домен сайта.

	# Пути к списку сертификатов, на моменте выдачи сертификата они были указаны.
	ssl_certificate /usr/local/etc/letsencrypt/live/notby.net/fullchain.pem;
	ssl_certificate_key  /usr/local/etc/letsencrypt/live/notby.net/privkey.pem;
	# Сертификат для параметра ssl_stapling
	ssl_trusted_certificate /usr/local/etc/letsencrypt/live/notby.net/chain.pem;

	ssl_protocols TLSv1.3; # Разрешенные протоколы (только TLS 1.3).
	ssl_prefer_server_ciphers off; # Использовать клиентские шифры.

	# OCSP stapling, для ssl_stapling обязательный ssl_trusted_certificate параметр.
	ssl_stapling on;
	ssl_stapling_verify on;

	# Настройки location оставляем как было раньше или меняем если что-то нужно поменять. -:)

	location / {
		root	/usr/local/www/notby.net/; # Каталог сайта.
		index	index.html index.php; # Файлы в качестве индекса.
	}

	location ~ \.php$ {
		fastcgi_pass	unix:/var/run/php-fpm.sock;
		fastcgi_param	SCRIPT_FILENAME /usr/local/www/notby.net/$fastcgi_script_name;
		include			fastcgi_params;
	}
}
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Сохраняем файл и перезапускаем веб-сервер nginx

```
```
service nginx restart
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

## 5. Проверка HTTPS и перенаправление с HTTP

Открываем в веб-браузере свой сайт по протоколу **http**://&lt;адрес сайта&gt;/, должно произойти автоматическое перенаправление на **https**://&lt;адрес сайта&gt;/

Нажимаем значок рядом с адресом сайта и видим что сайт работает по защищенному соединению с сертификатом Let's Encrypt.

<figure class="image" id="bkmrk--3">![Кусок браузера Firefox, проверка наличия сертификата сайта notby.net, соединение защищенное с Let's Encrypt сертификатом](https://notby.net/images/03/veb-brauzer-firefox-proverka-nalichiya-sertifikata-sayta.webp)</figure>Теперь все пользователя будет автоматически перенаправлятся на HTTPS протокол, даже не заметив каких-то измерений.

Поисковые системы также со временем изменят протокол сайта или можно зайти в панель управления сайтами в поисковой системе и указать что сайт переехал на HTTPS.

## 6. Проверка обновлений сертификатов

После настройки веб-сервера запускаем проверку получения нового сертификата

```
```
certbot renew --dry-run
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Параметр **--dry-run** указывает что будет происходить симуляция получения нового сертификата.

<figure class="image" id="bkmrk--4">![Симуляция получения нового сертификата командой “certbot renew --dry-run”, тестовое получение сертификата для notby.net успешно завершено](https://notby.net/images/03/freebsd-certbot-renew-dry-run.webp)</figure>Тестовое получение сертификата успешно пройдено.

## 7. Автоматическое обновление сертификатов

Утилиту Certbot необходимо добавить в файл **/etc/periodic.conf** (периодическое выполнение заданий), чтобы она автоматически перевыпустила сертификаты сайтов, срок действия которых заканчивается.

Открываем в текстовом редакторе файл **/etc/periodic.conf** или создаем его

```
```
nano /etc/periodic.conf
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

Добавляем строку

```
```plaintext
weekly_certbot_enable="YES"
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

<figure class="image" id="bkmrk--5">![Открыт файл /etc/periodic.conf в текстовом редакторе nano, добавлена строка weekly_certbot_enable="YES"](https://notby.net/images/03/freebsd-nano-etc-periodic-conf-add-weekly-certbot-enable-yes.webp)</figure>Сохраняем файл. Теперь раз в неделю будет происходить проверка сертификатов сайтов и если сертификату остается меньше двух недель, он будет обновлен автоматически.

## 8. Изменение email адреса аккаунта

Если в дальнейшим потребуется изменить email адрес аккаунта Let's Encrypt, используем команду:

```
```
certbot update_account --email new@email.com
```<button class="copy" title="Скопировать в буфер обмена" type="button"></button>
```

где **new@email.com** — новый email адрес.

Будет предложено подписатся на новости и немного рекламы, отвечаем **N** если неинтересно.

<figure class="image" id="bkmrk--6">![Обновление email адреса аккаунта Let's Encrypt командой “certbot update_account --email new@email.com” в консоли FreeBSD, email успешно обновлен](https://notby.net/images/03/freebsd-certbot-update-account-email-new-email-com.webp)</figure>Email адрес успешно обновлен.