Размещение нескольких сайтов с поддержкой ssl на одной сетевой карте с помощью ip-алиасинг

Testing

Try out your new setup:

openssl s_client -servername mail.sample.com -connect mail.sample.com:pop3s

You should see something like this:

CONNECTED(00000003)
depth=2 /O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
 0 s:/CN=mail.example.com
   i:/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
 1 s:/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
   i:/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
 2 s:/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
   i:/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIE1DCCArygAwIBAgIDAMBPMA0GCSqGSIb3DQEBBAUAMFQxFDASBgNVBAoTC0NB
Y2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV
BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwHhcNMTAxMjIwMTM1NDQ1WhcNMTIxMjE5
MTM1NDQ1WjAmMSQwIgYDjksadnjkasndjksandjksandjksandj5YXJlYS5vcmcw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3jOX3FC8wVqnb2r65Sfvk
cYUpJhlbhCfqPdN41c3WS0y1Jwwum1q4oMAJvdRnD5TMff1+fqTFy3lS1sYxIXiD
kBRo478eNqzXHMpBOqbvKjYp/UZgWUNA9ebI1nQtwd7rnjmm/GrtyItjahCsgzDS
qPAie+mXYzuT49ZoG+Glg7/R/jDcLMcJY0d5eJ7kufB1RLhvRitZD4FEbJVehqhY
aevf5bLk1BNFhzRBfLXmv6u/kfvWf2HjGAf0aFhaQyiAldDgnZrvaZOFjkToJk27
p9MguvwGmbciao0DmMjcJhQ0smclFwy8Kj98Tz+nTkfAlU8jJdb1J/tIatJdpSRh
AgMBAAGjgdwwgdkwDAYDVR0TAQH/BAIwADA0BgNVHSUELTArBggrBgEFBQcDAgYI
KwYBBQUHAwEGCWCGSAGG+EIEAQYKKwYBBAGCNwoDAzALBgNVHQ8EBAMCBaAwMwYI
KwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhadodHRwOi8vb2NzcC5jYWNlcnQub3Jn
LzBRBgNVknsadkjasnjdksandjksandjsnNlY3VyaXR5YXJlYS5vcmegKQYIKwYB
BQUHCAWgHQwbbWFpbC5qb2ludC5zZWN1cml0eWFyZWEub3JnMA0GCSqGSIb3DQEB
BQUAA4ICAQAX8ceObvUZNKYTlNQ/cv0BiA1XweRsVNca1ILACNLdVPR9mvf+aXCh
ODkHaZAmGngj1DfD4fJsTbaydGWSPeVH91Qi9F+Pi6szhsxylI83NKbuXihcenuG
twnte8aIb5FelVHttLQPSKRR62E8YmDWk3KYivuFAuZqDaGnWc5yeneTBpsGter/
4awqsgymBK2YEg1HIWMPaRBvwzCVN/yUyWhFH9Nj11f/xgZE87VXrjLHWT/73i2Z
S4uIZ2KHQUYuxMGldgpXm+QxFM8DGA6z1T1oPCVfW85cezlfr8QVvX6SXZrAUNL0
3D5YPzQuevW+5CrqnGA+F5ff4mBMl8R8Sg0+0LoLqt5PbpGyTt9vS1INZCdfvtIA
/d7Ae7Xp9W8FVRqd7tvNMIy3ZA0/wNMDUczkhC/YtvHfMELpjtMJAGF15OtO7Vik
V+FZnBP1Yd7760dtEmd6bF8vjcXCvDdxwGtcAehAUpIgAWvkHHOt8+H56tkFENAP
/ZpJ+Wr+K3lxkkG+BN1bucxMuAdVyTpFyZfKDHRXIO/5e0hpPOaTO+obD3kifzdh
yy7KmdKvDclHTiPuonJBzEXeM3JQBjcDHbMSyA6+38yBcso27h9VqCQJB2cZmSlW
ArS/9wt2X21KgeuGHlTZ/8z9gXAjQKXhDYECWWd6LkWl98ZDBihslQ==
-----END CERTIFICATE-----
subject=/CN=mail.example.com
issuer=/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
---
No client certificate CA names sent
---
SSL handshake has read 5497 bytes and written 293 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 114A22BE4625B33F6893124ACF640AE0628B48B5039E90B3B9A20ADF7FA691F3
    Session-ID-ctx:
    Master-Key: B8A55EC91A060575CFB29503FBF7160C2DC8BCBFE02D20A7F704882F72D8D00272D8D002CE5CCC4B94A492F43ED8F
    Key-Arg   : None
    TLS session ticket:
    0000 - 86 c7 46 63 a5 b6 48 74-16 d8 e0 a7 e2 64 e8 89   ..Fc..Ht.....d..
    0010 - 97 90 59 4b 57 f3 e2 b3-e2 d2 88 90 a8 aa b4 44   ..YKW..........D
    0020 - ea 24 08 5e b4 14 7f e1-2a 1a 1c 40 ca 85 e7 41   .$.^....*..@...A
    0030 - 9d 0d a8 4c f7 e3 db 1e-ef da 53 9c fe 43 cc 62   ...L......S..C.b
    0040 - 79 b6 ad ea 9d cf ca b2-37 41 b7 0f ea 7d 59 e8   y.......7A...}Y.
    0050 - 10 01 a0 eb dc c2 63 66-56 54 6a e8 3a 4b 93 49   ......cfVTj.:K.I
    0060 - 77 da e4 4b 21 e8 30 7e-bf 10 91 3a 2c f9 59 80   w..K!.0~...:,.Y.
    0070 - 01 1f 36 0b 92 85 67 55-c8 86 1d 44 b1 6f 0d ae   ..6...gU...D.o..
    0080 - 15 36 b6 49 3a ef 94 9a-ef 6d 27 f0 80 20 43 09   .6.I:....m'.. C.
    0090 - be 70 c5 30 15 3b 93 c6-c1 4c e9 7f 5c 34 98 dd   .p.0.;...L..\4..

    Compression: 1 (zlib compression)
    Start Time: 1292857721
    Timeout   : 300 (sec)
    Verify return code: 19 (self signed certificate in certificate chain)
---
+OK Dovecot ready.

DNSSEC

While DoH is DNS encrypted in port 443, DNSSEC is a protocol extension to ensure the query hasn’t suffered from DNS poisoning. Ideally, DNSSEC and DoH would work together to improve user privacy.

There are two sides to DNSSEC support – user-side verification and server-side support.

As an internet user, your internet service provider (ISP) may use DNS Security Extensions (DNSSEC) already. If not, there are ways to use a DNS resolver that does DNSSEC validation:

  • Change your router DNS settings
  • Install DNS configuration software – e.g. DNS Jumper or DNS-Trigger
  • Use a – e.g. NordVPN, TunnelBear, and Private Internet Access (PIA)

As a server administrator, you should enable support for DNSSEC on Managed VPS / Dedicated servers or with Cloudflare.

You can test your DNS security settings at Cloudflare.com/ssl/encrypted-sni.

Common results for the DNS security test.

Improve your server security with these 10 ways to harden your VPS. Or enhance your brand with these 5 Web Hosting New Year’s Resolutions for 2020.

Virtual Hosts

For this part of the manual, keep the sites in separate subdirectories of the «demo» user’s home directories. Start by making directories for the domains:

    cd /home/demo

    mkdir -p public_html/www.examplesite.net/{public,private,log,cgi-bin,backup}

    mkdir -p public_html/site1.examplesite.net/{public,private,log,cgi-bin,backup}

    mkdir -p public_html/site2.examplesite.net/{public,private,log,cgi-bin,backup}

Next, proceed to the Apache configuration directory and set up the virtual host configurations.

Unsecured Site Configuration

Look at the configuration for the unsecured site:

That configuration will tell Apache that the Web site, «www.examplesite.net», will be served on port 80.

Secured Site Configuration

First Secured Site Configuration

Next, make a config for the first of the secure sites, site1.examplesite.net. The config looks similar to the «regular» virtual host, but site1.examplesite.net will be served on port 443 and include SSL configuration lines at the end:

    <VirtualHost *:443>
        ServerName "site1.examplesite.net" 
        ServerAdmin webmaster@examplesite.net 
        DocumentRoot /home/demo/public_html/site1.examplesite.net/public 
        ErrorLog /home/demo/public_html/site1.examplesite.net/log/error.log 
        LogLevel warn 
        CustomLog /home/demo/public_html/site1.examplesite.net/log/access.log combined 
        <Directory /home/demo/public_html/site1.examplesite.net/public>
            Options Indexes FollowSymLinks MultiViews 
            AllowOverride None 
            Order allow,deny 
            allow from all 
        </Directory> 
        SSLEngine On 
        SSLCertificateFile /var/www/certs/site1.pem 
        SSLCertificateKeyFile /var/www/keys/site1.key 
    </VirtualHost> 

Note that the certificate file is site1.pem and the key file is site1.key.

Second Secured Site Configuration

Similarly, the VirtualHost file for site2.examplesite.net would be:

<VirtualHost *:443>
        ServerName "site2.examplesite.net" 
        ServerAdmin webmaster@examplesite.net 
        DocumentRoot /home/demo/public_html/site1.examplesite.net/public 
        ErrorLog /home/demo/public_html/site2.examplesite.net/log/error.log 
        LogLevel warn 
        CustomLog /home/demo/public_html/site2.examplesite.net/log/access.log combined 
        <Directory /home/demo/public_html/site2.examplesite.net/public>
            Options Indexes FollowSymLinks MultiViews 
            AllowOverride None 
            Order allow,deny 
            allow from all 
        </Directory> 
        SSLEngine On 
        SSLCertificateFile /var/www/certs/site2.pem 
        SSLCertificateKeyFile /var/www/keys/site2.key 
    </VirtualHost> 

Use different certificates and key files for site2.examplesite.net, site2.pem, and site2.key.

With this setup, site2.examplesite.net is being served on port 443, just like site1.examplesite.net. If there is a single public IP address on the server it means the secure sites are sharing the same IP address and port. On a non SNI-based setup, this configuration would not work.

Почему бы не использовать разные IP-адреса?

Заголовок HTTP был определен, чтобы позволить обслуживать более одного веб-хоста от одного IP-адреса из-за нехватки адресов IPv4, признанных проблемой уже в середине середины, 1990-й года. В общедоступных средах веб-хостинга сотни уникальных несвязанных веб-сайтов могут обслуживаться одним IP-адресом таким образом, сохраняя адресное пространство.

Затем совместно используемые среды размещения обнаружили, что крупнейшим потребителем пространства IP-адресов является необходимость обеспечения безопасных веб-сайтов уникальными IP-адресами, что создает потребность в SNI в качестве меры блокировки на пути к IPv6. Сегодня иногда бывает трудно получить всего 5 IP-адресов (29) без существенного обоснования, что часто приводит к задержкам развертывания.

С появлением IPv6 такие методы сохранения адресов больше не нужны, поскольку один хост может иметь больше назначенных ему IPv6-адресов, чем сегодня весь Интернет, но методы, вероятно, все еще будут использоваться далеко в будущем для сервисные устаревшие соединения IPv4.

Предостережения

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

Особо следует отметить, что ни одна версия Internet Explorer в Windows XP не поддерживает SNI. Поскольку эта комбинация по-прежнему представляет собой значительную (но неуклонно уменьшающуюся, примерно 16% интернет-трафика в декабре 2012 года по NetMarketShare) части интернет-трафика, SNI будет неприемлемым для сайта, ориентированного на эти группы пользователей.

Поддержка

Многие, но не все, обычно используемые пакеты программного обеспечения поддерживают SNI.

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

Что такое SNI?

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

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

Требования

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

Для выполнения руководства необходима учетная запись с привилегиями root. Чтобы узнать, как получить эти привилегии, читайте руководство по начальной настройке сервера.

Кроме того, на сервере должен быть установлен Nginx.

Для установки Nginx используйте команду:

Убедитесь, что протокол SNI включен:

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

Instructions

  1. Make sure mod_ssl is enabled in your Apache installation (either by uncommenting the necessary lines in httpd.conf or using «a2enmod» on Ubuntu or Debian). Most package installations of Apache will have mod_ssl enabled by default.
  2. You will also want to make sure that Apache is listening on port 443 (for secure connections) and use name-based virtual hosts on that port.
  3. There is an IfModule mod_ssl.c block in the main httpd.conf file, the ports.conf file, or in a mod_ssl-specific config file, depending on your Apache setup.
  4. Inside that block you will find the line:
  5. In the same mod_ssl.c block also add:

That is the only SNI-specific bit of configuration that needs to be done in order to tell Apache that it should use named virtual hosts on the secure port.

PLEASE NOTE: Since a virtual host is being set up on port 80 (www.examplesite.net), there should also be a line «NameVirtualHost *:80» elsewhere in your Apache configuration. On Ubuntu and Debian, look in ports.conf and for most other distributions look in httpd.conf.

RapidSSL Wildcard Certificate

WP Engine offers wildcard domain-validated (DV) certificates from RapidSSL. You only need this type of certificate if you want to cover your root domain AND all subdomains with a single certificate.

RapidSSL wildcard certificates cost $199 USD and will cover all subdomains. However, if you only use a few subdomains, it’s much easier to manage the few certificates you need with free Let’s Encrypt SSL certificates instead.

Our system will auto-renew RapidSSL 3 days before its expiration, unless autorenew has been manually disabled.

NOTE: RapidSSL certificates cannot be purchased if you pay for your hosting account in a non-USD currency. Let’s Encrypt and 3rd-party imported certificates are still supported.

NOTE: For a Wildcard SSL order to process, the top-level (non-WWW) domain must have DNS pointed to a WP Engine server.

DNS-over-HTTPS (DoH)

There are two ways to enable DoH in Firefox:

Preferences Menu

The easiest, preferred option is to use the browser preferences menu.

  1. Open your Firefox Preferences page
  2. Under Network Settings, select Settings
  3. Check Enable DNS over HTTPS
  4. (Optional) Change your default DNS provider from Cloudflare to NextDNS or Custom (e.g. QuadDNS, Quad101, or another resolver listed in the curl Github page or AdGuard listing)
  5. Select OK

about:config

For more advanced options, you can edit the Firefox configuration file directly.

  1. Navigate to
  2. Type
  3. Replace the URI with your preferred DNS resolver
  4. Select the checkmark icon on the right

4: Создание виртуальных хостов

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

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

Затем нужно внести в каждый файл приведенные ниже конфигурации, которые представляют собой упрощенную версию двух конфигурационных файлов: конфигурационного файла виртуального сервера по умолчанию (/etc/apache2/sites-available/default) и конфигураций SSL по умолчанию (/etc/apache2/sites-available/default-ssl).

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

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

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

В данном коде нужно отредактировать несколько строк:

ServerAdmin: введите адрес электронной почты вебмастера;

ServerName: укажите доменное имя

Обратите внимание: домен нужно указывать без www;

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

Скорее всего, на сервере будет два разных root-каталога для двух различных виртуальных хостов;

SSLCertificateFile: данная директива указывает на расположение файла сертификата. Сертификат для каждого сайта хранится в созданном ранее отдельном каталоге (см. раздел 1);

SSLCertificateKeyFile: эта директива указывает на расположение ключа сертификата. Ключ для каждого сертификата хранится в одном каталоге с самим сертификатом.

Другие возможные применения нескольких SSL-сайтов

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

С появлением более мощных серверов и сетевых карт с большей пропускной способностью вы также сможете использовать этот метод для размещения нескольких виртуальных SSL-сайтов. Вы можете выступить в роли ISP, который поддерживает SSL-сайты заказчиков, потребности которых в пропускной способности и объеме трафика невелики, но которым необходима возможность осуществлять безопасные торговые транзакции на основе SSL. С помощью IP-алиасинга вы можете разместить Web-сайт с поддержкой SSL на одном IP-адресе и предложить другие сервисы, такие как Web-сервисы, на другом. В качестве других возможностей можно рассмотреть установку основной и резервной систем, работающих в бесперебойном режиме,
для которых требуется дублирование, как системы QA и/или DR. Теперь, когда вы понимаете основополагающую концепцию IP-алиасинга, у вас есть обширное поле деятельности.

Похожие темы

  • Оригинал этой статьи на developerWorks.
  • «IBM HTTP Server (powered by Apache): Интегрированное решение для серверов IBM eServer iSeries»: Ознакомтесь с этим справочником, он поможет вам при планировании, устанавке, настройке, поиске ошибки и изучении http-сервера Apache, работающем на сервере IBM iSeries.
  • «По ту сторону выполнения тестирования: Часть 13. Тестирование и настройка стабилизаторов загрузки и сетей» : Научитесь использовать IP-алиасинг на клиентской стороне для проведения тестирования.
  • «Защищенный удаленный доступ к данным для Domino»: Почитайте, как сделать важные данные доступными для удаленных пользователей.
  • «Один день из жизни #Apache» (Rich Bowen, ONLamp.com, February 2005): Почитайте в этой статье о проблемах, связанных с работой SSL виртуальных хостов с постоянным именем (name-based SSL virtual hosts) на Apache.
  • «Устройство Web-защиты с Apache и mod_security»: Узнайте, как обезопасить Web-приложения с помощью реверсивного proxy.
  • Пробные версии продуктов IBM: Попробуйте на практике инструменты разработки приложений и межплатформенные продукты от DB2, Lotus, Rational, Tivoli и WebSphere.

1: Создание SSL-сертификата

Для работы TLS/SSL использует комбинацию открытого сертификата и закрытого ключа. Закрытый ключ хранится на сервере и не разглашается. SSL-сертификат используется открыто и доступен всем пользователям, запрашивающим контент.

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

Команда задаст ряд вопросов. Рассмотрим компоненты команды подробнее:

  • openssl: базовый инструмент командной строки для создания и управления сертификатами, ключами и другими файлами OpenSSL.
  • req: эта подкоманда указывает, что на данном этапе нужно использовать запрос на подпись сертификата X.509 (CSR). X.509 – это стандарт инфраструктуры открытого ключа, которого придерживаются SSL и TLS при управлении ключами и сертификатами. То есть, данная команда позволяет создать новый сертификат X.509.
  • —x509: эта опция вносит поправку в предыдущую субкоманду, чтобы вместо запроса на подпись сертификата создать самоподписанный сертификат.
  • —nodes: пропускает опцию защиты сертификата парольной фразой. Нужно, чтобы при запуске сервер Apache имел возможность читать файл без вмешательства пользователя. Установив пароль, придется вводить его после каждой перезагрузки.
  • —days 365: эта опция устанавливает срок действия сертификата (как видите, в данном случае сертификат действителен в течение года).
  • —newkey rsa:2048: эта опция позволяет одновременно создать новый сертификат и новый ключ. Поскольку ключ, необходимый для подписания сертификата, не был создан ранее, нужно создать его вместе с сертификатом. Данная опция создаст ключ RSA на 2048 бит.
  • —keyout: эта опция сообщает OpenSSL, куда поместить сгенерированный файл ключа.
  • —out: сообщает OpenSSL, куда поместить созданный сертификат.

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

Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер

В случае если доменного имени нет, внесите в эту строку IP-адрес сервера. В целом эти поля выглядят примерно так:

Файлы ключа и сертификата будут помещены в каталог /etc/ssl.

Implementation[edit]

In 2004, a patch for adding TLS/SNI into OpenSSL was created by the EdelKey project. In 2006, this patch was then ported to the development branch of OpenSSL, and in 2007 it was back-ported to OpenSSL 0.9.8 (first released in 0.9.8f).

For an application program to implement SNI, the TLS library it uses must implement it and the application must pass the hostname to the TLS library. Further complicating matters, the TLS library may either be included in the application program or be a component of the underlying operating system. Because of this, some browsers implement SNI when running on any operating system, while others implement it only when running on certain operating systems.

5: Тестирование шифрования

Теперь нужно убедиться, что трафик между сервером и клиентом шифруется. Откройте в браузере следующую ссылку:

Поскольку сертификат был подписан самостоятельно, браузер сообщит о его ненадёжности:

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

После этого вы получите доступ к своему сайту.

Если вы настроили два блока server для переадресации трафика HTTP на HTTPS, проверьте, работает ли переадресация:

Background of the problem[edit]

When making a TLS connection, the client requests a digital certificate from the web server. Once the server sends the certificate, the client examines it and compares the name it was trying to connect to with the name(s) included in the certificate. If a match occurs, the connection proceeds as normal. If a match is not found, the user may be warned of the discrepancy and the connection may abort as the mismatch may indicate an attempted man-in-the-middle attack. However, some applications allow the user to bypass the warning to proceed with the connection, with the user taking on the responsibility of trusting the certificate and, by extension, the connection.

However it may be difficult — or even impossible, due to lack of a full list of all names in advance — to obtain a single certificate that covers all names a server will be responsible for. A server that is responsible for multiple hostnames is likely to need to present a different certificate for each name (or small group of names). Since 2005, CAcert has run experiments on different methods of using TLS on virtual servers. Most of the experiments are unsatisfactory and impractical. For example, it is possible to use subjectAltName to contain multiple domains controlled by one person in a single certificate. Such «unified communications certificates» must be reissued every time the list of domains changes.

allows multiple DNS hostnames to be hosted by a single server (usually a web server) on the same IP address. To achieve this, the server uses a hostname presented by the client as part of the protocol (for HTTP the name is presented in the ). However, when using HTTPS, the TLS handshake happens before the server sees any HTTP headers. Therefore, it was not possible for the server to use the information in the HTTP host header to decide which certificate to present and as such only names covered by the same certificate could be served from the same IP address.

In practice, this meant that an HTTPS server could only serve one domain (or small group of domains) per IP address for secured and efficient browsing. Assigning a separate IP address for each site increases the cost of hosting, since requests for IP addresses must be justified to the regional Internet registry and IPv4 addresses are now exhausted. For IPv6, it increases the administrative overhead by having multiple IPs on a single machine, even though the address space is not exhausted. The result was that many websites were effectively constrained from using secure communications.

Как будет работать «DNS поверх HTTPS» в Chrome 78

По данным разработчиков Google, на старте эксперимента с внедрением протокола «DNS поверх HTTPS» в следующую версию браузера Chrome примут участие, как минимум, шесть CDN-провайдеров, внедривших на своей стороне поддержку DoH в свою службу DNS – это Cleanbrowsing, Cloudflare, DNS.SB, OpenDNS, Quad9 и, собственно, сама Google. К моменту запуска проекта список партнеров потенциально может быть расширен, отмечают авторы проекта.

Поддержка DNS-over-HTTPS появится в браузере Chrome версии 78

Служба обработки DNS-запросов при этом остается той же – изменится только протокол обращения, который теперь будет защищен шифрованием. В результате, заверяют в Google, все элементы управления контентом DNS-провайдера, в том числе, активированные системы родительского контроля, останутся активными.

На стадии эксперимента предполагается, что при обращении к сайту браузер Chrome 78 будет проверять, входит ли DNS-провайдер пользователя в список DoH-совместимых CDN-партнеров, и затем обновит поддержку DoH от этого партнера. В случае, если DNS-провайдера не найден в списке поддерживаемых, Chrome продолжит работать в нынешнем режиме – без активации DoH.

Таким образом, в перспективе любые попытки фильтровать трафик и блокировать сайты по доменному имени будут успешны лишь для тех интернет-ресурсов, которые размещают свои ресурсы у хостинг-провайдеров с «устаревшими» платформами – то есть, без поддержки «DNS поверх HTTPS».

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

Эксперимент будет проводиться на всех платформах, поддерживающих Chrome, кроме Linux и iOS. Так, пользователям мобильных устройств под управлением ОС Android 9 и выше для поддержки DoH в Chrome можно указать поставщика DNS-over-TLS в настройках частного DNS. В случае невозможности поддержки DoH настройки просто «откатятся» к стандартным настройкам частного DNS.

В случае сбоя работы протокола DoH или слишком медленного соединения при его использовании, настройки браузера Chrome также вернутся к стандартной настройке служб DNS-провайдера. От участия в эксперименте при использовании Chrome версии 78 также можно отказаться, отключив флажок в настройках браузера: chrome://flags/#dns-over-https.

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

Why Name-Based Hosts Don’t Work Well with SSL

Back in the olden days, which in internet years means 2007, you would solve the issue of multiple websites being hosted on same IP address with name-based hosts. Basically, when a client requests a particular website, it uses a unique HTTP header that includes the intended hostname. In response, the server matches this header to the intended website and transports the user there.

Where this breaks down is when HTTPS enters the picture. That’s because SSL requires an SSL handshake before an encrypted connection can be made between a client and a server. The HTTP header that contained the intended hostname wouldn’t be downloaded until after the handshake has been completed, which means that the server wouldn’t know which website to make the connection to.

9 ответов

28

Я думаю, что это хорошая идея, как объяснить, что проблема на самом деле с виртуальными хостами и SSL /TLS.

При подключении к серверу apache через HTTP вы отправляете набор заголовков http. Они выглядят так:

Если у вас есть виртуальный хостинг, apache будет смотреть на поле hosts, а затем выберете правильный index.html для вас. Проблема заключается в том, что вы добавляете SSL /TLS. Сервер настраивает шифрование до того, как вы отправите свой HTTP-запрос. Поэтому сервер не знает, собираетесь ли вы на www.nice-puppies.com или www.evil-haxxor.com до завершения проверки подлинности /шифрования. Сервер не может угадать (поскольку отправка неправильного сертификата дает вам неприятное сообщение об ошибке).

Одним из решений является подстановочный сертификат (как указано выше), который действителен для * .nice-puppies.com. Таким образом, вы можете использовать один и тот же сертификат для нескольких доменов, но у вас не может быть сертификата *. Com (хорошо, вы можете, но это было бы очень плохо для всех), так что в общем вам потребуется отдельный IP для каждого HTTPS-домен.

8

Реальное решение этой проблемы — «Имя сервера»:

Это только начинает выкачиваться на серверы и веб-клиенты, поэтому на самом деле это не то, что вы можете использовать сейчас, но, надеюсь, через несколько лет это не будет проблемой.

2

Проблема заключается в том, что сертификат SSL связан с IP-адресом, а не с именем хоста. Когда соединение входит в IP-адрес для HTTPS-запроса, первым действием является установление SSL-связи путем передачи сертификата сервера и /или сертификата клиента. На этом этапе рукопожатия подключения сервер Apache не имеет никакого способа узнать, к чему идет запрос. Это отличается от трафика HTTP (non-SSL), поскольку после установления соединения сервер Apache может определить конфигурацию виртуального хоста, если клиент отправит , иначе он передает его на первый сконфигурированный виртуальный хост.

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

1

Это может быть добавлено в один сертификат ssl как SAN (альтернативное имя субъекта). В моем оправдании я должен был запросить сертификат организации. Я использовал globalsign.

1

На самом деле, с помощью современного программного обеспечения вы можете обслуживать несколько сайтов HTTPS по одному IP-адресу, используя новую функцию, называемую «SNI — имя сервера».

Мне еще нужно это использовать, но это хорошо для внутренних и интрасети. Большинство современных браузеров поддерживают SNI. IE6 не поддерживает SNI, но IE7 делает.

(Исправление: 20100426 — SNI вообще не поддерживается в Windows XP. Windows Vista и выше поддерживают SNI. См. «Раздел 2.2.3» на странице ).

1

Я работаю над тем же вопросом. Как мой тест, IE7 и более поздние версии (Только в Win7 и Vista) /Chrome /Firefox /Safari /Opera поддерживают «Имена сервера». Фактически, если браузер использует Tsl 1.0, он поддерживает «Имена сервера».

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

Сертификат UC определенно подходит: http: //www.sslshopper.com/unified-communications-uc-ssl-certificates.html

Если вы попытаетесь добавить два сертификата на один и тот же IP-адрес, будет использоваться только первый сертификат чтения. Один IP-сертификат SSL.

Если вы хотите получить больше SSL-сертификатов на одном и том же IP-адресе, подумайте о получении многодоменного (так называемый UCC-check it out @ godaddy ) или подстановочный (более дорогой) сертификат.

Check for an SSL

To determine if you have an SSL certificate installed on your website, visit your domain (for example mycoolwebsite.com) with https:// in front. The “s” in HTTPS stands for “secure”.

If you see a secure padlock next to the domain this means your site is secured by an SSL certificate. You can also click on this icon to view certificate details, such as expiration date and issuer.

If you see a security warning, this means your site is not secured by an SSL and you will need to add one.

If the padlock next to your domain is broken, crossed out, or shows “more info”, this means your site is secured by an SSL but there is mixed content on the page that needs correcting.

You can also test your SSL status with an external tool:

  • Qualys SSL Labs – Server Test
  • SSL Shopper – SSL Checker
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *