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

Как настроить несколько SSL-сертификатов на одном IP-адресе с помощью Apache в 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.

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

sudo apt-get install apache2

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

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

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

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

Шаг второй — активируйте модуль SSL

Следующим шагом будет включение SSL на дроплете.

sudo a2enmod ssl

Затем перезапустите Apache.

sudo service apache2 restart

Шаг третий: создайте самоподписанный SSL-сертификат

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

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/example.com/apache.key –out /etc/apache2/ssl/example.com/apache.crt

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

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

Самая важная строка - \Общее имя\. Введите здесь официальное доменное имя или, если у вас его еще нет, 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

Затем выполните те же действия для второго домена (example.org):

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/example.org/apache.key -out /etc/apache2/ssl/example.org/apache.crt

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

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

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

sudo nano /etc/apache2/sites-available/example.com
sudo nano /etc/apache2/sites-available/example.org

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

Кроме того, эта конфигурация включает важное изменение, которое упрощает использование нескольких SSL-сертификатов. Принимая во внимание, что конфигурация SSL по умолчанию имеет следующую строку, указывающую сертификат как сертификат по умолчанию для сервера,

<VirtualHost _default_:443>

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

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

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName example.com
        DocumentRoot /var/www

</VirtualHost>


<IfModule mod_ssl.c>
<VirtualHost *:443>

        ServerAdmin webmaster@localhost
        ServerName example.com
        DocumentRoot /var/www

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        #   A self-signed (snakeoil) certificate can be created by installing
        #   the ssl-cert package. See
        #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.
        SSLCertificateFile /etc/apache2/ssl/example.com/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/example.com/apache.key
</VirtualHost>

</IfModule>

В этих файлах конфигурации есть несколько строк, которые необходимо настроить.

  • ServerAdmin: это просто адрес электронной почты вашего веб-мастера
  • ServerName: это ваше доменное имя. Убедитесь, что вы пишете его без префикса www.
  • DocumentRoot: это каталог, в котором хранится информация о вашем сайте. В настоящее время он указывает на каталог apache по умолчанию. Вероятно, у вас будут разные корни серверов для двух разных виртуальных хостов.
  • SSLCertificateFile: эта директива указывает на расположение файла сертификата. Сертификат для каждого сайта хранится в каталоге, который мы создали ранее в этом руководстве.
  • SSLCertificateKeyFile : эта директива указывает на расположение ключа сертификата. Ключ сертификата для каждого сайта хранится в каталоге, который мы создали ранее в этом руководстве.

Настройте конфигурации обоих доменов. У нас еще есть шаг до того, как отдельные SSL-сертификаты будут работать на обоих серверах.

Шаг пятый — отредактируйте файл ports.conf.

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

sudo nano /etc/apache2/ports.conf 
NameVirtualHost *:80
NameVirtualHost *:443

Listen 80

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to 
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

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

sudo a2ensite example.com
sudo a2ensite example.org

(Вы можете деактивировать виртуальные хосты с помощью команды: sudo a2dissite example.com)

Когда все виртуальные хосты включены, перезапустите apache.

sudo service apache2 restart

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

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