SNI. SSL на домене и субдомене. Разные IP

A
На сайте с 21.10.2013
Offline
28
6973

Добрый день.

Имеютмся 2 VPS с Centos 6.6

Установлены ISPmanager

Создан бесплатный SSL сертификат в StartSSL + Бонус этого же сертификата на субдомен

На каждом сервере свой выделенный IP

На первом сервере установлен основной домен.ру

На втором сервере установлен субдомен.домен.ру

На первом сервере с основным доменом работает только Apache

На втором Установлены Nginx+Apache

Делаю проверку SSL на сайте https://www.ssllabs.com/, основной домен в норме, а вот субдомен начинает чудить, пишет что This site works only in browsers with SNI support. Соответственно в IE8 под WinXP сертификат не является доверенным, а IE в ХР впринципе не поддерживает SNI, т.к. там нет TLS (ну или както в том плане вобщем), хотя основной домен работает. Естественно и там и там включена (для теста) строчка ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

Вопрос. Что могло повлиять, что субдомен так странно себя ведет. Может я чего накрутил в настройках? Опять же, очистил nginx.conf и создал субдомен на сервере заново. Результат одинаков, субдомен отказывается показывать сертификат доверенным в IE8.

ps

установил на основной домен nginx. Теперь теже грабли что и на субдомене.

Отсюда вопрос. Что нужно сделать с nginx, чтобы он перестал делать эту ерунду с SNI, а IE8 начал понимать сертификат?

Кстати строчка ssl_protocols TLSv1 TLSv1.1 TLSv1.2; не отключает SSLv3

Оптимизайка
На сайте с 11.03.2012
Offline
396
#1
andreyzlat:
Кстати строчка ssl_protocols TLSv1 TLSv1.1 TLSv1.2; не отключает SSLv3

Это неправда, отключает.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
A
На сайте с 21.10.2013
Offline
28
#2
Оптимизайка:
Это неправда, отключает.

Да, попробовал строчку в http{ записать, отключил.

S
На сайте с 02.05.2014
Offline
61
#3
andreyzlat:
Результат одинаков, субдомен отказывается показывать сертификат доверенным в IE8.
ps
установил на основной домен nginx. Теперь теже грабли что и на субдомене.
Отсюда вопрос. Что нужно сделать с nginx, чтобы он перестал делать эту ерунду с SNI, а IE8 начал понимать сертификат?

Не видя домен и конфиг, сказать что либо точно невозможно.

Но рискну предположить, что указана не вся цепочка сертификатов.

A
На сайте с 21.10.2013
Offline
28
#4
Sujcnm:
Но рискну предположить, что указана не вся цепочка сертификатов.

В сведениях сертификата данные о самоподписном сертификате на сервере, видимо тот, что используется ISPmanager-oм.

Nginx v1.8

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

Сертификаты установлены правильно, и подключал со степлингом промежуточные сертификаты.

Смысл в том, что в других браузерах всё норм. Но IE в XP не поддерживает SNI. Это когда на одном сервере находятся несколько доменов с SSL сертификатами и с помощью nginx можно выбрать и настроить каждый домен со своим сертификатом. Первый запрос к серверу, когда приходит по https, сервер отдает неглядя первый попавшийся SSL, но ему нужно отдать правильный. Короче SNI спасает в этом плане и отдает из 10 доменов и 10 сертификатов нужный.

Но у меня вопрос в другом, SNI мне наоборот не нужна. На сервере 1 домен. Возможно глупая железка видит как второй домен сервер Апача, или локалхоста или даже http сервер ISPmanager (он как раз таки подписан самописным сертификатом), или ip адрес на порту 81 (nginx+apache). В настройках сервера указан основной домен к ip адресу уже по умолчанию, т.е. если вводим IP адрес в строке, то запускается сайт на домене, а не выдается ошибка 403, 404. В общем я не пойму что он видит и что ему нужно.

Также пытался писать пути к сертификатам прям в секции http{}, nginx это допускает, если ставим один wild сертификат которым подписываем все домены. Не помогает. Получается, что самоподписной сертификат гдето еще раньше засвечивается.

Пыхтел с настройками, ничего не получается. Но я вижу, что на других сайтах включен nginx и сайты отлично работают по https в ie8 XP с шифрацией RC4 (TLS), и это единственная шифрация в ie которую можно включить без уязвимых SSLv3. Хотя опять же, не имеет это никакого значения какая шифрация, суть в том что nginx выдает неправильный первый попавшийся сертификат сервера, хотя в конфиге nginx указан лишь один доверенный сертификат.

Я понимаю, что судя по статистике пользователей на IE8 остался 1,1% и к тому же половина боты с поддержкой JS, и понимаю что поддержку XP пора прекращать... новсё же, может кто подскажет как вылечить эту болезнь.

зы

В общем попытаюсь сделать еще тест, удалить самоподписной сертификат в ISP, вставив туда нормальный.

---------- Добавлено 01.06.2015 в 01:01 ----------

Всё. Победил.

Объясню у кого такая же проблема.

Это конфликт в nginx изза панели ISPmanager

В конфиге сервера nginx видим строчку include /usr/local/ispmgr/etc/nginx.domain;

Я думаю все понимают, что вставляется дополнительная секция из ISP по этому пути.

Строчка находится в самой первой секции http{}, соответственно самоподписной сертификат от ISP берет на себя приоритет и поэтому такая трабла в IE XP.

Есть 2 решения, либо удалить из nginx.domain пути на сертификаты и прописать в nginx.conf в секции http{} "правильные" подписанные сертификаты, либо заменить файлы сертификатов ISP

ssl_certificate /usr/local/ispmgr/etc/manager.crt;

ssl_certificate_key /usr/local/ispmgr/etc/manager.key;

manager.crt manager.key выданные в ЦС, что я и сделал. Ребут сервера и всё норм.

A
На сайте с 21.10.2013
Offline
28
#5

Еще дополню про ssl stapling.

Про пост выше. Кое какие глюки остались, поэтому пошел дальше и закомментил к черту строку include /usr/local/ispmgr/etc/nginx.domain;, сделал распределение сертификатов в секциях server. Из секции http нужно удалить. Об этом ниже.

-----------------------------------------

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

Итак. Имеем сертификаты от StartSSL 2 штуки. Nginx обязательно обновляем до версии 1.8

Так как у меня 2 сервера с распределенной нагрузкой, я подписал их одним сертификатом, чтобы не запрашивались лишние сретификаты и не расла изза этого дополнительная нагрузка. StartSSL позволяет зарегистрировать сертификат на домен + субдомен. Ктото регает на субдомен вида www.site.ru, я же регал на subbomain.site.ru который у меня находится на 2 сервере. Отсюда возникла трабла, www получился без сертификата, что дало ошибку в неподписанном SSL на www.site.ru. Пришлось зарегать второй сертификат на этот же домен site.ru + "субдомен" WWW.site.ru Вообще наврено некорректно www называть субдоменом. Ну пускай будет им.

Я надеюсь понятно будет, мой первый сервер site.ru, второй сервер subdomain.site.ru, поэтому сертификат удачно разместился на двух физических серверах. Типа зачем? Надо мне так!

2 сертификат по сути был нужен только ради переадресации на site.ru без www. Т.к. в nginx ну и вообще по принципу работы SSL протокола, переадресация с www на без www при отсутствии второго сертификата не заработает. Можете проверить, как пример, зайдите на сбербанк онлайн или робокассу, и допишите к адресу www. Всё поймете. Для меня странно, что такие крупные конторы так наплевательски к этому отнеслись.

Короче, как сделать так чтобы при всей этой канителе заработал SSL стэплинг?

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

Разберу пример одного сервера, т.к. второй мой сервер ничем не отличается от первого кроме того что на нем установлен субдомен.

Итак, имеем ISPmanager-Lite 4.4.10.23, естественно с наикривейшей документацией.

Домены по стандарту создаем в панеле, указываем галочку SSL, выбираем сертификат введенный вручную. До этого его нужно создать в панеле с помощью копипастинга, инструкции найдете, они сносные, хотя тоже там запарка с последним нижнем полем, черт пойми какой сертификат вводить, вообще по хорошему туда нужно вводить промежуточный серверный с именем файла sub.class1.server.ca.pem, есть еще клиентский, будьте внимательны в названии. Вставлять так, чтобы на конце не было переноса и пробела, иначе ошибка.

Если SSL у вас заработал в стандартном конфиге, идем далее, настраиваем стэплинг.

Так будет выглядеть секция для редиректа с https www на https без www


server {
server_name www.site.ru;
listen 111.111.111.111:443 ssl spdy;
ssl_certificate /var/www/httpd-cert/sss/cert.chained.crt; #это ключ самого сертификата, но прикол в том, что ISPmanager его уже объединил с промежуточным, и тем не менее стэплинг ничерта не работает.
ssl_certificate_key /var/www/httpd-cert/sss/decryptprivat.key; #это ваш декриптованный private key, криптованный не заработает
ssl_trusted_certificate /var/www/httpd-cert/sss/ca.pem; #а это чудо и есть наш файл для стэплинга, на название не смотреть, оно совпадает с названием некого сертификата от StartSSL, но готовится вручную иначе.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;

add_header Strict-Transport-Security 'max-age=15778463';
return 301 https://site.ru$request_uri;
}

Как приготовить сертификат для ssl_stapling в StartSSL?

Строгая последовательность!

Открываем наш Notepad++

Копируем и вставляем туда код сертификата выданный на домен, при скачивании со StartSSL он имеет как правило название вашсайт.crt либо копируйте из меню Retrieve Certificate на сайте StartSSL .

Смотрим чтобы после ---- не было пробелов, нажимаем энтер, копипастим следущий сертификат, с названием Class 1 Intermediate Server CA sub.class1.server.ca.pem (ВНИМАНИЕ, ТАМ СНОВА В НАЗВАНИИ server, есть такой же но client, у нас 1 класс, т.к. серт бесплатный), далее снова без пробелов и жмем энтер, с новой строки копипастим StartCom Root CA (PEM encoded) ca.pem.

Любой лишний пробел выпьет у вас крови.

Итого 3 сертификата.

Всё, сохраняем. Готово. Копируем в туже папку где остальные серты, ну и прописываем пути в nginx ssl_trusted_certificate /var/www/httpd-cert/sss/ca.pem;

service nginx restart

Забыл, это я привел пример конфиг редиректа, на основной конфиг всё тоже самое НО:

1. server_name site.ru;

2. без редиректа return 301 https://site.ru$request_uri;

3. все названия файлов сертификатов другие (это в моем случае, т.к. на www подключал другой серт, в вашем случае если серт выписали один на www и без www то все пути повторяются.

4. комментим строку отвечающую за доступ к ISP по адресу хх.хх.хх.хх:1500 #include /usr/local/ispmgr/etc/nginx.domain; иначе будете с бубном плясать как я.В IE под XP не будет работать и не будет работать редирект. браузер заматюкается на неподписанный серт ISP см. пост выше.

5.теперь доступ к ISP по адресу site.ru:1500, в том случае ели на вашем сервере 1 домен и он установлен по умолчанию к IP адресу сервера. Как проверить? Если заходим на хх.хх.хх.хх то перебрасывает на site.ru, ISP по адресу https://xx.xx.xx.xx:1500/ispmgr более не доступен, привыкайте.

6. Пункты 3-5 в вашем случае могут быть не нужны. остальные редиректы с http на https не привожу. Там главное помнить, что будет несколько секций server, отдельно под www http порты 80 и 443.

Как проверить что всё гууд?

1. Проверяем на логи ошибок nginx. Заходим на сайт, смотрим ошибки. Если есть типа 4567#0: OCSP_basic_verify() failed (SSL: error:27069065:OCSP routines:OCSP_basic_verify:certificate verify error:Verify error:unable to get issuer certificate) while requesting certificate status, responder: ocsp.startssl.com значит вы накосячили.

На сайт заходить только с винды выше XP и с браузером chrome, На ХР степлинг не работает! На многих браузерах тоже.

2. Если ошибок нет, то тестим дальше.

3. Заходим в консоль, команда

openssl s_client -connect site.ru:443 -tls1 -tlsextdebug -status < /dev/null| grep OCSP

Если всё правильно выдает кучу текста про сертификаты и их промежутки а также OCSP Response Data:
OCSP Response Status: successful (0x0)

Если ошибка то... OCSP response: no response sent

3. Тестим наш серт. https://www.ssllabs.com/ssltest/index.html После окончания внизу примерно будет зеленая строка OCSP stapling Yes.

4. Идем в магазин за пивом. Купите дешманское - работать перестанет.

Andreyka
На сайте с 19.02.2005
Offline
822
#6

Вот что бывает, если работать с ispmanager через винду.

Не стоит плодить сущности без необходимости

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий