2015-04-17 4 views
1

Я написал программу VB6, которая использует winhttp.dll для отправки и получения сообщений на/с удаленного сервера. Он отлично работает с различными операционными системами: Windows 2000, WinXP, Win7, Win8.vb6 winhhtp: Ошибка в поддержке Secure Channel

Недавно сервер провайдера сообщил мне, что они будут «фазы из поддержки SHA-1 сертификатов безопасности» и мне нужно «проверить, что Отпечаток увязаны с SHA-2 нового сертификата SSL.».

Что происходит сейчас, когда моя программа работает на WinXP, 7,8 - все еще в порядке. Но при работе в Windows 2000, когда я вызываю метод winhttp Send(), я получаю исключение «Ошибка в поддержке Secure Channel».

Я failey clueless по сертификатам и т. Д., И я действительно не знаю, что делать.

Мой VB6 код выглядит следующим образом:

' Connect to server  
Set m_ServerObj = New WinHttpRequest 
m_ServerObj.Open "GET", m_ServerURL_SC 

' Send request to server 
m_ServerObj.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = &H3300 
      'Unknown certification authority (CA) or untrusted root 0x0100 
      'Wrong usage            0x0200 
      'Invalid common name (CN)         0x1000 
      'Invalid date or certificate expired      0x2000 

m_ServerObj.Send xml 

The occurres об ошибке при посыла называют

+0

Пожалуйста, сообщите нам, если вам когда-нибудь удастся исправить проблему, или иначе, если вы когда-нибудь найдете то, что именно вызвало ошибку. Благодаря! – johnwait

ответ

3

ERROR_WINHTTP_SECURE_CHANNEL_ERROR: Это общая ошибка брошена когда Schannel.dll встречает SSL версия/функция/шифр/длина ключа/и т. д., он не понимает и не поддерживает, или когда сервер (в случае клиента) не будет вести переговоры ни за что, поддерживаемое клиентом. WinHttp полагается на него (который является частью ОС) для поддержки защищенных каналов SSL/TLS.

Теперь, в вашем случае, несколько причин могут объяснить эту ошибку, но поскольку подключение к рассматриваемому серверу все еще работает в Windows XP, когда оно не работает в Windows 2000, я не думаю, что этот сбой связан (пока) для этих подписей SHA-2. [подробнее в конце]

1) SSL 3.0 или TLS 1.0 отключена

Первое, что я хотел бы проверить: откройте «Свойства обозревателя» на панели управления, переключиться на вкладку «Дополнительно» , и в параметрах убедитесь, что проверены SSL 3.0 & TLS 1.0. Если вам нужно было пометить любой из двух, потребуется перезагрузка. Затем проверьте еще раз. (После этого, если он по-прежнему не удается, вы вольны отключить SSL 3.0, если вы хотите то из-за пуделем)

2) Disabled/Missing ПСУ или нет СНТ не обеспечивает поддержку необходимого шифра (ов)

Компания Schannel.dll использует доступные шифровальные наборы, предоставляемые различными поставщиками криптографических услуг (CSP), установленными на машине. Если ни один из CSP не поддерживает шифр (ы), требуемый сервером, соединение HTTPS не будет выполнено.

Я не знаю подробно разницу между точным списком шифров, доступным в Windows 2000, в сравнении с Windows XP. Ну, Я знаю, что поддержка AES была представлена ​​с Windows XP & Windows Server 2003 и поддержка SHA-2 (хэширование с использованием CryptoAPI, а не тех сертификатов SHA-2 для TLS) было представлено как часть Windows XP SP3. Что касается Windows 2000, то на странице MSDN Cipher Suites in Schannel ничего не говорится о Windows 2000, , но Список CSP, включенных в Windows 2000, можно найти на странице Microsoft CryptoAPI and Cryptographic Service Providers.Больше исследований, вероятно, даст вам больше информации о том, что поддерживается в Windows 2000, а что нет.

Если ошибка действительно связана с установленной/доступной ППО, то расхождение между Windows 2000 и Windows XP будет означать один из трех вещей: а) шифром или шифром люкс, доступный как на Windows 2000 и Windows, XP, был отключен для Schannel на тех машинах Windows 2000; прочитайте How to restrict the use of certain cryptographic algorithms and protocols in Schannel.dll, чтобы узнать, какие ключи реестра используются для отключения шифра/шифров, поэтому вы можете проверить, так ли это. b) набор шифров или шифров, доступный как на Windows 2000, так и на Windows XP, отсутствует/не зарегистрирован на этих компьютерах Windows 2000; нет простого способа проверить это, но если вы получите эту ошибку соединения на каждом компьютере Windows 2000, попробуйте, тогда c) будет иметь больше смысла. c) набор шифров, поддерживающий хотя бы один из шифров (например, AES), который требуется сервером, был введен только в Windows XP и недоступен для Windows 2000; вам тогда не повезло, если вы все равно придерживаетесь WinHttp.

К настоящему моменту вы должны иметь несколько подсказок о том, что может привести к ошибке (моя ставка: AES минимальное время требуется)

О тех SHA-2 сертификаты

Поддержка SHA-2 подписи (заменяющие SHA-1) были введены с TLS 1.2. Если вы еще не знали, только Операционные системы Windows, поддерживающие TLS 1.2 (и, следовательно, сертификаты с сигналами SHA-2) are Windows 7, Windows Server 2008 R2, Windows 8+ and Windows Server 2012. Это, конечно, не должно влиять на большинство приложений (например, Chrome использует BoringSSL, fork OpenSSL) , если не зависит от файла Schannel.dll, такого как WinHttp или большинство других компонентов Windows.

Ожидается, что сертификаты SHA-1 исчезнут к 1 января 2017 года. К тому времени все больше серверов будут переносить свои сертификаты на SHA-2, поэтому ожидает больше отказов соединения HTTPS для WinHttp под Windows XP & Windows Vista. В конце концов, это имеет смысл; поддержка Windows XP, наконец, завершилась 8 апреля 2014 года (у Microsoft уже было dropped support for Windows Vista), а последняя версия ОС Windows, не поддерживающая TLS 1.1 & 1.2, Windows Server 2008, в конце января завершилась поддержкой основного уровня.

Итак, что делать?: либо прекратите поддержку Windows 2000 & XP, либо найдите замену для WinHttp, которая использует библиотеку SSL/TLS, например. OpenSSL, регулярно обновляемый. Может быть libcurl?

Конечная нота: Если вы не используете самозаверяющий сертификат или сертификат без действительной цепочки доверия для сервера, вы действительно должны оставить WinHttpRequestOption_SslErrorIgnoreFlags в &H0& (? В противном случае, какой смысл использовать SSL/TLS)

+0

Поддержка Vista продолжается до 2017 года. – Bob77

+0

@ Bob77: Спасибо, что разъяснил мою мысль. Вы правы, я должен был написать вместо этого, что Windows Vista уже достигла конца основной поддержки в 2012 году. Поскольку предоставление поддержки TLS 1.1 или TLS 1.2 в Windows Vista будет означать добавление функции в ОС (в форме без обеспечения безопасности), вы, вероятно, никогда не увидите поддержки ни за исключением случаев, когда у вас есть расширенное соглашение о поддержке исправления с помощью службы поддержки Premier. – johnwait

+0

Хорошая точка. С подобными политиками я не уверен, что мы смеем верить Microsoft в поддержку SSL/TLS. – Bob77

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

  • Нет связанных вопросов^_^