Меню Рубрики

Установка ssl сертификата nginx debian

Установка ssl сертификата nginx debian

8 (495) 784-61-39
sales@cloudlite.ru

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

КАК УСТАНОВИТЬ SSL-СЕРТИФИКАТ НА NGINX (LINUX)

Когда вы сгенерировали CSR-запрос и приобрели SSL-сертификат, воспользуйтесь этой инструкцией по установке сертификата на веб-сервер Nginx под управлением Linux: Ubuntu, Debian или CentOS.

После заказа SSL-сертификата файлы для его установки отразятся в панели управления (меню SSL): .CA — файл сертификата Центра Сертификации (Certificate Authority). .CRT — файл сертификата вашего веб-сайта.

Как загрузить нужные файла на веб-сервер

Прежде всего загрузите файлы .ca и .crt на веб-сервер. При отсутствии графического окружения рабочего стола на сервере загрузка файлов может осуществиться на другой компьютер. Впоследствии их можно будет перенести.

Внимание: предполагается, что нужная для применения пара закрытый/открытый ключ была создана на том же веб-сервере, куда будет перенесен приобретенный сертификат. При создании ключей на другом сервере следует также перенести файл закрытого ключа .key на ваш веб-сервер (аналогично описанной ниже процедуре копирования файлов сертификатов).

Как переносить сертификаты с компьютера Linux/Mac OS:

Проще всего – при помощи опции SCP, встроенной в возможность терминала вашего компьютера:

Скачайте файлы .CA и .CRT на локальный компьютер. Откройте терминал и папку с сохраненными сертификатами (напр., Downloads):

Скопируйте сертификаты вашего сайта и Центра Сертификации на веб-сервер:

scp mydomain.ru_crt.crt mydomain.ru_ca.crt user@1.1.1.1:/etc/ssl

scp — команда для копирования файлов

mydomain.ru_crt.crt — имя загруженного из панели файла сертификата вашего веб-сайта

mydomain.ru_ca.crt — имя загруженного из панели файла сертификата Центра Авторизации

user — имя вашего пользователя для подключения к серверу через ssh (часто используется root)

1.1.1.1 — IP-адрес вашего веб-сервера

/etc/ssl — директория на удаленном сервере, куда следует сохранить загружаемые файлы.

Как переносить сертификаты с компьютера Windows:

Скачайте, установите и включите программу WinSCP. В открывшемся окне наберите данные для подключения к вашему серверу по SSH. Слева в окне отразятся файлы на локальном компьютере, справа — на подключенном удаленном сервере. Выберите или создайте директорию, куда нужно сохранить сертификаты, в правой части окна. Перетащите файлы .CA и .CRT в эту директорию из левой части окна.

Внимание: можно перенести файл закрытого ключа (.key) для удобства в ту же директорию, куда вы скопировали файлы сертификатов. Если вы не делаете этого, просто запомните путь до этого файла и потом укажите его в файле конфигурации Apache вместо пути, рассмотренном в нашем примере.

Если закрытый ключ .key сгенерирован прямо на сервере, то для его копирования в другую директорию подойдет команда:

cp /home/root/private.key /etc/ssl/private.key

/home/root/ — путь до файла ключа

private.key — имя файла ключа

/etc/ssl/private.key — путь, по которому необходимо скопировать файл ключа

Вы можете удалить файл ключа из старого расположения такой командой:

Как настроить веб-сервер Nginx на применение SSL-сертификата

После копирования файлов сертификата сайта и Центра Сертификации вы должны отредактировать параметры вашего веб-сервера Nginx. Подключитесь к вашему серверу по SSH от имени пользователя root и выполните такие действия:

1. Объедините файлы сертификата Центра Сертификации (.CA) и сертификата вашего веб-сайта (.CRT) в один документ:

cat /etc/ssl/mydomain.ru_crt.crt /etc/ssl/mydomain.ru_ca.crt >> mydomain.crt

2. Откройте файл конфигурации сайта, для которого устанавливается SSL-сертификат. Если, к примеру, параметры веб-сайта хранятся в файле /etc/nginx/sites-enabled/default:

Внимание: На Ubuntu/Debian файлы параметров сайтов Nginx обычно располагаются в директории /etc/nginx/sites-enabled/ . На CentOS стандартное расположение — /etc/nginx/conf.d/

Для поиска интересующей конфигурации подойдет команда ls /директория/конфигураций (напр. ls /etc/nginx/sites-enabled), отображающая полный список файлов в нужной директории.

Теперь с помощью команды nano можно открыть определенный файл (напр. nano /etc/nginx/sites-enabled/default). Чтобы проверить, что открытый файл является конфигурацией вашего сайта, найдите в нем строку server_name. Ее значение должно соответствовать домену, для которого вы устанавливаете SSL-сертификат (напр. www.mydomain.ru)

Внимание для CentOS: если на сервере не установлен редактор nano, используйте такую команду для его установки:

используйте такую команду для его установки:

Затем добавьте приведенные ниже параметры в открытый файл конфигурации:

listen 443 ssl;
ssl_certificate /etc/ssl/mydomain.crt;
ssl_certificate_key /etc/ssl/private.key;

/etc/ssl/mydomain.crt — путь до файла сертификатов вашего сайта и центра сертификации

/etc/ssl/private.key — путь к файлу вашего закрытого ключа

Внимание: если вы хотите, чтобы после установки SSL-сертификата ваш сайт был доступен только по безопасному протоколу https (порт 443), отредактируйте файл его конфигурации по аналогии с Примером 1. Если же нужно, чтобы сайт также оставался по-прежнему доступен по незащищенному протоколу http (порт 80) – см. Пример 2

(изменения выделены жирным шрифтом).

server <
listen 443 ssl default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name www.mydomain.ru;
ssl_certificate /etc/ssl/mydomain.crt;
ssl_certificate_key /etc/ssl/private.key;
location / <
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
>
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location

Читайте также:  Установка автостекол на маршал

\.php$ <
# include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
#>
# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location

server <
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl;
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don’t use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name www.mydomain.ru;
ssl_certificate /etc/ssl/mydomain.crt;
ssl_certificate_key /etc/ssl/private.key;
location / <
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
>
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location

\.php$ <
# include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
#>
# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location

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

Если на сервере настроен файрвол iptables, нужно разрешить входящие подключения по протоколу https (порт 443) для вашего файрвола. Следуйте документации к вашей ОС, т.к. в разных дистрибутивах Linux работа с iptables осуществляется различно. Несколько примеров:

iptables -A INPUT -p tcp -m state —state NEW -m tcp —dport 443 -j ACCEPT

iptables -A INPUT -p tcp -m tcp —dport 443 -j ACCEPT

источник

Установка SSL-сертификата на Nginx (Linux)

После генерации CSR-запроса и заказа SSL-сертификата через панель управления 1cloud следует установить полученные сертификаты .CRT и .CA на сервер. Данное пошаговое руководство поможет вам установить приобретенный SSL-сертификат на веб-сервер Nginx под управлением Linux: Ubuntu, Debian или CentOS.

После получения SSL-сертификата файлы для его установки будут отображены в панели управления 1cloud (меню SSL):
.CA — файл сертификата Центра Сертификации (Certificate Authority).
.CRT — файл сертификата вашего веб-сайта.

Загрузка необходимых файлов на веб-сервер

Лучшие цены на SSL-сертификаты (от 550 руб.)

  • Все доверенные центры сертификации
  • Большой выбор сертификатов
  • Пошаговые инструкции по выпуску и установке

Сначала следует загрузить файлы .ca и .crt на веб-сервер из панели 1cloud. Если ваш сервер не имеет графического окружения рабочего стола, вы можете загрузить эти файлы на другой компьютер, а затем перенести их одним из описанных ниже способов.

Примечание: данный пример подразумевает, что необходимая для работы пара закрытый/открытый ключ была сгенерирована на том же веб-сервере, на который вы будете переносить приобретенный сертификат. Если вы создавали ключи на другой машине, вам необходимо также перенести файл закрытого ключа .key на ваш веб-сервер по аналогии с описанной ниже процедурой копирования файлов сертификатов.

Перенос сертификатов с компьютера Linux/Mac OS:

Самый простой способ загрузки сертификатов на сервер — опция SCP, встроенная в возможность терминала вашего компьютера:

  1. Скачайте файлы .CA и .CRT из панели управления 1cloud на локальный компьютер.
  2. Откройте терминал и перейдите в папку, в которую вы сохранили сертификаты (напр., Downloads):
    cd

/Downloads
Скопируйте сертификаты вашего сайта и Центра Сертификации на веб-сервер:
scp mydomain.ru_crt.crt mydomain.ru_ca.crt user@111.125.212.121:/etc/ssl
Где:
scp — команда копирования файлов
mydomain.ru_crt.crt — имя загруженного из панели файла сертификата вашего веб-сайта
mydomain.ru_ca.crt — имя загруженного из панели файла сертификата Центра Авторизации
user — имя вашего пользователя для подключения к серверу через ssh (часто используется root)
111.125.212.121 — IP-адрес вашего веб-сервера
/etc/ssl — директория на удаленном сервере, в которую в хотите сохранить загружаемые файлы.

Перенос сертификатов с компьютера Windows:

  1. Установите программу WinSCP. Скачать ее можно здесь.
  2. Запустите WinSCP. В открывшемся окне введите данные, которые вы используете для подключени я к вашему серверу по SSH.
    В левой части окна программы отображаются файлы на локальном компьютере, в правой — на подключенном удаленном сервере. Выберите или создайте директорию, в которую вы хотите сохранить сертификаты, в правой части окна. Перетащите файлы .CA и .CRT в эту директорию из левой части окна.

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

Если закрытый ключ .key был сгенерирован непосредственно на сервере, то для его копирования в другую директорию вы можете использовать команду:
cp /home/root/private.key /etc/ssl/private.key
Где:
cp — команда копирования
/home/root/ — путь до файла ключа
private.key — имя файла ключа
/etc/ssl/private.key — путь, по которому необходимо скопировать файл ключа

Удалить файл ключа из старого расположения вы можете с помощью команды:
rm /home/root/private.key
(синтаксис команды аналогичен предыдущему примеру)

Настройка веб-сервера Nginx на использование SSL-сертификата

После копирования файлов сертификата сайта и Центра Сертификации необходимо отредактировать параметры вашего веб-сервера Nginx. Для этого подключитесь к вашему серверу по SSH от имени пользователя root и выполните следующие операции:

  1. Объедените файлы сертификата Центра Сертификации (.CA) и сертификата вашего веб-сайта (.CRT) в один документ:
    cat /etc/ssl/mydomain.ru_crt.crt /etc/ssl/mydomain.ru_ca.crt >> mydomain.crt
  2. Откройте файл конфигурации сайта, для которого вы хотите установить SSL-сертификат.
    Например, если параметры веб-сайта хранятся в файле /etc/nginx/sites-enabled/default:
    nano /etc/nginx/sites-enabled/default
    Примечание: На Ubuntu/Debian файлы параметров сайтов Nginx как правило находятся в директории /etc/nginx/sites-enabled/ . На CentOS стандартное расположение — /etc/nginx/conf.d/
    Для поиска нужной конфигурации вы можете использовать команду ls /директория/конфигураций (напр. ls /etc/nginx/sites-enabled), которая отображает полный список файлов в указанной директории.
    Затем с помощью команды nano вы можете открыть определенный файл (напр. nano /etc/nginx/sites-enabled/default). Проверить, что открытый файл действительно является конфигурацией вашего сайта можно, найдя в нем строку server_name. Ее значение должно соответствовать домену, для которого вы устанавливаете SSL-сертификат (напр. www.mydomain.ru)

Примечание для CentOS: если редактор nano не установлен на вашем сервере, вы можете установить его с помощью команды:
yum install nano
Добавьте приведенные ниже параметры в открытый файл конфигурации:
listen 443 ssl;
ssl_certificate /etc/ssl/mydomain.crt;
ssl_certificate_key /etc/ssl/private.key;
Где:
/etc/ssl/mydomain.crt — путь до файла сертификатов вашего сайта и центра сертификации
/etc/ssl/private.key — путь к файлу вашего закрытого ключа

Примечание: если вы хотите, чтобы после установки SSL-сертификата ваш сайт был доступен только по безопасному протоколу https (порт 443), отредактируйте файл его конфигурации по аналогии с приведенным ниже Примером 1. Если же вы хотите, чтобы сайт также оставался по-прежнему доступен по незащищенному протоколу http (порт 80), воспользуйтесь Примером 2.
Вносимые изменения выделены жирным шрифтом.

Пример 1 (только HTTPS):

server <
listen 443 ssl default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name www.mydomain.ru;
ssl_certificate /etc/ssl/mydomain.crt;
ssl_certificate_key /etc/ssl/private.key;

location / <
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
>
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location

\.php$ <
# include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
#>
# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location

Пример 2 (HTTPS + HTTP):

источник

Записки IT специалиста

Технический блог специалистов ООО»Интерфейс»

Настраиваем Nginx для работы по HTTPS (SSL) с сертификатами Let’s Encrypt

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

Мы не будем касаться первоначальной настройки, будем считать, что веб-сервер уже настроен вами и работает. Наш экземпляр был настроен по инструкции Настраиваем веб-сервер на базе Nginx + PHP-FPM в Debian / Ubuntu Server и мы в дальнейшем будем придерживаться его конфигурации. В данном примере используются Nginx 1.17, PHP 7.3 и MariaDB 10.3 в среде Debian 10, но с небольшими поправками данная статья может использоваться для любого основанного на Debian дистрибутива.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Первая опция предписывает использовать ssl и протокол HTTP/2 (если такая возможность поддерживается клиентом), а вот следующее за ним условие требует пояснений. Работа с HTTPS устроена таким образом, что если у сервера был запрошен по защищенному протоколу сайт, не имеющий сертификата, либо вообще произошло обращение по IP-адресу, то в ответ будет показан тот защищенный сайт, который находится первым в конфигурации. Во многих случаях такое поведение будет неожиданным для пользователя и его следует избегать. В нашем случае, при запросе узла отличного от указанного в конфиге сервер оборвет соединение без отправки данных (ошибка 444 в Nginx).

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

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

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

Добавим путь к нему в наш конфигурационный файл:

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

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

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

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

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

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

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

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

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

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

Затем приведем к следующему виду секции:

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

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

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

источник

Добавить комментарий