Меню Рубрики

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

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

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

Что такое Let’s Encrypt

Если вкратце, то Let’s Encrypt — это новый центр сертификации (CA), предоставляющий бесплатные и автоматизированные SSL/. На данный момент Let’s Encrypt поддерживается большинством современных браузеров, в том числе IE и даже старыми операционными системами такими как Windows Vista. По сути, все, что вам нужно знать — он бесплатный и поддерживает автоматическое обновление.

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

Установим клиент с помощью команды:

Если git не установлен, то сначала нужно установить его, а потом уже устанавливает клиент для Let’s Encrypt (далее certbot). Файлы будут загружены в каталог /opt/letsencrypt.

Создаем каталог /.//

Данный каталог позволяет серверу Let’s Encrypt убедиться, что ваш сайт пытается получить бесплатный . Каталог нужно создавать в корне . Например, если корень у вас /var/www/shop, то в нем и нужно создать нужный каталог:

cd /var/www/shop
mkdir.
mkdir. /
find. -type d -exec chown : <> \;

Создаем файл конфигурации

Теперь нужно создать файл конфигурации для вашего домена. Если ваш домен называется example.com, то файл будет называться /etc/letsencrypt/configs/example.com.conf. Содержимое файла:

# ваш домен (хотя и можно создать один сертификат для нескольких доменов
# мы рекомендуем создавать отдельные сертификаты и, следовательно, отдельные
# файлы конфигурации для разных доменов)
domains = example.com

# размер ключа
= 2048 # или 4096

# адрес, на который будут приходить напоминание об обновлении
email =

# отключаем ncurses UI
text = True

# задаем путь к каталогу. (см. выше)
authenticator = webroot
= /var/www/shop/

Запрашиваем сертификат

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

cd /opt/letsencrypt
$ ./ -config /etc/letsencrypt/configs/example.com.conf certonly

Рис. 1. Сертификат сгенерирован

Вывод последней команды изображен на рисунке выше. Как видите, файлы сертификата помещены в каталог /etc/letsencrypt/live/ /. Поскольку скриншот сделан в процессе настройки реального узла, то его адрес затерт (NDA есть NDA). В результате было сгенерировано два файла — файл сертификата fullchain.pem и файл ключа privkey.pem.

Настройка nginx

Итак, сертификат уже есть, осталось дело за малым — настроить . Переходим к нужному файлу конфигурации виртуального узла и приводим его к виду:

server <
listen 4 43 ssl default_server ;
listen 80 ;
server_name ;

ssl_certificate /etc/letsencrypt/live/ /fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ /privkey.pem;

location /. / <
root /var/www/ ;
>
….
# Другие параметры
>

Обратите внимание на следующие моменты:

  1. Данный виртуальный узел является сервером по умолчанию (default_server). Если в другом конфиге уже есть default_server, то произойдет конфликт и придется выбрать сервер по умолчанию.
  2. Мы слушаем порты 443 и 80. Порт 80 пока не убирайте — он пригодится, если движок сайта пока еще не готов к SSL.
  3. Директивы ssl-* задают путь к сертификату и ключу сертификата. Проверьте правильность пути.
  4. Каталоги в директивах root должны быть одинаковы.

Заставим nginx перечитать конфиг:

sudo nginx -t && sudo nginx -s reload

Готовим движок к SSL

Мало настроить SSL на , нужно движку сайта указать, что он работает по SSL, иначе он будет генерировать ссылки http://, а не https://. Здесь все зависит от движка и более подробные инструкции вы можете получить в документации по нему. Так, в Magento нужно открыть раздел Система, Конфигурация, Общие, Интернет и на вкладке Безопасное соединение указать базовый URL, который бы начинался с https:// и включить параметры Использовать защищенные URL в. пользовательской части и Использовать защищенные URL в. панели администрирования. На рис. 2 показано, что второй параметр временно выключен — пока администратор не убедиться, что все работает правильно — чтобы у него была возможность зайти по http.

Настройка редиректа

Остались последние штрихи, например, настройка обязательного редиректа с http на https (если вы решите оставить listen 80 в настройках nginx). Для этого в файл .htaccess добавьте строки:

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

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

cd /opt/letsencrypt/
./ -config /etc/letsencrypt/configs/ .conf certonly

if [ $? -ne 0 ]
then
ERRORLOG=`tail /var/log/letsencrypt/letsencrypt.log`
echo -e «The Let’s Encrypt cert has not been renewed!\n\n »
$ERRORLOG
else
nginx -s reload
fi

В расписание cron нужно добавить строку:

0 0 1 JAN,MAR,MAY,JUL,SEP,NOV * /path/to/ .sh

И не забудьте создать каталог /var/log/letsencrypt/ (если он еще не создан) и изменить соответствующим образом права доступа (пользователь, от имени которого выполняется обновление сертификата должен иметь право писать в этот каталог).

Вот теперь действительно все. Мы рассмотрели все аспекты, связанные с «внедрением» на сервер — от его запроса до настройки движка сайта.

источник

Установка 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):

источник

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

В зависимости от того, какие данные предоставил центр сертификации клиенту, установку можно разбить на несколько пунктов:

  1. У вас есть приватный ключ, а также цепочка сертификатов (сам SSL сертификат + промежуточный + корневой сертификаты). Обычно это 2 файла с расширениями key (приватный ключ) и crt (цепочка сертификатов)
  2. У вас есть приватный ключ, сам SSL сертификат, а также цепочка сертификатов (промежуточный+корневой). Обычно это файлы с расширениями key (приватный ключ) и 2 файла с расширением crt (сертификат и цепочка сертификатов соответственно)
  3. У вас есть приватный ключ, сам SSL сертификат, а также промежуточный и корневой сертификат т.е. 4 элемента по отдельности. Обычно это файлы с расширениями key и 3 файла с расширением crt.
  4. У вас есть сертификат в другом формате, например pfx

Помимо этого может быть файл с запросом на сертификат, обычно в формате csr
Приступим к разбору каждого пункта

У вас есть приватный ключ, а также цепочка сертификатов

Подготовка к установке

Наилучший вариант т.к. потребуется только указать эти данные в конфигурации nginx и перезапустить его.

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

Будем считать, что приватный ключ имеет имя private.key, а цепочка сертификатов CAbundle.crt

Создадим директорию ssl в nginx:

Далее скопируйте файл приватного ключа и цепочку сертификатов в директорию /etc/nginx/ssl/

После этого откройте файл конфигурации виртуального хоста nginx в редакторе и измените значения строк ssl_certificate и ssl_certificate_key

Например (вариант при использовании LetsEncrypt:

Не забудьте про точку с запятой (;) в конце каждой из строк
Сохраните файл и перезагрузите nginx

У вас есть приватный ключ, сам SSL сертификат, а также цепочка сертификатов

Данный вариант отличается от первого только тем, что нужно добавить цепочку сертификатов в сам SSL сертификат.

Будем считать, что SSL сертификат имеет имя site_ru.crt, а цепочка сертификатов CA.crt

В таком случае объединение файлов можно выполнить так:

Перейдем в директорию, где расположены данные файлы (например /root/site_certs/)

Далее выполните действия по установке сертификата: Установка SSL сертификата на nginx

У вас есть приватный ключ, сам SSL сертификат, а также промежуточный и корневой сертификат

Данный вариант отличается от первого только тем, что нужно объединить все сертификаты (SSL сертификат, промежуточный и корневой) в одну цепочку.

Будем считать, что SSL сертификат имеет имя site_ru.crt, корневой сертификат CAroot.crt, промежуточный сертификат CAintermediate.crt

В таком случае объединение файлов можно выполнить так:

Перейдем в директорию, где расположены данные файлы (например /root/site_certs/)

Далее выполните действия по установке сертификата: Установка SSL сертификата на nginx

У вас есть сертификат в другом формате, например pfx

Данный вариант отличается от первого только тем, что цепочка сертификатов и приватный ключ уже содержатся в pfx сертификате и осталось только конвертировать его.

Будем считать, что SSL сертификат имеет имя cert.pfx

В таком случае получить необходимые файлы можно выполнить так:

Перейдем в директорию, где расположен данный файл (например /root/site_certs/)

Получим цепочку сертификатов

Далее выполните действия по установке сертификата

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

источник

Записки 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 закончена, но приведенная нами конфигурация не является истиной в последней инстанции, технологии развиваются и то, что еще сегодня считалось отличным, завтра может оказаться недостаточным. Поэтому советуем время от времени изучать последние рекомендации и обновлять конфигурацию собственного сервера.

источник

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