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


47

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

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

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

Привязки сайта

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

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

Ответы:


32

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

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



1
Я знаю, что это старо, и это только в комментарии, но этот удобный трюк спас меня от разочарования. Спасибо!
bpursley

45

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

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

то есть. * .companydomain.com

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

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

Boom.


14
Спасибо за этот совет! Если кто-то еще не может переименовать сертификат из IIS (может кто-нибудь?), Вы можете переименовать сертификат в оснастке MMC для сертификатов. Просто загрузите MMC, добавьте оснастку «Сертификаты», выберите «Учетная запись компьютера», «Локальный компьютер». Загрузив оснастку «Сертификаты», вы можете перейти к Certiifcates (Локальный компьютер)> Личные> Сертификаты и щелкнуть правой кнопкой мыши, чтобы выбрать «Свойства» в вашем сертификате. Измените поле Friendly name на * .yoursite.com и перезагрузите оснастку диспетчера IIS
Garrett

4
Дружественное имя только начинается с "*", но может содержать любое другое имя, которое вы хотите для него после этого. В моем случае у меня был сертификат, действительный для нескольких разных доменов, у которых не было общего корня, кроме * .com, и я назвал это как понятное имя. Итак, вместо этого я назвал это * -my-descriptive-name-here. И спасибо @Garrett за подсказку по переименованию!
Вой

Это настоящий ответ. Ницца
Джо Филлипс

@Garrett Означает ли это, что если я использовал понятное имя, например «Мой домен SSL», все будет работать, даже если поле имени хоста пустое. Это действительно пугало меня, когда я потерял имена хостов, но мои 4 поддомена субдоменов, кажется, хорошо работают с переизданным SSL? Очевидно, что использование «* .mydomain.com» в качестве понятного имени позволяет вам видеть имя хоста, но оба варианта должны работать. В противном случае IIS должен прямо указывать нам использовать квалифицированное доменное имя, а не понятное имя?
Чарльз Робертсон

10

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

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

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


Спасибо за этот ответ, Джастин. Я все еще не уверен, почему IIS7 не позволяет мне указывать заголовок узла, даже когда я выбираю один из IP-адресов в списке. IIS6 обходится без проблем. Как уже упоминалось, это единственный сайт на машине.
p.campbell

2
Заголовки хоста могут работать с сертификатом с подстановочными знаками или с многодоменным сертификатом «UC»: sslshopper.com/unified-communications-uc-ssl-certificates.html . В этом случае сервер имеет только 1 сертификат для обслуживания, хотя существует несколько имен хостов.
Руссау

Очень четкое объяснение. +1
Дан

7

Ответ 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 \ insetsrv. Возможно, вам придется оказаться в этой папке, чтобы эта команда работала.

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

Спасибо! Это помогло мне, наконец, заставить мой сайт работать в HTTPS. Я исправил опечатку в одной из команд, но мне пришлось добавить заголовок «Шаги», чтобы выполнить требования минимальной длины. Не стесняйтесь удалить это - ваш оригинальный ответ легко следовать. Ура!
картофельные пилинги

Это работало для меня с сертификатом с 6 SAN (не подстановочным сертификатом) с небольшим изменением, потому что у меня было несколько сайтов. Я должен был сделать шаги с 1 по 7 один раз. Шаг 8 должен был быть сделан на каждом сайте. Первая команда на шаге 9 должна быть выполнена один раз, а вторая команда на шаге 9 должна быть выполнена один раз для каждого сайта.
Стив Кей

4

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

Проблема

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

Решение

Ваш подстановочный 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 Manager, после чего вы сможете установить имя своего хоста.


1
Это добилось цели!
Крекер

1
@ Зак круто. Потрясающие. Потрясающие. Хотя я не думаю, что имеет значение, если поле имени хоста пустое, это дало мне больше душевного спокойствия. Пожалуйста, имейте в виду, что я переоформляю свой сертификат. Таким образом, мое имя хоста уже было в поле имени хоста, прежде чем оно стало пустым. Похоже, мой подстановочный SSL-протокол работал с понятным именем или именем типа * mydomain.com. Я думаю, что IIS ведет внутреннюю запись имени хоста, после того, как поле имени хоста становится пустым. Я думал, что должен упомянуть об этом, на случай, если люди сойдут с ума!
Чарльз Робертсон

1
@ Зак Ох И это решение работает на серверах динозавров, таких как Windows 2008R2 ...
Чарльз Робертсон

@CharlesRobertson очень рад, что это помогло, и спасибо за добавление этой дополнительной информации!
Зак

2

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

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


1

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

Эта команда Windows создаст новую привязку с протоколом «https», на порту «443», именем хоста «subdomain.domain.com», именем сайта «site name». Измените эти значения (в кавычках) в соответствии с вашими требованиями. Затем вам нужно будет удалить старую привязку, если она использует порт 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']


0

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


-1

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

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


Не применяется к IIS 7.
davidcl

это странно, так как это сработало, когда мы это сделали ...
Джим Б.

-1

Почему MS забирает этот OUT GUI, мне не понятно, поскольку, если у вас есть приложение ASP.NET, использующее файлы лицензий (licx), ваш сайт не будет работать, поскольку он отображается в виде IP-адреса вместо имени домена. , Они должны перестать предполагать на каждой новой версии своего программного обеспечения - ИТ-специалисты не должны присматривать за Microsoft! Geez!


-2
  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/ ».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.