Lets encrypt ssl сертификат инструкция nginx

Editor – The blog post detailing the original procedure for using Let’s Encrypt with NGINX (from February 2016) redirects here. The instructions in that post are deprecated.

This post has been updated to eliminate reliance on certbot‑auto, which the Electronic Frontier Federation (EFF) deprecated in Certbot 1.10.0 for Debian and Ubuntu and in Certbot 1.11.0 for all other operating systems. For additional details and alternate installation methods, see this post from the EFF.

Also see our blog post from nginx.conf 2015, in which Peter Eckersley and Yan Zhu of the Electronic Frontier Foundation introduce the then‑new Let’s Encrypt certificate authority.

It’s well known that SSL/TLS encryption of your website leads to higher search rankings and better security for your users. However, there are a number of barriers that have prevented website owners from adopting SSL.

Two of the biggest barriers have been the cost and the manual processes involved in getting a certificate. But now, with Let’s Encrypt, they are no longer a concern. Let’s Encrypt makes SSL/TLS encryption freely available to everyone.

Let’s Encrypt is a free, automated, and open certificate authority (CA). Yes, that’s right: SSL/TLS certificates for free. Certificates issued by Let’s Encrypt are trusted by most browsers today, including older browsers such as Internet Explorer on Windows XP SP3. In addition, Let’s Encrypt fully automates both issuing and renewing of certificates.

In this blog post, we cover how to use the Let’s Encrypt client to generate certificates and how to automatically configure NGINX Open Source and NGINX Plus to use them.

How Let’s Encrypt Works

Before issuing a certificate, Let’s Encrypt validates ownership of your domain. The Let’s Encrypt client, running on your host, creates a temporary file (a token) with the required information in it. The Let’s Encrypt validation server then makes an HTTP request to retrieve the file and validates the token, which verifies that the DNS record for your domain resolves to the server running the Let’s Encrypt client.

Prerequisites

Before starting with Let’s Encrypt, you need to:

  • Have NGINX or NGINX Plus installed.
  • Own or control the registered domain name for the certificate. If you don’t have a registered domain name, you can use a domain name registrar, such as GoDaddy or dnsexit.
  • Create a DNS record that associates your domain name and your server’s public IP address.

Now you can easily set up Let’s Encrypt with NGINX Open Source or NGINX Plus (for ease of reading, from now on we’ll refer simply to NGINX).

Note: We tested the procedure outlined in this blog post on Ubuntu 16.04 (Xenial).

1. Download the Let’s Encrypt Client

First, download the Let’s Encrypt client, certbot.

As mentioned just above, we tested the instructions on Ubuntu 16.04, and these are the appropriate commands on that platform:

$ apt-get update
$ sudo apt-get install certbot
$ apt-get install python-certbot-nginx

With Ubuntu 18.04 and later, substitute the Python 3 version:

$ apt-get update
$ sudo apt-get install certbot
$ apt-get install python3-certbot-nginx

2. Set Up NGINX

certbot can automatically configure NGINX for SSL/TLS. It looks for and modifies the server block in your NGINX configuration that contains a server_name directive with the domain name you’re requesting a certificate for. In our example, the domain is www.example.com.

  1. Assuming you’re starting with a fresh NGINX install, use a text editor to create a file in the /etc/nginx/conf.d directory named domain‑name.conf (so in our example, www.example.com.conf).

  2. Specify your domain name (and variants, if any) with the server_name directive:

    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        server_name example.com www.example.com;
    }
  3. Save the file, then run this command to verify the syntax of your configuration and restart NGINX:

    $ nginx -t && nginx -s reload

3. Obtain the SSL/TLS Certificate

The NGINX plug‑in for certbot takes care of reconfiguring NGINX and reloading its configuration whenever necessary.

  1. Run the following command to generate certificates with the NGINX plug‑in:

    $ sudo certbot --nginx -d example.com -d www.example.com
  2. Respond to prompts from certbot to configure your HTTPS settings, which involves entering your email address and agreeing to the Let’s Encrypt terms of service.

  3. When certificate generation completes, NGINX reloads with the new settings. certbot generates a message indicating that certificate generation was successful and specifying the location of the certificate on your server.

    Congratulations! You have successfully enabled https://example.com and https://www.example.com 
    
    -------------------------------------------------------------------------------------
    IMPORTANT NOTES: 
    
    Congratulations! Your certificate and chain have been saved at: 
    /etc/letsencrypt/live/example.com/fullchain.pem 
    Your key file has been saved at: 
    /etc/letsencrypt/live/example.com//privkey.pem
    Your cert will expire on 2017-12-12.

    Note: Let’s Encrypt certificates expire after 90 days (on 2017-12-12 in the example). For information about automatically renenwing certificates, see Automatic Renewal of Let’s Encrypt Certificates below.

If you look at domain‑name.conf, you see that certbot has modified it:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name  example.com www.example.com;

    listen 443 ssl; # managed by Certbot

    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

4. Automatically Renew Let’s Encrypt Certificates

Let’s Encrypt certificates expire after 90 days. We encourage you to renew your certificates automatically. Here we add a cron job to an existing crontab file to do this.

  1. Open the crontab file.

    $ crontab -e
  2. Add the certbot command to run daily. In this example, we run the command every day at noon. The command checks to see if the certificate on the server will expire within the next 30 days, and renews it if so. The --quiet directive tells certbot not to generate output.

    0 12 * * * /usr/bin/certbot renew --quiet
  3. Save and close the file. All installed certificates will be automatically renewed and reloaded.

  4. Summary

    We’ve installed the Let’s Encrypt agent to generate SSL/TLS certificates for a registered domain name. We’ve configured NGINX to use the certificates and set up automatic certificate renewals. With Let’s Encrypt certificates for NGINX and NGINX Plus, you can have a simple, secure website up and running within minutes.

    To try out Let’s Encrypt with NGINX Plus yourself, start your free 30-day trial today or contact us to discuss your use cases.

    Related Documentation

    Securing HTTP Traffic to Upstream Servers
    Securing TCP Traffic to Upstream Servers
    NGINX SSL Termination

Hero image

Managing Kubernetes Traffic with F5 NGINX: A Practical Guide

Learn how to manage Kubernetes traffic with F5 NGINX Ingress Controller and F5 NGINX Service Mesh and solve the complex challenges of running Kubernetes in production.

Nginx — один из самых популярных веб-серверов, благодаря его высокой производительности при больших нагрузках. В наше время всё больше и больше сайтов поддерживают HTTPS и производители браузеров, такие как Google и Mozilla всеми силами пытаются мотивировать владельцев сайтов переходить на этот защищённый протокол.

В последнее время сделать это не очень сложно, потому что все популярные веб-серверы его поддерживают, а получить сертификат можно абсолютно бесплатно. В сегодняшней статье мы поговорим о том как настроить SSL в Nginx с сертификатом Lets Encrypt.

Я предполагаю, что у вас уже установлен веб-сервер Nginx. Дальше мы рассмотрим как создать виртуальный хост, установить все необходимые компоненты для получения сертификатов, а также настроить само SSL соединение.

Обратите внимание, что для получения сертификата необходимо чтобы к серверу был привязан домен, потому что сертификат будет выдан именно для этого домена и только так центр сертификации сможет убедится, что этот домен и сервер ваши. В этом примере я буду получать сертификат для домена vps.losst.pro и www.vps.losst.pro. Соответственно А запись обоих доменов должна указывать на сервер.

Шаг 1. Настройка виртуального хоста

Если у вас ещё не настроен HTTP виртуальный хост для сайта, то это надо сделать потому что иначе установить SSL сертификат Nginx не получится. Например, для vps.losst.pro самая простая конфигурация будет выглядеть вот так:

sudo vi /etc/nginx/conf.d/vps-losst-ru.conf

server {
listen 80;
server_name vps.losst.pro www.vps.losst.pro;
access_log /var/log/nginx/vps-losst-ru.access.log main;
root /var/www/vps.losst.pro/public_html/;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}

Затем проверьте конфигурацию Nginx:

nginx -t

И если всё верно, перезапустите веб-сервер:

sudo systemctl restart nginx

Директория /var/www/vps.losst.pro/public_html/ должна существовать, и в ней надо расположить индексный файл с каким нибудь содержимым:

sudo mkdir -p /var/www/vps.losst.pro/public_html/

sudo vi /var/www/vps.losst.pro/public_html/index.html

Its works!

Убедиться что всё работает можно с помощью браузера или утилиты curl:

curl vps.losst.pro

2. Установка Certbot

Для получения сертификатов LetsEncrypt официально рекомендовано использовать клиент Certbot. Установить программу можно из официальных репозиториев:

sudo apt install certbot certbot-python-nginx

Первый пакет устанавливает саму программу, а второй добавляет модуль для работы с Nginx. После установки можно его использовать.

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

Мы не будем устанавливать сертификат автоматически, а только сгенерируем его с помощью этой утилиты, а потом добавим вручную в Nginx. Для генерации и подписи сертификата используйте такую команду:

sudo certbot certonly --nginx -d vps.losst.pro -d www.vps.losst.pro

При первом запуске она попросит вас ввести свой адрес электронной почты, на который будут отправляться уведомления об истечении срока пригодности сертификата, а также новости. Потом вас попросят принять лицензионное соглашение, а потом спросят можно ли передать вашу почту партнёру компании:

Далее сертификат SSL создастся и вы получите такое сообщение:

Здесь программа сообщает о том, что файлы сертификата SSL Nginx сохранены в каталоге /etc/letsencrypt/live/vps.losst.pro/. Теперь настройка SSL Nginx.

4. Настройка виртуального хоста для SSL

В папке /etc/letsencrypt/live/vps.losst.pro/ находятся такие файлы сертификатов:

  • cert.pem — файл сертификата, использовать его мы не будем;
  • chain.pem — файл цепочки сертификата, тоже не будем использовать;
  • privkey.pem — приватный ключ сертификата, надо прописать в параметре ssl_certificate_key;
  • fullchain.pem — в нём объединено содержимое cert.pem и chain.pem, надо прописать в параметре ssl_certificate.

Для SSL надо создать отдельный файл виртуального хоста, в котором порт прослушивания будет 443, и будут присутствовать несколько директив настройки SSL:

sudo vi /etc/nginx/conf.d/vps-losst-ru-ssl.conf

server {
listen 443 ssl;
server_name vps.losst.pro www.vps.losst.pro;
access_log /var/log/nginx/vps-losst-ru.access.log main;
root /var/www/vps.losst.pro/public_html/;
index index.html index.htm;
ssl on;
ssl_certificate /etc/letsencrypt/live/vps.losst.pro/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vps.losst.pro/privkey.pem;
location / {
try_files $uri $uri/ =404;
}
}

После создания файла останется перезапустить Nginx:

sudo systemctl restart nginx

Уже на этом этапе всё должно работать.

5. Дополнительная безопасность

Чтобы сделать соединение SSL более безопасным надо отключить небезопасные протоколы и включить только надежные шифры. Для настройки протоколов используйте директиву ssl_protocols. На сегодняшний день самым безопасным считается TLS:

sudo vi /etc/nginx/conf.d/vps-losst-ru-ssl.conf

ssl_protocols TLSv1.2 TLSv1.3;

В примере я разрешаю только TLSv1.2 и TLSv1.3 для хорошей оценки от ssllabs, но в производственной системе возможно стоит разрешить всю линейку протоколов TLS, если вам нужна поддержка устройств не поддерживающих современные методы шифрования. Затем надо добавить шифры, которые мы хотим использовать:

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

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

ssl_prefer_server_ciphers on;

После завершения настроек не забудьте перезапустить Nginx.

6. Проверка

Проверить параметры работы SSL можно с помощью сайта SSLlabs. Просто откройте такую ссылку в браузере, заменив домен сайта на свой:

https://www.ssllabs.com/ssltest/analyze.html?d=vps.losst.pro&latest

Как видите, всё хорошо, и сайт получил оценку A. Сертификат SSL Nginx установлен и работает.

7. Обновление сертификата

Минус сертификатов от Lets Encrypt в том, что они актуальны только 90 дней. За 30 дней до истечения этого срока их рекомендуется перевыпускать. Для этого существует специальная команда:

certbot renew

Она проверяет все сертификаты, установленные в системе и перевыпускает те, что скоро будут просрочены. Чтобы настроить автоматический перевыпуск сертификатов просто добавьте эту команду в crontab:

crontab -e

30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

Эта команда будет выполнятся каждый понедельник в 2:30 и записывать свой вывод в файл /var/log/le-renew.log.

Выводы

В этой небольшой статье мы рассмотрели как выполняется настройка SSL Nginx с Lets Encrypt. Как видите, всё вполне выполнимо, несмотря на определённую сложность. А вы уже используете SSL? Планируете использовать? Напишите в комментариях!

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

В этой статье мы рассмотрим, как настроить бесплатный TLS/SSL сертфикат Let’s Encrypt для сайта на веб-сервере Nginx на Linux CentOS. Покажем, как выпустить сертификат для одного домена (или wildecard SSL-сертификат для всех поддоменов), настроить автопродление сертфикатов.

Содержание:

  • Установка certbot — клиента Let’s Encrypt в Linux
  • Выпуск SSL сертификата для Nginx
  • Установка SSL сертификата Let’s Encrypt на веб-сайт Nginx
  • Бесплатные Wildcard SSL сертификаты Let’s Encrypt для поддоменов
  • Продление сертификатов Let’s Encrypt

Установка certbot — клиента Let’s Encrypt в Linux

Выпускать сертификат Let’s Encrypt мы будем с помощью certbot. Для установка бота, нужно воспользоваться утилитой snapd, если у вас ее нет, установите ее:

# yum install snapd -y

установка snapd в linux

После установки snapd, его нужно добавить, как сервис и создать симлинк для удобства запуска:

# systemctl enable --now snapd.socket
# ln -s /var/lib/snapd/snap /snap

Теперь можно установить certbot:

# sudo snap install --classic certbot

установка certbot в linux через snap Все также для удобства запуска, создадим симлинк:

# ln -s /snap/bin/certbot /usr/bin/certbot

Выпуск SSL сертификата для Nginx

Чтобы выпустить SSL сертификат для сайта, запустите команду:

# certbot certonly --nginx

Утилита проверит конфигурацию nginx и выдаст все сайты на которые можно установить сертификат (утилита получает список сайтов из конфигурации nginx). В процессе бот будет запрашивать у вас данные, email, домены и тд.

генерация сертификата let's encrypt с помощью certbot для nginx в linux

В моем случае домен один и я выбрал его. Если у вас нет проблем с DNS-записями домена и веб-сервером, то SSL сертификат должен выпуститься без ошибок.

Установка SSL сертификата Let’s Encrypt на веб-сайт Nginx

Чтобы SSL сертификат Let’s Encrypt заработал на вашем сайте, нужно использовать следующий конфигурационный файл nginx для вашего домена:

server {
  listen 443 ssl http2;
  server_name lets.build-centos.ru;
  root /var/www/lets.build-centos.ru;
  index index.php index.html index.htm;
  access_log /var/www/build-centos.info/log/ssl-access.log main;
  error_log /var/www/build-centos.info/log/ssl-error.log;
  keepalive_timeout 60;
  ssl_certificate /etc/letsencrypt/live/build-centos.info/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/build-centos.info/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
  add_header Strict-Transport-Security 'max-age=604800';
  location / {
    try_files $uri $uri/ /index.php?$args;
  }
  location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
    access_log off;
    expires max;
  }
  location ~ .php$ {
  try_files $uri =404;
  fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
  fastcgi_index index.php;
  fastcgi_param DOCUMENT_ROOT /var/www/lets.build-centos.ru;
  fastcgi_param SCRIPT_FILENAME /var/www/lets.build-centos.ru/$fastcgi_script_name;
  fastcgi_param PATH_TRANSLATED /var/www/lets.build-centos.ru/$fastcgi_script_name;
  include fastcgi_params;
  fastcgi_param QUERY_STRING $query_string;
  fastcgi_param REQUEST_METHOD $request_method;
  fastcgi_param CONTENT_TYPE $content_type;
  fastcgi_param CONTENT_LENGTH $content_length;
  fastcgi_param HTTPS on;
  fastcgi_intercept_errors on;
  fastcgi_ignore_client_abort off;
  fastcgi_connect_timeout 60;
  fastcgi_send_timeout 180;
  fastcgi_read_timeout 180;
  fastcgi_buffer_size 128k;
  fastcgi_buffers 4 256k;
  fastcgi_busy_buffers_size 256k;
  fastcgi_temp_file_write_size 256k;
  }
    location = /favicon.ico {
    log_not_found off;
    access_log off;
  }
  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }
  location ~ /.ht {
    deny all;
  }
 }

Сохраните конфигурационный файл. Выполняем проверку валидности настроек в конфигурационном файле nginx:

[[email protected] letsencrypt]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите веб-сервер nginx:

# service nginx restart

Теперь, если открыть в браузере сайт по протоколу https, высвечиваться значок защищенного соединения.

Если щёлкнуть по значку сертификата, можно получить полную информацию о нем:

tls сертфикат lets encrypt для сайта на nginx

Для нагруженных PHP сайтов на Nginx можно использоваться связку с php-fpm.

Бесплатные Wildcard SSL сертификаты Let’s Encrypt для поддоменов

Чтобы выпустить wildcard сертификат Let’s Encrypt для всех поддоменов, используется другая команда. Кроме того, в DNS настройках вашего домена нужно создать специальную txt-запись. Чтобы выпустить wildcard сертификат для поддоменов, в директории /opt/letsencrypt/ запустите команду:

# certbot run -a manual -i nginx -d *.lets.build-centos.ru

После запуска команды, вам нужно будет пройти всю процедуру валидации домена, в том числе нужно будет создать специальную TXT запись в DNS.

Не нажимайте “Enter” пока не убедитесь, что запись доступна на глобальных DNS. В панели регистратора домена создайте DNS запись типа TXT с именем _acme-challenge и значением, скопированным из консоли certbot.

letsencrypt-auto certonly wildecard сертфикат для поддоменов

txt запись _acme-challenge для выпуска сертификата для всех поддоменов

Дождитесь обновления информации в DNS, нажмите Enter и wildcard SSL сертификат будет успешно выпущен:

ssl сертификат lets encrypt _acme-challenge

Директория хранения сертификатов и ключей в этом случае отличается от той, в который помещен сертификат для основного домена.

Проверим, работает ли сертификат на поддомене test.build-centos.ru:

wildcard сертфикат lets' encrypt

Как видно из скриншота, сертификат выпущен корректно и действителен для всех поддоменов.

Продление сертификатов Let’s Encrypt

Сертификаты Let’s Encrypt выдаются на 90 дней, рекомендуется продлевать эти сертификаты каждые 60 дней.

Чтобы перевыпустить устаревший SSL сертификат Let’s Encrypt, используется команда:

# /certbot renew --dry-run

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

Cert not yet due for renewal

обновление сертфиката let's ecncrypt

Чтобы продление SSL сертификата Let’s Encrypt выполнялось автоматически, нужно добавить задание в cron:

00 00 * * 6 /certbot renew --dry-run >> /var/log/le-renew.log
15 00 * * 6 /usr/bin/systemctl reload nginx

Данный cron job будет пытаться каждую субботу продлить сертификата и выполнять мягкую перезагрузку веб-сервера nginx. Все действия по перевыпуску SSL сертификатов будут фиксироваться в лог файле /var/log/le-renew.log.

Все логи Let’s Encrypt хранятся в директории /var/log/letsencrypt.

Таким образом, мы установили бесплатный SSL сертификат Let’s Encrypt на свой web-сайт, работающий на Nginx.

Бесплатные сертификаты Let’s Encrypt также можно использовать и для сайтов на IIS.

This is an instruction step by step on how to install Let’s Encrypt SSL with nginx on your Ubuntu 20.04. I will try to describe several useful settings that will make configuration easy and smart. I will use different commands that will be executed due to the Ubuntu version differences.

Those blocks will be highlighted so pay attention to that, but almost everything should be the same.

Prerequisites

  • Ubuntu 20.04 or Ubuntu 20.10
  • 1024 MB or above Ram
  • GB Disk Space
  • vCPU or above CPU
  • Internet connection to download Terraform
  • root privileges

Step 1 — Install LetsEncrypt

Before installing new software, you should always consider updating the list of packages to have your software updated.

#

sudo apt update

Add software repository Ubuntu 20.10

#

sudo apt install software-properties-common

#

sudo add-apt-repository ppa:certbot/certbot

#

sudo apt update

For now, to install LetsEncrypt on your server:

#

sudo apt install letsencrypt

This command will install the letsencrypt dummy package that includes certbot and other utilities for SSL installation.

Step 2 — Configure NginX for Let’s Encrypt SSL

In my configuration examples, I will use the domain name ssl.itsyndicate.org. Do not forget to change it for your needs when you do a copy-paste. Now it’s time for a small life hack that will show you how to optimize the process of adding new certificates to your server.

We will use the default nginx configuration to capture all queries with an unsecured connection to our server, non-SSL, which will target 80 ports.

server {

    listen  80 default_server;

    server_name _;

    location ~ /.well-known/acme-challenge/ {

        allow all;

        root /var/www/letsencrypt;

        try_files $uri =404;

        break;

    }

}

As you can see we are using /.well-known/acme-challenge/ directory to catch all requests for location and /var/www/letsencrypt directory to host acme-challenges. So let’s create a directory after you edited the default Nginx vhost config:

#

sudo mkdir -p /var/www/letsencrypt

Before applying changes to your Nginx settings always check the configuration file:

#

sudo nginx -t

You should get a notification that syntax:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

To apply changes to our new Nginx vhost configuration that is designed to catch all of your Let’s Encrypt certificates challenges do the following:

#

sudo service nginx reload

Step 3 — Request New Let’s Encrypt SSL

Now it is time to request our first Let’s Encrypt SSL certificate for our domain:

#

sudo letsencrypt certonly -a webroot --webroot-path=/var/www/letsencrypt -m mail@example.com --agree-tos -d ssl.itsyndicate.org

Let me describe some important options in our command:

--webroot-path=/var/www/letsencrypt — here we configure a directory where all requests will be stored. We configured NginX to serve this directory.

-m mail@example.com — with this option you are setting up your e-mail address

--agree-tos — this option is needed not to prepare TOS and to accept them. This is some kind of fully automated way to install Let’s Encrypt SSL.

-d ssl.itsyndicate.org — this option is used to issue SSL for the desired domain

After command execution you should see a Congratulations message:

  • If you lose your account credentials, you can recover through e-mails sent to contato@letscloud.io
  • Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/ssl.itsyndicate.org/fullchain.pem. Your cert will expire on 2021-08-01. To obtain a new version of the certificate in the future, simply run Let's Encrypt again.
  • Your account credentials have been saved in your Let's Encrypt configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Let's Encrypt so making regular backups of this folder is ideal.
  • If you like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Step 4 — Configure NginX vhost

Now we have new SSL installed to /etc/letsencrypt/live/ssl.itsyndicate.org/. It’s time to configure our Nginx vhost to serve HTTPS requests for the desired domain. Here is my example:

server {

    server_name itsyndicate.org;

    listen 443 ssl;
    ssl on;

    ssl_certificate     /etc/letsencrypt/live/ssl.itsyndicate.org/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/ssl.itsyndicate.org/privkey.pem;

    root /var/www/html/;

    index index.php index.html index.htm;

    location ~ /.well-known {

        root /var/www/letsencrypt;

        allow all;

    }

}

Let’s test and reload our new Nginx configuration:

#

sudo nginx -t

#

sudo service nginx reload

Step 5 — Configure Let’s Encrypt SSL Auto-Renewal

Let’s Encrypt issues certificates for 90 days. You have an opportunity to reinstall it manually when you got the email that your SSL expires soon, but I think there is a smart way to automate that. We will use daily cron on our Ubuntu server to renew our SSL certificate. Due to the different versions of the letsencrypt package, I will use different renewal commands.

Ubuntu Let’s Encrypt renewal

I use the same file ‘/etc/cron.daily/letsencrypt‘ but with another content:

##

#!/bin/bash

/usr/bin/letsencrypt renew --renew-hook "/etc/init.d/nginx reload"

Step 6 — Test SSL Configuration

When we are done with the configuration it’s time to take a cup of coffee and relax ~~ test our configuration. There are dozens of options to test SSL, but I will use two, the first one is curl:

#

curl -vI https://ssl.itsyndicate.org

Server certificate: subject: CN=ssl.itsyndicate.org start date: May 3 15:44:12 2018 GMT expire date: Aug 1 15:44:12 2018 GMT subjectAltName: host "ssl.itsyndicate.org" matched cert's "ssl.itsyndicate.org" issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3 SSL certificate verifies ok.

The second option is to open your site in Google Chrome and check the SSL certificate in the dev tool under the security.

Conclusion

Now you know how to install Let’s Encrypt SSL on Ubuntu 20,04 to secure your site. It is a very simple, useful and cheap solution to protect your site. If you have any suggestions feel free to contact me or just leave a comment below.

Nginx-LNMP-SSL-000.pngПродолжая тему настройки защищенного соединения для веб-сервера, мы сегодня рассмотрим работу с Nginx. Данный сервер может применяться как самостоятельно, а также в виде фронтенда для Apache, либо вообще, как обратный-прокси. Это позволяет эффективно использовать его для защиты посредством SSL даже тех узлов и сервисов, настроить работу которых по защищенному протоколу может быть проблематично. В данном материале мы будем рассматривать настройку SSL в связке с Let’s Encrypt — бесплатным центром сертификации, сделавшем шифрование доступным действительно каждому.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Мы не будем касаться первоначальной настройки, будем считать, что веб-сервер уже настроен вами и работает. Наш экземпляр был настроен по следующей инструкции и мы в дальнейшем будем придерживаться его конфигурации:

Настраиваем веб-сервер на базе Nginx + PHP-FPM в Debian / Ubuntu Server

В данном примере используются Nginx 1.19.5, PHP 7.3 и MariaDB 10.3 в среде Debian 10, но с небольшими поправками данная статья может использоваться для любого основанного на Debian дистрибутива.

Будем считать, что все конфигурационные файлы сайтов располагаются в /etc/nginx/sites-available, символические ссылки на активные сайты в /etc/nginx/sites-enabled, а шаблоны настроек в /etc/nginx/templates. Если вы используете иное расположение конфигурационных файлов, то это следует учитывать при выполнении описанных ниже действий.

В качестве примера будем рассматривать некий сайт example.org для которого будет настроена минимальная конфигурация следующего вида и установлена популярная CMS WordPress:

server {

listen 80;


server_name example.org;
charset utf-8;
root /var/www/example.org;

index index.php;

access_log /var/log/nginx/example.org_access.log;
error_log /var/log/nginx/example.org_error.log;
include /etc/nginx/templates/php-fpm.conf;
}
server {

listen 80;

server_name www.example.org;
return 301 http://example.org$request_uri;
}

Прежде всего создадим новый шаблон для работы с Let’s Encrypt:

touch /etc/nginx/templates/le.conf

Откроем его и внесем следующий текст:

location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
location = /.well-known/acme-challenge/ {
return 404;
}

И подключим его в конфигурационный файл нашего сайта, добавив в самый конец основной секции server строку:

 include /etc/nginx/templates/le.conf;

Также не забудем создать указанную нами в шаблоне директорию и сделать ее владельцем веб-сервер:

mkdir /var/www/letsencrypt
chown -R www-data:www-data /var/www/letsencrypt

Проверим правильность конфигурации nginx:

nginx -t 

и перезапустим веб-сервер:

nginx -s reload

Затем установим certbot, в современных дистрибутивах достаточно выполнить:

apt install certbot

Более подробную информацию по установке и работе с certbot вы можете получить в нашей статье: Получаем сертификаты Let’s Encrypt при помощи Certbot

Пакет не требует установки и сразу готов к работе. Перед тем как получать сертификаты следует убедиться, что к серверу есть доступ из сети интернет и доменное имя вашего сайта указывает именно на этот сервер. В любом случае сначала лучше произвести пробное получение сертификата:

certbot certonly --dry-run --webroot -w /var/www/letsencrypt -d example.com -d www.example.com

Ключ —dry-run указывает на тестовый режим, —webroot задает используемый плагин, в данном случае работающий с уже имеющимся веб-сервером. Опция -w указывает рабочую директорию, которую мы настроили ранее, а через опцию -d задаются домены и поддомены, для которых мы хотим получить сертификат. Если все прошло успешно, то вы получите лаконичное сообщение:

Nginx-LNMP-SSL-001.pngУбедившись, что все работает нормально, можно получить рабочие сертификаты, для этого еще раз запустим приведенную выше команду, но уже без ключа —dry-run:

certbot certonly --webroot -w /var/www/letsencrypt -d example.com -d www.example.com

Символические ссылки на полученные сертификаты хранятся в /etc/letsencrypt/live, это позволяет использовать один и тот же путь несмотря на постоянное обновление сертификатов раз в 90 дней. Настройки продления для каждого сайта расположены в /etc/letsencrypt/renewal, откроем файл с настройками нашего домена /etc/letsencrypt/renewal/example.com.conf и внесем в секцию [renewalparams] следующую опцию:

[renewalparams]
...
renew_hook = nginx -s reload

Порядок расположения опций значения не имеет, данная настройка задает действие при успешном обновление сертификата, в данном случае это перезапуск веб-сервера nginx.

После получения сертификата настроим наш виртуальный хост на работу с ним. Для этого вернемся к конфигурационному файлу /etc/nginx/sites-available/example.org.conf и создадим в нем новую секцию server, внеся в нее следующие строки:

server {
listen 443 ssl http2;
server_name example.org;

Здесь мы задаем обязательно использовать ssl и протокол HTTP/2 (если такая возможность поддерживается клиентом).

Ниже добавим пути к сертификатам и настройки SSL-сессии:

ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

Для обеспечения режима прямой секретности нам понадобится файл параметров Диффи-Хелмана, создадим его:

openssl dhparam -out /etc/ssl/private/dhparam.pem 2048

В данном случае мы используем криптостойкость ключа в 2048 бит, это минимальный размер для современных условий, для повышения криптостойкости можно использовать ключ длинной 4096 бит. Генерация ключа может занять длительное время в зависимости от вычислительной мощности вашего сервера.

Nginx-LNMP-SSL-003.pngДобавим путь к нему в наш конфигурационный файл:

ssl_dhparam /etc/ssl/private/dhparam.pem;

Теперь один из наиболее важных шагов — указание используемых шифров, это достаточно сложная тема, поэтому воспользуемся для генерации актуального и современного набора алгоритмов шифрования сервисом moz://a SSL Configuration Generator, из предлагаемых им вариантов наиболее оптимальным является вариант Intermediate.

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

Первая строка указывает допустимые протоколы, вторая — шифры и, наконец, третья, включает приоритет клиента в выборе протокола и алгоритма шифрования.

Следующую опцию пока следует закомментировать:

#add_header Strict-Transport-Security "max-age=63072000" always;

Данный заголовок включает режим HSTS, который принудительно включает режим HTTPS для сайта, если он хотя бы единожды был загружен по этому протоколу, до тех пор, пока вы не отладите сайт данную опцию включать не следует.

Следующие строки отвечают за поддержку OCSP Stapling, что позволяет ускорить проверку сертификата клиентом и ускорить загрузку сайта.

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.org/chain.pem;
resolver 8.8.8.8;

Ниже скопируем из основной секции сервер оставшиеся параметры и немного отредактируем их:

charset utf-8;
root /var/www/example.org;
index index.php;

access_log /var/log/nginx/example.org_ssl_access.log;
error_log /var/log/nginx/example.org_ssl_error.log;
include /etc/nginx/templates/php-fpm.conf;
include /etc/nginx/templates/le.conf;
}

Проверим конфигурацию и перезапустим веб-сервер:

nginx -t 
nginx -s reload

После чего убедимся, что сайт работает по защищенному протоколу HTTPS:

Nginx-LNMP-SSL-004.pngПри переводе уже существующего сайта вы можете столкнуться с ошибкой небезопасного включения, когда изображения или скрипты подключены к коде сайта по незащищенному протоколу. Во всех этих случаях такие вхождения следует найти и исправить на использование протокола HTTPS.

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

add_header Strict-Transport-Security "max-age=63072000" always;

Затем приведем к следующему виду секции бывшие ранее основной на 80 порту и отвечавшую за перенаправление запросов с www:

server {
listen 80;
server_name example.org;
return 301 https://$host$request_uri;
}
server {
listen 80;
listen 443 ssl;
server_name www.example.org;
ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;
return 301 https://example.org$request_uri;
}

Которые обеспечат перенаправление всех запросов на HTTPS версию сайта без www.

В исходной инструкции мы настраивали дополнительный серверный блок по умолчанию, который обрабатывал запросы по IP и к несуществующим узлам, блокируя такие соединения. Для этого мы использовали штатную конфигурацию по умолчанию в /etc/nginx/conf.d/default.conf или /etc/nginx/sites-available/default, если вы ставили nginx из стандартного репозитория. Изменим содержимое файла на:

server {
listen 80 default_server;
listen 443 default_server ssl;
server_name _;
ssl_certificate /etc/nginx/nginx.crt;
ssl_certificate_key /etc/nginx/nginx.key;
ssl_reject_handshake on;
return 444;
}

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

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/nginx/nginx.key -out /etc/nginx/nginx.crt

В данном случае мы выпустили самоподписанный сертификат на 10 лет и разместили его по путям указанным в конфиге выше.

Теперь еще раз проверим конфигурацию и перезапустим веб-сервер:

nginx -t 
nginx -s reload

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

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Понравилась статья? Поделить с друзьями:
  • Lenze 9300 vector инструкция на русском
  • Letech leather ultimate cleaner инструкция
  • Lenze 8400 topline c инструкция на русском
  • Letatwin lm 390a инструкция на русском скачать
  • Lenze 8400 stateline c инструкция на русском