Поиск по сайту:

Как защитить Nginx с помощью SSL и Let’s Encrypt во FreeBSD


В этом руководстве мы обсудим, как защитить веб-сервер Nginx в FreeBSD с помощью сертификатов TLS/SSL, предлагаемых Let's Encrypt Certificate. Авторитет. Мы также покажем вам, как автоматически продлить сертификаты Lets Encrypt до истечения срока их действия.

TLS, аббревиатура от Transport Layer Security, представляет собой протокол, который работает под управлением протокола HTTP и использует сертификаты и ключи для инкапсуляции пакетов и зашифровать данные, которыми обмениваются сервер и клиент или, в данном случае, между веб-сервером Nginx и браузером клиента, чтобы защитить соединение, чтобы третья сторона, которая могла бы перехватить трафик, не могла расшифровать передача.

Читайте также: установите Let’s Encrypt for Apache во FreeBSD

Процесс получения бесплатного сертификата Let's Encrypt в FreeBSD можно значительно упростить, установив клиентскую утилиту certboot, которая является официальным используемым клиентом Let's Encrypt. для генерации и загрузки сертификатов.

Требования

  1. Установите стек FBEMP (Nginx, MariaDB и PHP) во FreeBSD.

Шаг 1. Настройте Nginx TLS/SSL

1. По умолчанию конфигурация сервера TLS/SSL не включена в FreeBSD, поскольку операторы блокировки сервера TLS прокомментированы в файле конфигурации Nginx по умолчанию.

Чтобы активировать сервер TLS в Nginx, откройте файл конфигурации nginx.conf и найдите строку, определяющую начало . SSL и обновите весь блок, как показано в примере ниже.

nano /usr/local/etc/nginx/nginx.conf

Выдержка из блока HTTPS Nginx:

server {
       listen 443 ssl  default_server;
       server_name  www.yourdomain.com;
	
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	error_page   500 502 503 504  /50x.html;
        
	location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
	
	location / {
	    root   /usr/local/www/nginx;
       	    index  index.html index.htm;
	    try_files $uri $uri/ /index.php?$args;
				}

	ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 10m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	# Use gzip compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.0;

	# Set a variable to work around the lack of nested conditionals
	
	set $cache_uri $request_uri;
	
	location ~ /.well-known {
	allow all;
		}
    


        location ~ \.php$ {
        root	/usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $request_filename;    
		include        fastcgi_params;
        }	
    }

Приведенный выше блок, помимо блока SSL, также содержит некоторые инструкции для включения сжатия gzip и FastCGI Process Manager, используемый для передачи PHP-кода в PHP-FPM< шлюз для запуска динамических веб-приложений.

После того как вы добавили приведенный выше код в основной файл конфигурации Nginx, не перезапускайте демон и не применяйте настройки перед установкой и получением сертификата Let’s Encrypt для вашего домена.

Шаг 2. Установите клиент Certbot во FreeBSD

2. Процесс установки клиентской утилиты Let's Encrypt certbot во FreeBSD включает загрузку исходного кода для py-certbot и его локальную компиляцию, выполнив команду приведенные ниже команды.

cd /usr/ports/security/py-certbot
make install clean

3. Компиляция утилиты py-certbot занимает много времени по сравнению с установкой обычного двоичного пакета. В течение этого времени необходимо загрузить ряд зависимостей и скомпилировать их локально во FreeBSD.

Кроме того, на вашем экране появится ряд подсказок, предлагающих выбрать, какие пакеты будут использоваться во время компиляции для каждой зависимости. На первом экране выберите следующие инструменты, нажав клавишу [пробел], для компиляции зависимости python27, как показано на рисунке ниже.

  • ИПВ6
  • ЛИБФФИ
  • НЛС
  • ПИМАЛЛОК
  • ПОТОКИ
  • UCS4 для поддержки Unicode

4. Затем выберите DOCS и THREADS для зависимости gettext-tools и нажмите OK. >, чтобы продолжить, как показано на рисунке ниже.

5. На следующем экране оставьте параметр ТЕСТЫ отключенным для libffi-3.2.1 и нажмите ОК для перемещения. дальше.

6. Затем нажмите пробел, чтобы выбрать DOCS для зависимости py27-enum34, которая установит документацию для этого. инструмент и нажмите ОК, чтобы продолжить, как показано на снимке экрана ниже.

7. Наконец, выберите установку примеров для зависимости py27-openssl, нажав клавишу [пробел] и ОК. > чтобы завершить процесс компиляции и установки клиента py-certbot.

8. После завершения процесса компиляции и установки утилиты py-certbot выполните приведенную ниже команду, чтобы обновить инструмент до последней версии пакета, как показано на рисунке. ниже скриншоты.

pkg install py27-certbot

9. Во избежание некоторых проблем, которые могут возникнуть при получении бесплатного сертификата Let's Encrypt, наиболее распространенной ошибкой является «pkg_resources.DistributionNotFound». , убедитесь, что в вашей системе также присутствуют следующие две зависимости: py27-salt и py27-acme.

pkg install py27-salt
pkg install py27-acme

Шаг 3. Установите сертификат Let’s Encrypt для Nginx на FreeBSD

10. Чтобы получить автономный сертификат Let's Encrypt для вашего домена, выполните следующую команду и укажите имя домена и все поддомены, для которых вы хотите получить сертификаты, подразумевая -d флаг.

certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

11. При создании сертификата вам будет предложено ввести адрес электронной почты и согласиться с условиями обслуживания Let’s Encrypt. Введите a с клавиатуры, чтобы согласиться и продолжить, и вас также спросят, хотите ли вы поделиться своим адресом электронной почты с партнерами Let’s Encrypt.

Если вы не хотите сообщать свой адрес электронной почты, просто введите слово no в командной строке и нажмите клавишу [enter], чтобы продолжить. После того, как сертификаты для вашего домена будут успешно получены, вы получите несколько важных примечаний, которые сообщат вам, где сертификаты хранятся в вашей системе и когда истекает срок их действия.

12. Если вы хотите получить сертификат Let's Encrypt с помощью плагина «webroot», добавив каталог webroot сервера Nginx для вашего домена. введите следующую команду с флагами --webroot и -w. По умолчанию, если вы не изменили корневой путь Nginx, он должен находиться в системном пути /usr/local/www/nginx/.

certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com

Как и в процедуре --standalone для получения сертификата, процедура --webroot также попросит вас указать адрес электронной почты для обновления сертификата и уведомлений о безопасности, чтобы нажать a, чтобы согласиться с положениями и условиями Let's Encrypt, и no или yes, чтобы сообщать или не передавать адрес электронной почты партнерам Let's Encrypt, как показано в примере ниже.

Имейте в виду, что клиент certbot может обнаружить поддельный адрес электронной почты и не позволит вам продолжить создание сертификата, пока вы не укажете настоящий адрес электронной почты.

Образец Цербота:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email   #A fake email address will be detected
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email 

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a ------------------------------------------------------------------------------- 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 EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for www.domain.com Using the webroot path /usr/local/www/nginx/ for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your cert will expire on 2017-12-28. 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

Шаг 4. Обновите сертификаты TLS Nginx

13. Полученные сертификаты и ключи Let’s Encrypt во FreeBSD расположены по системному пути /usr/local/etc/letsencrypt/live/www.yourdomain.com/. Введите команду ls, чтобы отобразить компоненты вашего сертификата Let’s Encrypt: файл цепочки, файл полной цепочки, закрытый ключ и файл сертификата, как показано в следующем примере.

ls /usr/local/etc/letsencrypt/live/www.yourdomain.com/

14. Чтобы установить сертификаты Let's Encrypt для вашего домена на веб-сервере Nginx, откройте основной файл конфигурации Nginx или файл конфигурации для сервера Nginx TLS, если это отдельный файл, и измените приведенные ниже строки. чтобы отразить путь к выданным сертификатам Let's Encrypt, как показано ниже.

nano /usr/local/etc/nginx/nginx.conf

Обновите следующие строки, чтобы они выглядели как в этом примере:

ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";

15. Кроме того, если строка ssl_dhparam присутствует в конфигурации Nginx SSL, вам следует сгенерировать новый бит 2048. Диффи–Хеллмана со следующей командой:

openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048 

16. Наконец, чтобы активировать конфигурацию Nginx TLS, сначала проверьте глобальную конфигурацию Nginx на наличие возможных синтаксических ошибок, а затем перезапустите службу Nginx, чтобы применить конфигурацию SSL, выполнив следующие команды.

nginx -t
service nginx restart

17. Убедитесь, что демон Nginx привязывается к порту 443, выполнив следующие команды, которые могут вывести список всех открытых сетевых сокетов в системе в состоянии прослушивания.

netstat -an -p tcp| grep LISTEN
sockstat -4 

18. Вы также можете посетить адрес своего домена через протокол HTTPS, открыв браузер и введя следующий адрес, чтобы убедиться, что сертификаты Let’s Encrypt работают должным образом. Поскольку вы используете сертификаты, сгенерированные действительным центром сертификации, в браузере не должно отображаться никаких ошибок.

https://www.yourdomain.com

19. Утилита Openssl также может помочь вам найти информацию о сертификате, полученном от Let’s Encrypt CA, выполнив команду со следующими параметрами.

openssl s_client -connect www.yourdomain.com:443

Если вы хотите, чтобы Nginx перенаправлял все запросы http на https, полученные для вашего домена через порт 80, на HTTPS, откройте файл конфигурации Nginx и найдите директиву сервера для порта 80. и добавьте строку ниже после оператора имя_сервера, как показано в примере ниже.

rewrite ^(.*) https://www.yourdomain.com$1 permanent;

20. Настроить автоматическое продление сертификата, выданного центром Let’s Encrypt до истечения срока их действия, можно, запланировав запуск задания cron один раз в день, выполнив следующую команду.

crontab -e

Задача Cron для обновления сертификата.

0 0 * * * certbot renew >> /var/log/letsencrypt.log

Вот и все! Nginx теперь может предоставлять вашим посетителям защищенные веб-приложения с помощью бесплатных сертификатов Let’s Encrypt.