Как стать автором
Обновить

Комментарии 11

НЛО прилетело и опубликовало эту надпись здесь
Напомнило историю о том, что электронные письма не уходили далее 600 миль.
А там была не винда.
К у меня Windows основная претензия не в том, что там происходят не всегда понятные штуки, а в том, что в ситуации когда что-то пошло не так, не понятно, куда копать.
Т.е. вроде все нормально, но ничего не работает:
  • в логах тишина,
  • диагностику добавлять некуда;
  • исходный код подсмотреть нельзя.
Там у большого количества утилит есть выдача в разные Trace и TraceSource, но собирать их надо заранее да и разбираться в них то еще удовольствие =(.
Но в целом — это все обычно есть, просто нет сильно удобных инструментов сбора и анализа.
В данном случае — проблема не в Windows Server. У них нет своего Windows Server. Есть сервис на его базе, который кто-то как-то настраивает на основе пожеланий заказчика, записанных в некоей мета-конфигурации. Сервер сам куда-то лезет в интернет, сам что-то откуда-то скачивает. Такое решение хромает на обе ноги в плане безопасности, а уж стабильности от такого самообновляющегося решения ожидать совсем странно.
В остальном: тривиальная ошибка конфигурации, на которую открытым текстом указали все возможные диагностические системы. Вместо того, чтобы первым делом проверить единственное, над чем в такой системе есть контроль — конфигурационный файл, стали проверять текущее состояние отдельных самообновляющихся экземпляров.
Исправив, наконец, конфигурацию, я так понимаю (этот момент не совсем понятен из текста), забыли, что необходимо перевыпустить все экземпляры, и с испугу откатили обновления.

Никаких диагностических сообщений в журналах в такой ситуации быть не могло — на сервер установили действительный сертификат. Какова цепочка доверия между корневыми сертификатами, установленными у каждого отдельно взятого *клиента* и этим сертификатом сервер знать не может. Может предположить на основе своих корневых сертификатов (которые, например, могут вообще быть все удалены в некоторых конфигурациях), но не более того.
Дим, а поделиться этим легендарным кодом который теперь проверяет «все правильно и надежно» слабо? А то ты его в статье упоминаешь несколько раз, так что вполне ожидаемо что в конце будет — «А вот вам правильный надежный кода». А там только «Теперь у нас есть код...»
Кстати так и непонятно, почему решение с установкой всех промежуточных сертификатов вручную не работает — по логике все эти загрузки и крипто-кэши дергаются только тогда, когда нету сертификата с определенным thumbprint в хранилищах. А если ты его устанавливаешь при развертывании роли — какие могут быть проблемы? Можешь развернуто рассказать что там в деталях ломается, если вы разобрались так глубоко.

По логике — сертификаты из csdef устанавливаются и развертываются до развертывания кода на IIS, иначе он бы ругался на попытку binding к неустановленному сертификату — зачем бы IIS вообще ходить к центру сертификации если все есть локально ( если только не за проверкой, не отозваны ли какие-либо сертификаты в цепочке.
Код проверки, что сертификаты правильно разложены по хранилищам, вызывает X509Chain.Build(), затем проходит по коллекции X509Chain.ChainElements и проверяет, что каждый из сертификатов лежит в соответствующем хранилище (вызывает X509Store.Open(), затем проверяет, что сертификат присутствует в X509Store.Certificates, затем вызывает X509Store.Close()). Я не стал приводить этот код, чтобы не перегружать пост.

«Решение с установкой вручную» очень хорошо работает, нужно просто перечислить промежуточные сертификаты в определении сервиса.
ссылка на какой-нибудь битбакет не перегрузила бы пост, честно
Большой вам респект и уважуха за то, что не бросили расследование на первом же WINе. Очень хорошо представляю себе, какой был соблазн. Получился настоящий детектив для гиков, где до самого конца неясно, кто уби… в смысле где грабли зарыты.
НЛО прилетело и опубликовало эту надпись здесь
Все сертификаты цепочки обычно выпущены одним и тем же центром — и корневой (он «самоподписанный»), и промежуточные (один или несколько), и сертификат сервиса. Сервис должен отдавать клиентам все сертификаты кроме корневого в этой цепочке.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий