SSL TLS SNI - что это такое?
SSL и TLS - это криптографические протоколы, которые обеспечивают аутентификацию и шифрование данных между серверами,
компьютерами и приложениями, работающими по сети (например, клиент, подключающийся к веб-серверу).
SSL является предшественником TLS. На протяжении многих лет были выпущены новые версии протоколов для устранения
уязвимостей и поддержки более надежных, более безопасных наборов шифров и алгоритмов.
SSL был первоначально разработан Netscape и впервые появился на сцене еще в 1995 году с SSL 2.0 (1.0 никогда не публиковался).
Версия 2.0 была быстро заменена SSL 3.0 в 1996 году после обнаружения нескольких уязвимостей.
TLS был введен в 1999 году как новая версия SSL и был основан на SSL 3.0
За прошедшие годы уязвимости были обнаружены и продолжают обнаруживаться в устаревших протоколах SSL (например, POODLE , DROWN ).
SSL 2.0 и 3.0 устарели и их нельзя использовать, остались SSL 1 и TLS
SSL Сертификаты не зависят от протоколов т.е. если вы используете на своем сервере
протокол SSL или протокол TLS вы можете использовать сертификаты SSL
- Сертификаты для использования с SSL и TLS
- Transport Layer Security (TLS) - это просто новое имя для SSL v4
SSL и TLS просто совершают рукопожатие, которое происходит между клиентом и сервером.
Рукопожатие фактически не делает никакого шифрования, оно просто соглашается на общий секрет и тип шифрования,
который будет использоваться.
Что такое Server Name Indication (SNI)
Индикация имени сервера (SNI) позволяет серверу безопасно размещать несколько сертификатов TLS для нескольких сайтов,
все под одним IP-адресом. Он добавляет имя хоста сервера (веб-сайта) в рукопожатие TLS в качестве расширения в сообщении
CLIENT HELLO. Таким образом, сервер знает, какой веб-сайт должен присутствовать при использовании общих IP-адресов.
На HTTP-сайте сервер использует заголовки HTTP HOST для определения того, какой веб-сайт HTTP должен присутствовать.
Однако при использовании TLS (протокол за HTTPS) безопасный сеанс должен быть создан до того, как будет создан сеанс HTTP,
и до тех пор нет заголовка хоста.
Индикация имени сервера (SNI) является расширением протокола TLS. Клиент указывает, какое имя хоста они хотят подключиться
к использованию расширения SNI в рукопожатии TLS. Это позволяет серверу (например, Apache, Nginx или балансировке нагрузки,
таким как HAProxy) выбирать соответствующий закрытый ключ и цепочку сертификатов, которые необходимы для установления
соединения из списка или базы данных при размещении всех сертификатов на одном IP-адресе.
В чем разница между сертификатами SAN SSL и SNI ?
В целом, как SNI, так и многодоменные (также называемые UCC / SAN) сертификаты могут иметь одинаковую функциональность - сокращать количество требуемых IP-адресов. Они достигают этого двумя разными способами. С одной стороны, у нас есть многодоменные сертификаты, использующие один сертификат для защиты нескольких доменов (и их поддоменов) при использовании одного IP. Эти домены будут перечислены в качестве альтернативного имени субъекта или SAN в одном сертификате (в отличие от SNI, где используются три сертификата, по одному для каждого домена). Кроме того, существует ограничение на количество доменов, которые можно включить в один сертификат. Хостинговая компания может также включить другого пользователя для размещения сайта, добавив его в SAN.
В случае каких-либо изменений в сертификате (аннулирование или возобновление сертификата, добавление или удаление SAN), его необходимо заменить и настроить заново для всех доменов. Загрузка больших сертификатов может занять больше времени и может повлиять на скорость загрузки страницы. Домены с одинаковым сертификатом видны и могут создать потенциальный конфликт для конкурентов. Например, компаниям может быть неудобно использовать один и тот же сертификат, если они являются конкурирующими компаниями. Для многодоменных сертификатов, совместно используемых организациями, невозможно выдать SAN (расширенную проверку) и OV (проверку организации). Все эти сложности решает использование SNI для размещения на одном IP нескольких индивидуальных сертификатов клиентов.
Настройка SNI в Apache
Чтобы использовать дополнительные SSL-сертификаты на своем сервере, вам необходимо создать еще один виртуальный хост.
В качестве наилучшей практики мы рекомендуем сделать резервную копию существующего файла .conf перед продолжением.
Вы можете создать новый виртуальный хост в существующем файле .conf или создать новый .conf-файл для нового виртуального хоста.
Если вы создаете новый .conf-файл, добавьте следующую строку в существующий файл .conf:
Include my_other_site.conf
Затем в директиве NameVirtualHost укажите общедоступный IP-адрес вашего сервера, *: 443 или другой порт, который вы используете для SSL (см. Пример ниже).
Затем укажите SSLCertificateFile, SSLCertificateKeyFile и SSLCertificateChainFile в расположение файлов сертификатов для каждого веб-сайта, как показано ниже:
<NameVirtualHost *:443>
<VirtualHost *:443>
ServerName www.yoursite.com
DocumentRoot /var/www/site
SSLEngine on
SSLCertificateFile /path/to/www_yoursite_com.crt
SSLCertificateKeyFile /path/to/www_yoursite_com.key
SSLCertificateChainFile /path/to/DigiCertCA.crt
</Virtual Host>
<VirtualHost *:443>
ServerName www.yoursite2.com
DocumentRoot /var/www/site2
SSLEngine on
SSLCertificateFile /path/to/www_yoursite2_com.crt
SSLCertificateKeyFile /path/to/www_yoursite2_com.key
SSLCertificateChainFile /path/to/DigiCertCA.crt
</Virtual Host>
Если у вас есть сертификат Wildcard или UC, все веб-сайты, использующие один и тот же сертификат, должны ссылаться на один и тот же IP-адрес
в IP-адресе VirtualHost: 443, как в приведенном ниже примере:
<VirtualHost 192.168.1.1:443>
ServerName www.domain.com
DocumentRoot /var/www/
SSLEngine on
SSLCertificateFile /path/to/your_domain_name.crt
SSLCertificateKeyFile /path/to/your_private.key
SSLCertificateChainFile /path/to/DigiCertCA.crt
</Virtual Host>
<VirtualHost 192.168.1.1:443>
ServerName site2.domain.com
DocumentRoot /var/www/site2
SSLEngine on
SSLCertificateFile /path/to/your_domain_name.crt
SSLCertificateKeyFile /path/to/your_private.key
SSLCertificateChainFile /path/to/DigiCertCA.crt
</Virtual Host>
Перезапустите Apache и зайдите на сайт https из браузера, который поддерживает SNI. Если вы правильно настроили его, вы
получите доступ к сайту без каких-либо предупреждений или проблем. Вы можете добавить столько веб-сайтов или SSL-сертификатов,
сколько вам нужно, используя вышеупомянутый процесс.
|