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

Как настроить несколько SSL-сертификатов на один IP-адрес с помощью Nginx в Ubuntu 12.04


Статус: устарело

В этой статье рассматривается версия Ubuntu, которая больше не поддерживается. Если вы в настоящее время используете сервер под управлением Ubuntu 12.04, мы настоятельно рекомендуем обновить или перейти на поддерживаемую версию Ubuntu:

  • Обновите Ubuntu до версии 14.04.
  • Обновление Ubuntu 14.04 до Ubuntu 16.04
  • Перенесите данные сервера в поддерживаемую версию.

Причина:

См. вместо этого:

Вы можете разместить несколько SSL-сертификатов на одном IP-адресе, используя идентификацию имени сервера (SNI).

О SNI

Хотя размещение нескольких сайтов на одном виртуальном частном сервере не является проблемой при использовании виртуальных хостов, предоставление отдельных SSL-сертификатов для каждого сайта традиционно требовало отдельных IP-адресов. Недавно этот процесс был упрощен за счет использования индикации имени сервера (SNI), которая отправляет посетителю сайта сертификат, соответствующий запрошенному имени сервера.

Примечание:

SNI может использоваться только для обслуживания нескольких SSL-сайтов с вашего веб-сервера и вряд ли вообще будет работать на других демонах, таких как почтовые серверы и т. д. Также существует небольшой процент старых веб-браузеров, которые все еще могут выдавать ошибки сертификата. В Википедии есть обновленный список программного обеспечения, которое поддерживает и не поддерживает это расширение TLS.

Настраивать

SNI необходимо иметь зарегистрированные доменные имена для обслуживания сертификатов.

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

Nginx уже должен быть установлен и запущен на вашем VPS.

Если это не так, вы можете скачать его с помощью этой команды:

sudo apt-get install nginx

Вы можете убедиться, что SNI включен на вашем сервере:

 nginx -V

После отображения версии nginx вы должны увидеть строку:

 TLS SNI support enabled

Шаг первый — создайте каталоги сертификатов SSL

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

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

mkdir -p /etc/nginx/ssl/example.com
mkdir -p /etc/nginx/ssl/example.org

Шаг второй: создайте ключ сервера и запрос на подпись сертификата.

Сначала создайте SSL-сертификат для example.com.

Перейдите в нужный каталог:

cd /etc/nginx/ssl/example.com

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

sudo openssl genrsa -des3 -out server.key 1024

Затем создайте запрос на подпись сертификата:

sudo openssl req -new -key server.key -out server.csr

Эта команда предложит терминалу отобразить список полей, которые необходимо заполнить.

Самая важная строка - \Общее имя\. Введите здесь официальное доменное имя или, если у вас его еще нет, IP-адрес вашего сайта. Оставьте контрольный пароль и необязательное название компании пустыми.

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:NYC
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Awesome Inc
Organizational Unit Name (eg, section) []:Dept of Merriment
Common Name (e.g. server FQDN or YOUR name) []:example.com                  
Email Address []:webmaster@awesomeinc.com

Шаг третий — удалите парольную фразу

Мы почти закончили создание сертификата. Тем не менее, это поможет нам удалить парольную фразу. Хотя наличие парольной фразы обеспечивает повышенную безопасность, проблема начинается при попытке перезагрузить nginx. В случае сбоя nginx или необходимости перезагрузки вам всегда придется повторно вводить парольную фразу, чтобы снова подключить весь веб-сервер.

Используйте эту команду, чтобы удалить пароль:

sudo cp server.key server.key.org
sudo openssl rsa -in server.key.org -out server.key

Шаг четвертый — подпишите свой SSL-сертификат

Ваш сертификат почти готов, и вам просто нужно подписать его.

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

sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Теперь вы закончили создание сертификата для вашего первого хоста.

Чтобы создать второй сертификат, перейдите во второй каталог:

cd /etc/nginx/ssl/example.org

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

Шаг пятый — создайте виртуальные хосты

Как только вы сохраните и подготовите сертификаты, вы можете добавить свою информацию в файл виртуального хоста.

Хотя это и не требуется, мы можем создать два файла виртуальных хостов для хранения виртуальных хостов в отдельных файлах.

sudo nano /etc/nginx/sites-available/example.com

Затем каждый файл будет содержать конфигурацию виртуального хоста (не забудьте отредактировать строки server_name, ssl_certificate и ssl_certificate_key, чтобы они соответствовали вашим данным):

 server {

        listen   443;
        server_name example.com;

        root /usr/share/nginx/www;
        index index.html index.htm;

        ssl on;
        ssl_certificate /etc/nginx/ssl/example.com/server.crt;
        ssl_certificate_key /etc/nginx/ssl/example.com/server.key;
}

Затем вы можете ввести соответствующую конфигурацию в другой файл виртуального хоста.

sudo nano /etc/nginx/sites-available/example.org
 server {

        listen   443;
        server_name example.org;

        root /usr/share/nginx/www;
        index index.html index.htm;

        ssl on;
        ssl_certificate /etc/nginx/ssl/example.org/server.crt;
        ssl_certificate_key /etc/nginx/ssl/example.org/server.key;
}

Шаг шестой — активируйте виртуальные хосты

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

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo ln -s /etc/nginx/sites-available/example.org /etc/nginx/sites-enabled/example.org

Установив все виртуальные хосты, перезапустите nginx.

sudo service nginx restart

Теперь у вас должен быть доступ к обоим сайтам, каждый со своим собственным доменным именем и SSL-сертификатом.

Вы можете просмотреть сайты как с подписанными SSL-сертификатами, так и без них, введя только домен (например, example.com или example.org) или домен с https префикс (https://example.com или https://example.org).