IIS7: не вдається встановити ім'я хоста на сайті за допомогою SST cert та порту 443


47

Розгляньте машину Win 2008 SP2 з IIS7. Завдання полягає в застосуванні сертифіката та імені хоста до одного і єдиного Сайту на цій машині. Потрібно вказати заголовки хостів сайтуabc.123.example.com

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

IIS7 знаходить cert як доступний, але не дозволить ввести ім'я хоста. Текстове поле імені хоста ЗАВЖДИ вимкнено / переглянуте сірим кольором, навіть перед тим, як вибрати мій сервер. Я навіть видалив порт 80 за замовчуванням.

Прив’язки до сайтів

Питання: як я можу встановити ім'я хоста для цього сайту? Це справа в тому, що цей серт є дивним символом? Я розумію, що SSL-запит надходить на веб-сервер, а заголовок хоста в пакеті шифрується. Чому тоді IIS6 дозволить задавати заголовок хоста, а IIS7 - ні?

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

Відповіді:


32

Ви не можете зробити це з інтерфейсу користувача, це потрібно зробити з командного рядка. Ось приємне проходження процесу:

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


33
зручна хитрість, дайте cert дружнє ім’я, починаючи з '*', IIS не затьмарить
russau

1
Я знаю, що це по-старому, і це лише в коментарі, але ця зручна хитрість врятувала мене деяким розчаруванням. Дякую!
bpursley

45

Його працює в GUI ...

Просто переконайтесь, що "дружнє ім'я" cert, яке ви встановлюєте, те саме, що багатодоменне ім'я, яке ви створили для cert.

тобто. * .companydomain.com

якщо ви введете "Nice friendly name" для * .companydoman.com cert, при встановленні cert в IIS він затьмарить сіре поле заголовка імені хоста.

Якщо ви використовуєте * .companyname.com як дружнє ім’я, ви - золотий.

Бум.


14
Дякую за цю пораду! Якщо хтось не може перейменувати cert з IIS (може хтось?), Ви можете перейменувати cert в оснащення MMC для сертифікатів. Просто завантажте MMC, додайте оснащення сертифікатів, виберіть Обліковий запис комп’ютера, Місцевий комп'ютер. Завантаживши оснащення Сертифікатів, ви можете перейти до Certiifcates (Локальний комп'ютер)> Особисті> Сертифікати та клацніть правою кнопкою миші, щоб вибрати пункт Властивості на вашому серці. Змініть поле Дружнє ім’я на * .yoursite.com та перезавантажте оснащення менеджера IIS
Garrett

4
Здається, дружнє ім'я потрібно починати лише з "*", але може містити будь-яке інше ім'я, яке ви хочете для цього. У моєму випадку у мене був сертифікат, дійсний для декількох різних доменів, які не мали спільного кореня, окрім * .com, і давати це як дружнє ім'я здавалося дивним. Отже, я натомість назвав його тут * -my-описовим-ім'ям. І дякую @Garrett за пораду про перейменування!
wojtow

Це справжня відповідь. Ніцца
Джо Філіпс

@Garrett Чи означає це, що якщо я використовував дружнє ім’я, наприклад, "Мій домен SSL", все одно буде працювати, навіть якщо поле імені хоста порожнє. Це насправді злякало мене, коли я втратив свої імена хостів, але мої 4 піддоменні wildcard, здається, спрацюють із переоформленим SSL? Очевидно, що використання "* .mydomain.com" як дружнього імені дозволяє просто побачити ім'я хоста, але під кришкою обидва варіанти повинні працювати. В іншому випадку, IIS має чітко сказати нам використовувати кваліфіковане доменне ім’я та не дружнє ім’я?
Чарльз Робертсон

10

Коротка відповідь полягає в тому, що кожен IP може мати лише один сертифікат, прив’язаний до нього, тому прив'язка сертифікату застосовуватиметься незалежно від того, яке ім'я хоста спрямоване на цю IP-адресу. Можливість вказати ім'я хоста означає, що ви можете мати декілька комбінацій імен хостів та сертифікатів на одній і тій же IP-адресі та порту (як це можна зробити із записами, що не належать до SSL), але це не так, тому поле недоступне.

Більш повне пояснення полягає в тому, що SSL шифрує ваш трафік, і частиною цього трафіку є заголовки HTTP, які браузер надсилає серверу. Одним із таких заголовків буде заголовок "Хост", який IIS використовує для визначення, який сайт завантажувати із запитом. Оскільки сертифікат потрібно завантажити для встановлення захищеного з'єднання перед тим, як надсилаються заголовки запитів, IIS повинен вибрати сертифікат, грунтуючись лише на IP-адресі та номері порту, залишаючи заголовок "Host" на холоді як фактор визначення який сайт завантажувати, щоб вони не дозволяли вам ввести його.

Ось стаття, яка детальніше описує внутрішню роботу з'єднання SSL .


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

2
Заголовки хостів можуть працювати з символом "wildcards" або мультидоменним сертифікатом "UC": sslshopper.com/unified-communications-uc-ssl-certificates.html . У цьому випадку на сервері є лише 1 cert, який обслуговує навіть декілька імен хостів.
russau

Дуже чітке пояснення. +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. Я виправив друкарську помилку в одній із команд, але мені довелося додати заголовок Steps, щоб подолати вимоги до мінімальної довжини. Не соромтеся це усунути - ваша оригінальна відповідь легко простежити. Ура!
картопляні пілінги

Це працювало для мене з сертифікатом з 6 SAN (не сертифікатом wildcard) з невеликою варіацією, оскільки у мене було кілька сайтів. Я повинен був зробити кроки 1 - 7 один раз. Крок 8 потрібно було зробити на кожному сайті. Перше командування кроку 9 повинно бути виконане один раз, а друге командування кроку 9 - один раз для кожного сайту.
Стів Кей

4

Тут прийнята відповідь є заплутаною, і я не думаю, що це питання правильне. Це не повинно бути прийнятою відповіддю.

Проблема

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

Рішення

Ваша підстановка SSL може використовуватися з будь-яким субдоменом, вам просто потрібно переконатися, що ви запустили дружнє ім'я сертифіката *. Я вважаю за краще використовувати те саме дружнє ім’я, що і домен wildcard, наприклад, *.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, після чого ви можете встановити ім'я хоста.


1
Це зробило трюк!
Крекер

1
@Zac Awesome. Дивовижно. Дивовижно. Хоча я насправді не думаю, що це має значення, якщо поле імені хоста порожнє, це дало мені більше спокою. Будь ласка, майте на увазі, що я повторно видав свій сертифікат. Тож ім'я мого хоста вже було в полі імені хоста, перш ніж воно пропало. Моя підстановка SSL, здається, працює або з дружнім ім’ям, або. * Mydomain.com. Я думаю, що IIS зберігає внутрішню запис імені хоста, після того, як поле імені хоста буде порожнім. Я подумав, що слід згадати про це, якщо люди злякаються!
Чарльз Робертсон

1
@Zac О. І це рішення працює на серверах динозаврів, таких як Windows 2008R2 ...
Чарльз Робертсон

@CharlesRobertson дуже радий, що це допомогло, і дякую за додавання цієї додаткової інформації!
Зак

2

Насправді ви можете додати заголовок хоста через gui, але це залежить від того, як сертифікат буде названий ... якщо я надаю дружнє ім’я * .xyz.com до мого сердечного символу та виберіть цей cert, то я вміє користуватися gui. якщо дружнє ім’я є чимось на зразок xyzwildcard, і я вибираю це, то воно відображає поле хостхедера ...

Дивний дивний


1

Деякі машини не дозволять вам редагувати ім'я хоста, якщо протокол буде змінено на 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']


0

Ім'я хоста можна додати лише тоді, коли ім'я вибраного сертифіката буде подібне до імені хоста * .xyz.com, і ви можете перейменувати дружнє ім’я сертифіката на * .xyz.com з mmc (оснащення).


-1

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

Напевно, ви зможете виконати те, що ви хочете, - використовувати ключ метабази SecureBindings. Наприклад, набір cscript.exe adsutil.vbs / w3svc / websiteID / SecureBindings "ip.ip.ip.ip: 443: abc.123.mysite.com


Не поширюється на IIS 7.
davidcl

це дивно, оскільки це спрацювало, коли ми це зробили ...
Джим Б

-1

Чому MS приймає цей вихід із графічного інтерфейсу, - це не тільки мене, оскільки якщо у вас є програма ASP.NET, яка використовує файли ліцензій (licx), ваш сайт не працюватиме, оскільки він відображається як IP-адреса замість доменного імені . Їм потрібно ЗАСТОСУВАТИ ПЕРЕДБАЧЕННЯ на кожній новій версії свого програмного забезпечення - ІТ-людям не потрібно відвідувати Microsoft! Гейз!


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

  2. Я оновив файл хостів на C: \ Windows \ System32 \ drivers \ тощо 127.0.0.1 webapi.b2c.com

Тепер я можу переглядати сайт як " https://webapp.b2c.com/ "

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.