vb Не удалось установить безопасный канал для SSL / TLS - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю над проектом, который я не написал, унаследовал, и у меня есть проблема, которую я не совсем понимаю, как ее решить. Мой опыт работы не в .NET, поэтому, пожалуйста, извините за все, что звучит неправильно, поскольку я могу не знать, какой должна быть правильная терминология.

Мы используем Visual Studio 2008 для компиляции проекта, работающего в Windows CE 6.0. Мы используем Compact Framework v2.0. Программное обеспечение работает на встроенном процессоре в промышленной среде, подключенной к сети (WIFI). Основной интерфейс написан на VB, а все вспомогательные библиотеки написаны на C #.

До настоящего момента нам требовалось только подключаться к http (незащищенным) веб-адресам для запросов GET. Теперь у нас есть требование переключить эти адреса на https (безопасный) для безопасности.

HttpWebRequest создается / отправляется из VB. Когда я предоставляю код с адресом https, я получаю сообщение об ошибке «Не удалось установить безопасный канал для SSL / TLS» в теме.

Вот код для этого запроса:

                            Dim myuri As System.Uri = New System.Uri(sUrl)
                            Dim myHttpwebresponse As HttpWebResponse = Nothing
                            Dim myhttpwebrequest As HttpWebRequest = CType(WebRequest.Create(myuri), HttpWebRequest)
                            myhttpwebrequest.KeepAlive = False
                            myhttpwebrequest.Proxy.Credentials = CredentialCache.DefaultCredentials
                            myhttpwebrequest.ContentType = "text/xml"
                            myhttpwebrequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
                            myhttpwebrequest.AllowAutoRedirect = False
                            myhttpwebrequest.Timeout = 150000
                            Dim mycred As NetworkCredential = New NetworkCredential(username, password)
                            Dim myCredentialCache As CredentialCache = New CredentialCache()
                            myCredentialCache.Add(myuri, "Basic", mycred)
                            myhttpwebrequest.Credentials = myCredentialCache
                            myhttpwebrequest.Method = "GET"
                            myhttpwebrequest.ProtocolVersion = HttpVersion.Version10
                            ServicePointManager.CertificatePolicy = New AcceptServerNameMismatch
                            myHttpwebresponse = CType(myhttpwebrequest.GetResponse(), HttpWebResponse)

За последний день я прочитал довольно много, и это указывает на то, что CertificatePolicy - это место, где я могу переопределить классы ICertificatePolicy, чтобы по существу проверить все запросы SSL. Определенно небезопасно и не идеально, но я не уверен в другом способе обработки этих запросов.

Мой класс для этого:

Public Class MyCertificatePolicy
        Implements ICertificatePolicy

    Public Shared DefaultValidate As Boolean = True
    Public Sub trustedCertificatePolicy()
    End Sub

    Public Function CheckValidationResult(ByVal srvPoint As ServicePoint, _
       ByVal cert As X509Certificate, ByVal request As WebRequest, ByVal problem As Integer) _
       As Boolean Implements ICertificatePolicy.CheckValidationResult
        Return True
    End Function
End Class

К сожалению, когда ответ возвращается, он никогда не вызывает CheckValidationResult (). Таким образом, нет проверки и ошибки.

Так что мои вопросы ...

  • «Правильный» способ сделать это в соответствии со всем, что я прочитал, - это использовать ServerCertificateValidationCallback. К сожалению, с версией Compact Framework, которую мы используем (может быть, все?), Она не включена. Не хватает ли чего-то, что могло бы вызвать вызов этой функции?

  • Опять же, из того, что я прочитал, я считаю, что Framework, на котором мы работаем, не поддерживает TLS v1.1 или v1.2. Какие самые современные серверы работают. Есть ли способ в VB обойти это?

  • Есть ли другой способ запроса, который можно использовать?

Любая помощь или руководство относительно того, куда идти отсюда, очень ценится!

1 Ответ

0 голосов
/ 24 мая 2018

Вам необходимо установить доверенный корневой сертификат на устройстве, которое соответствует SSL-сертификату на вашем сервере.

Или измените сертификат на сервере, чтобы он соответствовал одному из доверенных корней на устройстве (ах). По умолчанию устройства поставляются с очень небольшим количеством доверенных ЦС, в отличие от настольных браузеров, которые содержат практически все ЦС в мире.

...