:: Не фоксом единым
Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Есть WEB-сервис. Работает - претензий нет. Но, вот пришли безопасники, и сказали "надо защитить сервис - включить SSL, и прописать сертификат". Причём сертификат не самоподписаный, а "по всей строгости PKI". Ну, делать нечего - надо выполнять. Зашёл в "Диспетчер служб IIS \ Сертификаты сервиса" нажал "Создать запрос сертификата...", указал что требуется (согласно бумажке безопасников) и отправил им получившийся файл. В ответ получил корневой сертификат УЦ (открытый ключ), и сертификат сайта (открытый и закрытый ключи). Добавил сертификаты в реестр, убедился, что для всех выводится "Этот сертификат действителен". Затем в "Диспетчер служб IIS " поменял для сайта привязку - указал протокол HTTPS и сертификат сайта. Нарисовал на C# тестовый клиент, в клиенте прописал сертификат сайта. Запустил - работает. Поставил галочку "Требовать SSL" для начальной страницы - работает. Т.е. SSL запустился. Теперь надо, что бы сервер "принимал" сертификат от клиента. Установил "Сертификаты клиента = Требовать", и ... вижу сообщение "Не удалось установить безопасный канал для SSL/TLS с полномочиями 'myComp.myBank.srv'".

Вопрос - есть какие то логи - где можно посмотреть, что именно пошло не так?
Что можно попробовать?
Что почитать?
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
В клиенте надо вообще-то именно сертификат КЛИЕНТА прописывать, а не сервера. Для чего потребуется добавить сертификат вашего УЦ в "доверенные корневые сертификаты", а сам сертификат клиента (включая приватный ключ!) в "мои личные сертификаты" - и всё это на той машине, на которой будет работать клиент. Плюс ко всему придётся потом помудохаться с crl-ями, т.е. списками отзыва - обычно такие "корпоративные" или, как у нас, "государственные" УЦ генерят тонны инфы об отозванных сертификатах, и потому ставят весьма короткие "сроки жизни" для crl-ей - т.е. клиенты постоянно стоят раком, т.к. им нужно постоянно обновлять эти самые crl-и
Надеюсь нечто типа вот этого в плане теории уже читал?
Посмотри eventlog, может как раз твоя проблема там и будет видна


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
В клиенте надо вообще-то именно сертификат КЛИЕНТА прописывать, а не сервера.
У меня сейчас клиент и сервер - один и тот же компьютер. Или, так нельзя? Могу на другой комп перенести.

Igor Korolyov
Для чего потребуется добавить сертификат вашего УЦ в "доверенные корневые сертификаты", а сам сертификат клиента (включая приватный ключ!) в "мои личные сертификаты" - и всё это на той машине, на которой будет работать клиент.
Это есть.

Igor Korolyov
Плюс ко всему придётся потом помудохаться с crl-ями, т.е. списками отзыва - обычно такие "корпоративные" или, как у нас, "государственные" УЦ генерят тонны инфы об отозванных сертификатах, и потому ставят весьма короткие "сроки жизни" для crl-ей - т.е. клиенты постоянно стоят раком, т.к. им нужно постоянно обновлять эти самые crl-и
Да, есть такой файлик, безопасники присылали. Честно говоря, что с ним делать - даже ума не приложу. Полез читать теорию.
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Можно и на одном, я полагаю. Только "клиент" лучше запускать под аккаунтом не имеющим приватного ключа сервера в Personal списке. Лучше, конечно же, на отдельной машине тестировать - для удобства виртуальной.
Без актуальных crl сам сертификат будет в "невалидном" состоянии.
Вообще обычно делают 3 уровня сертификатов - корневой (он "безотзывный" и ставится в "доверенные корневые"), под ним "промежуточный", и на 3-м уровне уже "клиентские". Для корневого тогда не нужен километровый "список отзыва" - он переезжает на уровень "промежуточного".


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
Можно и на одном, я полагаю. Только "клиент" лучше запускать под аккаунтом не имеющим приватного ключа сервера в Personal списке.
В общем, мысль была такая - что бы одну пару "закрытый+открытый" ключ использовать и на клиенте, и на сервере. Если так нельзя, буду использовать для клиента другую пару ключей. Только, сразу возникает вопрос - должны ли эти парю ключей быть как то связаны?

Igor Korolyov
Только "клиент" лучше запускать под аккаунтом не имеющим приватного ключа сервера в Personal списке.
Personal список это "Личное"?

Вот тут не понятно. В консоли видно, что сертификат можно установить в "Сертификаты - текущий пользователь" и "Сертификаты (Локальный компьютер)". Серверный сертификат устанавливал через "Диспетчер служб IIS \ Сертификаты сервера \ Запрос установки сертификатов", после чего он [сам] попал в "Сертификаты (Локальный компьютер)". А вот какой использовать ключ клиенту, указывается в конфигурационном файле:

<configuration>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="endpointCredentialsBehavior">
<clientCredentials>
<clientCertificate findValue="myComp.myBank.srv"
storeName="My"
storeLocation="LocalMachine" <!-- Сертификаты (Локальный компьютер) -->
x509FindType="FindBySubjectName" />

Соответственно, к "Сертификаты - текущий пользователь" вообще нет обращения. Зачем запускать клиента под другим аккаунтом? Впрочем, для чистоты эксперимента подниму виртуалку и перенесу туда клиента.
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
Плюс ко всему придётся потом помудохаться с crl-ями, т.е. списками отзыва - обычно такие "корпоративные" или, как у нас, "государственные" УЦ генерят тонны инфы об отозванных сертификатах, и потому ставят весьма короткие "сроки жизни" для crl-ей - т.е. клиенты постоянно стоят раком, т.к. им нужно постоянно обновлять эти самые crl-и

У банка свой "карманный" УЦ - безопасники мне на мой запрос (сформированный из "Диспетчера служб IIS ") выдали сертификат (в котором открытый и закрытый ключи), который заверенный УЦ. Сертификат (с открытым ключём) УЦ мне то же дали. Система двухуровневая. Зачем они ещё "список отзыва" (clr-файл) дали, ума не приложу. Разве без "списка отзыва" сертификаты не будут работать? Сейчас везде вижу "Этот сертификат действителен" - или это не гарантия работоспособности ключа? На сколько понимаю, "список отзыва" надо установить в "Промежуточные центры сертификации \ Список отзыва сертификатов" - завтра попробую установить.
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
На виртуальной машине установил сертификат с парой ключей (открытый и закрытый) в "Сертификаты - текущий пользователь" - ключи иные, чем на сервере. Установил программу-клиент, в конфиге указал storeLocation="Currentuser". Картина точно такая же, как при локальном запуске клиента - если установить "Сертификаты клиента=Игнорировать" работает, если "требовать", то точно такое же сообщение об ошибке.
Проверил "Журналы Windows", в "Система" появилась запись "Возникло следующее неустранимое предупреждение: 80. Внутреннее состояние ошибки: 961."

- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="Schannel" Guid="{1F678132-5938-4686-9FDC-C8FF68F15C85}" />
<EventID>36888</EventID>
<Version>0</Version>
<Level>2</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x8000000000000000</Keywords>
<TimeCreated SystemTime="2016-11-09T07:16:27.526950000Z" />
<EventRecordID>153856</EventRecordID>
<Correlation />
<Execution ProcessID="748" ThreadID="4124" />
<Channel>System</Channel>
<Computer>myComp.myBank.srv</Computer>
<Security UserID="S-1-5-18" />
</System>
- <EventData>
<Data Name="AlertDesc">80</Data>
<Data Name="ErrorState">961</Data>
</EventData>
</Event>

Какое то малоинформативное сообщение



Исправлено 1 раз(а). Последнее : S-type, 09.11.16 10:26
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Какой то более информативное сообщение об ошибке можно получить?

Может, у меня программа-сервер неправильно написана? В конфигурационном файле указал:

<services>
<service name="MyService.MyService" >
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="secureHttpBinding"
contract="MyService.IMyService"/>
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="None"
proxyCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
</bindings>

Может, надо указать clientCredentialType="Certificate"?
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
S-type
В общем, мысль была такая - что бы одну пару "закрытый+открытый" ключ использовать и на клиенте, и на сервере. Если так нельзя
Нельзя. Не, может быть "теоретически" оно и можно, но это совершенно противоестественная ситуация для асимметричных криптоалгоритмов.
S-type
должны ли эти парю ключей быть как то связаны?
Хз. Возможно они должны иметь в цепочке доверия общий сертификат (например корневой), но я не уверен что это обязательное условие. Главное - чтобы сервер "доверял" тому УЦ который выпустил клиентский сертификат. Ну и, соответственно, "клиент" должен доверять тому УЦ который выпустил "серверный" сертификат. Понятно что своим собственным сертификатам, точнее их УЦ (Certificate Authority по ангельски) каждый из них априори "доверяет" - иначе их было бы не установить
S-type
Personal список это "Личное"?
Наверное. У меня не локализованная винда
S-type
А вот какой использовать ключ клиенту, указывается в конфигурационном файле:
storeLocation="CurrentUser" я полагаю... Для клиента. Под другим аккаунтом (отличным от того под которым ты сам сервис рисуешь/кодишь) как раз чтобы не пересекаться с этим "серверным" сертификатом... Но лучше таки виртуалка для тестов. Либо клиента, либо сервер туда выноси (и тогда убирай его ключ с хоста), и не ставь "чужие" ключи на неё. К сертификатам УЦ это не относится - по идее если у тебя оба ключа от одного УЦ, то его сертификат (корневой, + возможно промежуточный, если таковой есть) нужно обязательно ставить - и именно в "доверенные корневые". Там ещё по идее можно это же замутить через "Корпоративные доверенные" и групповые политики домена, но я так полагаю что в итоге то всё это хозяйство должно работать и с машинами вне вашего домена... Так что лучше тренируйся именно помещая сертификат УЦ в просто "доверенные корневые".
S-type
Зачем они ещё "список отзыва" (clr-файл) дали, ума не приложу. Разве без "списка отзыва" сертификаты не будут работать?
Не будут. Просто большинство сертификатов включают в себя указание на "источник" этого самого crl и система автоматом всё проверяет/обновляет. Плюс к тому есть онлайн-система проверки OCSP - она по сути заменяет статические списки отзыва, но требует наличия специального сервиса отвечающего на соответствующие "запросы статуса". Вообще в рамках любой "системы с открытыми ключами" (PKI) одним из важнейших моментов является "отзыв/аннулирование" ранее выданных ключей/сертификатов. Ну вот "потерял" клиент USB-ключ или там смарт-карту (а может это хацкер злой её украл?) - как другие узнают что документам подписанным этим ключом более нельзя доверять? Так что онлайн система проверки или списки отзыва это важнейший механизм... Другое дело что для гигантов отрасли всё это хозяйство уже встроено в ОС - и там не нужно вручную ни сами сертификаты CA ни их списки отзыва устанавливать... Даже в банальный браузер и то встроено полсотни сертификатов основных мировых УЦ, и он (браузер) умеет проверять статусы "подлежащих" сертификатов (т.е. тех которые были выданы данным УЦ) и грозно ругаться на "небезопасный сайт"


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ошибка 36888 от SChannel говорит о том, что при создании защищённого туннеля произошёл сбой.
Про ErrorState 961 гугл даёт эту ссылку
У тебя, часом, не используется КриптоПро? Ну или другой какой нестандартный криптопровайдер или даже целая система криптозащиты...
Вообще я бы попробовал поиграться отключая старинные SSL протоколы (по идее их вообще ВСЕ нужно отключить, актуальными являются TLS а SSL2/SSL3 уже устарели и считаются небезопасными).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Почитал - в конфигурации клиента действительно надо указать clientCredentialType="Certificate". Но, это не спасло.

Igor Korolyov
У тебя, часом, не используется КриптоПро?
Да, именно он. @#$%#$%@#$^$%^$%^%^&%^$$%^ (цензура)

Спасибо за ссылку - полез читать.
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
А, ну с нашими "доморощенными" криптопровайдерами это и не удивительно что не заработало сразу

Авестовские (производства РБ), к примеру, долгое время не дружили сами с собой Они выпустили 2 варианта для разных госструктур, вероятно с разными УЦ, или хз ещё чем. Ставишь один - работает, ставишь второй - отваливается первый. Переустанавливаешь первый - второй не работает

Сейчас тоже идёт эпопея с защищёнными коммуникациями - такого качества софта я давно не видал - отборнейшее де*мо Если сами криптопровайдеры ещё куда ни шло - за столько лет вроде поисправляли самое страшное (хотя они нехило за***вают пользователей этими самыми "обновлениями crl-ей" - при том что местные гении даже специальную кнопку впендюрили в свой GUI управления для этого самого "обновления". До того всё ручками было - скачай с хз какого сайта, запусти их GUI и добавь туда вручную), то клиентско-серверная часть собственно этого "продукта" работающая как раз через TLS со взаимной аутентификацией - это что-то с чем-то!
В общем самое мягкое что я могу сказать по этому поводу, это П**РАСЫ !1!1!


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
В "Диспетчере служб IIS" включаю "Требовать SSL" и "Требовать". Клиент возвращает "Запрос HTTP запрещен для схемы аутентификации клиентов "Anonymous"." Что ему не нравится? В какую сторону копать?
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Скачал SoapUI, скормил ему pfx, и выяснил - с сервисом проблем нет, сервис работает! Выходит, проблема в коде клиента. Клиента брал с msdn.microsoft.com . Попробую переписать клиента кодом.
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Такой вот вопрос возник. Можно ли из VS добавлять в проект ссылки на службы, защищённые сертификатом? Вопрос можно сформулировать иначе - как VS сказать, какой надо "подсовывать" сервису нужный сертификат (в виде pfx или в виде findValue+storeLocation+storeName+x509FindType)?
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
В "Компоненты Windows" для "Службы IIS" можно включить "Трассировка", "Настраиваемое протоколирование", "Монитор запросов".

[attachment 26309 s4.png]

А где потом можно настроить протоколирование и увидеть результаты трассировки? Где находится "монитор запросов"?
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
Ошибка 36888 от SChannel говорит о том, что при создании защищённого туннеля произошёл сбой.
Про ErrorState 961 гугл даёт эту ссылку
У тебя, часом, не используется КриптоПро?

Если идти по ссылке, то видно:

Цитата:
Поставьте последнюю версию CSP 4.0. Или нужно установить криптопровайдер уровня ядра из CSP.

И действительно - если при установке КриптоПро выбрать "Выборочно" и включить "Криптопровайдер уровня ядра ОС", то сервер видит клиентский сертификат и всё работает отлично.

Спасибо за ссылку.
Ratings: 0 negative/0 positive
Re: Не удалось установить безопасный канал для SSL/TLS
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
S-type
А где потом можно настроить протоколирование и увидеть результаты трассировки? Где находится "монитор запросов"?

Для начальной страницы в "Действия" появляется пункт "Трассировка невыполненных запросов" в которой можно включить трассировку. Там же виден путь %SystemDrive%\inetpub\logs\FailedReqLogFiles
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 9 (Гостей: 9)

© 2000-2024 Fox Club 
Яндекс.Метрика