Я отслеживаю печально известное «исключение 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.
Это, несомненно, будет веская причина того, почему зашифрованный канал после рукопожатия терпит неудачу.
Имеет ли процесс веб-клиента доступ к закрытому ключу сертификата клиента? (Щелкните правой кнопкой мыши свой сертификат в консоли MMC -> Все задачи -> Управление приватными ключами). – Alex
@Alex Я только что нашел ошибку в локальном средстве просмотра событий, поэтому я думаю, что это определенно что-то вроде этого - я сейчас пытаюсь. – user2864740
@Alex У нас есть победитель (спасибо)! Доступ имел только Администратор; предоставленный Read для всех локальных пользователей (=^_^=) исправил исключение. Теперь у меня есть что-то, чтобы пойти в OPs. Я также задаюсь вопросом, может ли код читать клиентский сертификат не лучший. Я бы предпочел, чтобы он сначала использовал сертификаты в моем личном магазине, и, когда они были в обоих местах, я поставил несколько слепых на меня. – user2864740