Я работаю над проектом, который я не написал, унаследовал, и у меня есть проблема, которую я не совсем понимаю, как ее решить. Мой опыт работы не в .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 обойти это?
Есть ли другой способ запроса, который можно использовать?
Любая помощь или руководство относительно того, куда идти отсюда, очень ценится!