2015-12-30 5 views
5

Я отслеживаю печально известное «исключение SSL» из единичного теста - в том же исключении генерируются текущие тесты в ReSharper, nunit из консоли под моей учетной записью и на тестах интеграции сервера сборки. Локально код запускается с компьютера Windows 7 с установленным .NET 4.5.1.«Не удалось создать защищенный канал SSL/TLS», хотя отчеты SCHANNEL «Успешно завершено квитирование SSL-сервера».

System.Net.WebException: запрос был прерван: не удалось создать безопасный канал SSL/TLS.

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

IIS настроен требовать сертификаты клиента и подключение HTTPS к та же конечная точка «Грин» в Chrome. Если я выберу недействительный клиентский сертификат в Chrome, я получаю сообщение 403 из IIS, поданное через успешно созданное соединение HTTPS.

Вопросы:

  • Почему (как может) создание канала защищенного SSL/TLS сбой после того, как "Рукопожатие успешно завершена"?

  • Является ли HTTP 403 запрещенным ответом статуса и возможна обработка WebClient такого фактора? Если нет, этот запрос может быть отменен.

  • Что является хорошим следующим шагом в отладке проблемы? Есть ли определенное контролируемое событие для указания успеха (или неудачи) после начального согласования?


Вот что было собрано во время устранения проблем, выявленных в других постах:

  • Это конец дерева исключения; есть no внутренний «Удаленный сертификат недействителен в соответствии с процедурой проверки». Исключение составляет то, что I будет ожидать от ошибки сертификата.

  • С 'всех лесозаготовок' для SCHANNEL включен сервер показывает

    Сервер рукопожатия SSL успешно завершена. Согласованные криптографические параметры заключаются в следующем.

    Протокол TLS 1.0/CipherSuite: 0x5/Обмен прочность: 2048

  • Протокол SSL рукопожатия/переговоров от модульного тестирования неисправной 'выглядит успешным' на Wireshark. (Он не идентичен запросу Chrome и имеет другой согласованный CipherSuite.)

  • Время ожидания HTTP-клиента составляет 100 секунд, которое должно быть по умолчанию.


Слегка забавным, первый тест является недостаток ShouldCompleteSslHandshakeFor[InvalidClientCert].


UPDATE: После просмотра локального просмотра событий машины (не спрашивайте, почему это только что произошло со мной) имеются соответствующие записи для неисправного соединения:

(SCHANNEL) Произошла фатальная ошибка при попытке доступа к секретному ключу учетных данных SSL-клиента. Код ошибки, возвращаемый из криптографического модуля, равен 0x8009030d. Внутреннее состояние ошибки 10003.

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

+0

Имеет ли процесс веб-клиента доступ к закрытому ключу сертификата клиента? (Щелкните правой кнопкой мыши свой сертификат в консоли MMC -> Все задачи -> Управление приватными ключами). – Alex

+0

@Alex Я только что нашел ошибку в локальном средстве просмотра событий, поэтому я думаю, что это определенно что-то вроде этого - я сейчас пытаюсь. – user2864740

+0

@Alex У нас есть победитель (спасибо)! Доступ имел только Администратор; предоставленный Read для всех локальных пользователей (=^_^=) исправил исключение. Теперь у меня есть что-то, чтобы пойти в OPs. Я также задаюсь вопросом, может ли код читать клиентский сертификат не лучший. Я бы предпочел, чтобы он сначала использовал сертификаты в моем личном магазине, и, когда они были в обоих местах, я поставил несколько слепых на меня. – user2864740

ответ

4

Убедитесь, что процесс доступа к сертификату клиента имеет доступ к закрытому ключу сертификата.

MMC консоль с плагином Certificate -> Щелкните правой кнопкой мыши указанный сертификат -> Все задачи -> Управление закрытыми ключами.

+0

Это действительно проблема. Урок дня: также посмотрите журналы * local * schannel (и других событий). – user2864740

2

Ответы на мои вопросы:

Почему (как может) создание канала защищенного SSL/TLS сбой после того, как "Рукопожатие успешно завершена"?

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

Является ли HTTP 403 запрещенным ответом статуса и возможной обработкой WebClient такого фактора? Если нет, этот запрос может быть отменен.

No. Ошибка вызвана сбоем шифрования SSL/TLS, прежде чем обработчик сервера будет даже вызван. Это был ошибочный вопрос, который хватался за соломинку.

Что является хорошим следующим шагом в отладке проблемы? Есть ли определенное контролируемое событие для указания успеха (или неудачи) после начального согласования?

Посмотрите в соответствующих журналах событий - в данном случае это был SCHANNEL журналами для локальной машины, где сообщение об критической ошибке было сообщаются. Вероятно, ошибка также была бы найдена, если enabling tracing as discussed here.

Смежные вопросы