Назад | Перейти на главную страницу

IIS7: невозможно установить имя хоста на сайте с сертификатом SSL и портом 443

Рассмотрим машину Win 2008 SP2 с IIS7. Задача состоит в том, чтобы применить сертификат и имя хоста к одному-единственному сайту на этом компьютере. Заголовки хоста сайта должны быть abc.123.example.com

Первым шагом была установка .pfx в личный магазин, которая прошла успешно.

IIS7 находит сертификат как доступный, но не разрешает ввод имени хоста. Текстовое поле имени хоста ВСЕГДА отключено / неактивно, даже до выбора моего сертификата. Я даже удалил привязку к порту 80 по умолчанию.

Вопрос: как я могу установить имя хоста для этого сайта? Является ли этот сертификат подстановочным? Я понимаю, что запрос SSL поступает на веб-сервер, а заголовок хоста в пакете зашифрован. Почему тогда IIS6 позволяет указывать заголовок хоста, а IIS7 - нет?

Обновить: Сертификат не является частью проблемы. Я создал новый сайт на машине, и при выборе привязки https текстовое поле имени хоста отключено.

Он работает в графическом интерфейсе ...

Просто убедитесь, что «понятное имя» сертификата, который вы устанавливаете, совпадает с многодоменным именем, которое вы сделали для сертификата.

т.е. * .companydomain.com

Если вы укажете «Хорошее понятное имя» для сертификата * .companydoman.com, то при установке сертификата в IIS поле заголовка имени хоста станет серым.

Если вы используете * .companyname.com в качестве понятного имени, вы золотой.

Бум.

Вы не можете сделать это из пользовательского интерфейса, вы должны сделать это из командной строки. Вот хороший пример процесса:

http://www.sslshopper.com/article-ssl-host-headers-in-iis-7.html

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

Более полное объяснение заключается в том, что SSL шифрует ваш трафик, и часть этого трафика - это заголовки HTTP, отправляемые браузером на сервер. Одним из таких заголовков может быть заголовок «Host», который IIS использует для определения сайта, который нужно загрузить с запросом. Поскольку сертификат необходимо загрузить для установления безопасного соединения ПЕРЕД отправкой заголовков запроса, IIS должен выбрать сертификат только на основе IP-адреса и номера порта, оставив заголовок «Хост» в качестве фактора при определении. какой сайт загружать, чтобы вас не пустили на него.

Вот статья, которая описывает внутренняя работа SSL-соединения в более мелких деталях.

Ответ SSLShopper не сработал для меня, потому что он оставил привязку без заголовка хоста, и вы не могли удалить эту привязку, не разорвав соединение с сертификатом. Вот метод, который я использовал, чтобы заставить его работать:

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

Во-первых, нам нужно собрать некоторую информацию. Нам нужен хеш, идентификатор приложения и имя хоста.

Шаги

  1. Откройте IIS, выберите свой сервер и дважды щелкните «Сертификаты сервера» в нижней части. Обратите внимание на адрес «Кому выдан». Это имя нашего хоста. Сохранить это.
  2. Выберите свой сайт
  3. Привяжите свой сайт к порту 80 с помощью протокола http
  4. Удалите все остальные привязки
  5. Привяжите свой сайт к порту 443, используя протокол https.
  6. Откройте командную строку

    netsh http show sslcert
    
  7. Сохраните хэш сертификата и идентификатор приложения

  8. Удалите привязку https на вашем сайте
  9. В командной строке:

    netsh http add sslcert ipport=0.0.0.0:443 certstorename=my certhash=<put Certificate Hash here> appid={<put Application ID here>}
    
    appcmd set site /site.name:"<put site name here>" /+bindings.[protocol='https',bindingInformation='*:443:<put host name here>']
    

Примечание. Appcmd.exe можно найти в папке C: \ Windows \ System32 \ inetsrv. Возможно, вам потребуется находиться в этой папке, чтобы эта команда работала.

  1. Удалите http-привязку со своего сайта

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

Эта проблема

У вас есть подстановочный знак SSL, например *.ipsum.com и сертификат установлен, но вы не можете выбрать имя хоста для сайта в IIS, когда пытаетесь добавить привязку HTTPS, потому что текстовое поле неактивно.

Решение

Ваш wildcard SSL можно использовать с любым поддоменом, вам просто нужно удостовериться вы начинаете понятное имя сертификата с *. Я предпочитаю использовать то же понятное имя, что и домен с подстановочными знаками, например *.ipsum.com но вы можете назвать это как угодно, что есть со звездочкой: *foo

Я дал своему сертификату неправильное дружеское имя, помогите!

Начиная с Windows 8 или Server 2012, вы можете ввести certlm.msc в меню «Пуск» для управления сертификатами для локального компьютера. В предыдущих версиях Windows вам нужно будет сделать что-то более запутанное:

  1. Бегать mmc.exe с самого начала
  2. Перейти к File меню и выберите Add/Remove Snap-in... или ударить (Ctrl-M)
  3. Выделите Certificates оснастить и ударить Add > тогда выбирай Computer Account с последующим Local Computer в последующих диалогах нажмите Finish с последующим OK закрыть окно оснастки

В главном окне разверните Certificates (Local Computer) затем Personal затем Certificates и вы сможете щелкнуть сертификат правой кнопкой мыши, нажать Properties где вы можете обновить понятное имя.

Закройте и откройте диспетчер IIS и затем вы можете установить свое имя хоста.

Фактически, вы можете добавить заголовок хоста через графический интерфейс, но это зависит от того, как назван сертификат ... если я даю понятное имя * .xyz.com моему сертификату с подстановочными знаками и выбираю этот сертификат, тогда я может использовать графический интерфейс. если понятное имя - что-то вроде xyzwildcard, и я выбираю его, тогда поле hostheader затеняется ...

Странно странно

Некоторые машины не позволяют редактировать имя хоста, если протокол изменен на https или после добавления сертификата SSL. IIS иногда может быть сварливым.

Эта команда Windows создаст новую привязку с протоколом «https», на порт «443», имя хоста «subdomain.domain.com», имя сайта «имя сайта». Измените эти значения (в кавычках) в соответствии с вашими требованиями. Затем вам нужно будет удалить старую привязку, если она использует порт 443.

Run Windows Command Prompt as Administrator

C:>cd C:\Windows\System32\inetsrv

C: \ Windows \ System32 \ inetsrv>appcmd set site /site.name:"site_name" /+bindings.[protocol='https',bindingInformation='*:443:subdomain.domain.com']

Имя хоста может быть добавлено только в том случае, если имя выбранного сертификата будет похоже на имя хоста * .xyz.com, и вы можете переименовать понятное имя сертификата в * .xyz.com из mmc (Snap-in).

думаю эта статья в базе знаний прольет свет на проблему. Вкратце, заголовки хоста HTTP 1.1 не поддерживаются при использовании SSL.

Что, вероятно, достигнет того, чего вы хотите, - это использовать ключ метабазы ​​SecureBindings. Например. cscript.exe adsutil.vbs set / w3svc / websiteID / SecureBindings "ip.ip.ip.ip: 443: abc.123.mysite.com

Почему MS убирает этот графический интерфейс, я не понимаю, поскольку, если у вас есть приложение ASP.NET, которое использует файлы лицензий (licx), ваш сайт не будет работать, потому что он отображается как IP-адрес вместо имени домена . Им нужно ПРЕКРАТИТЬ ПРИНЯТЬ к каждому новому выпуску своего программного обеспечения - ИТ-специалистам не нужно, чтобы Microsoft присматривала за ними! Господи!

  1. Я создал самоподписанный сертификат с помощью * .testcompany.com, я выбрал только что созданный (начиная с *) в раскрывающемся списке Изменить привязку SSL-сертификата, я включил текстовое поле имени хоста, создал имя хоста как 'webapi.b2c .com ',

  2. Я обновил файл hosts в C: \ Windows \ System32 \ drivers \ etc 127.0.0.1 webapi.b2c.com

Теперь я могу просматривать сайт как 'https://webapp.b2c.com/'