Как настроить несколько 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).