vb无法为SSL / TLS建立安全通道

时间:2018-04-26 19:27:36

标签: vb.net ssl https compact-framework windows-ce

我正在研究一个我没写过的项目,继承过,并且有一个我不确定如何解决的问题。我的背景不在.NET中,所以请原谅任何听起来不正确的事情,因为我可能不知道应该是什么样的正确术语。

我们正在使用Visual Studio 2008编译在Windows CE 6.0上运行的项目。我们正在使用Compact Framework v2.0。该软件在网络(WIFI)连接的工业环境中的嵌入式处理器上运行。主UI是用VB编写的,所有支持的DLL都是用C#编写的。

到目前为止,我们只需要连接到GET请求的http(非安全)Web地址。为安全起见,我们现在要求将这些地址切换到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)

我在最后一天左右做了很多阅读,表明我可以覆盖ICertificatePolicy类以证实所有SSL请求的CertificatePolicy。绝对不安全,不理想,但我不确定处理这些请求的另一种方式。

我的课程是:

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版本(可能全部?)不包括在内。是否有一些我遗漏的东西会导致该函数不被调用?

  • 同样,根据我的阅读,我相信我们运行的框架不支持TLS v1.1或v1.2。哪些最新的服务器正在运行。 VB中有没有办法解决这个问题?

  • 是否有其他可以使用的Request方法?

非常感谢任何有关从何处出发的帮助或指导!

1 个答案:

答案 0 :(得分:0)

您需要在设备上安装与服务器上的SSL证书匹配的受信任根证书。

或者更改服务器上的证书以匹配设备上的某个受信任的根。默认情况下,设备附带的可信CA数量非常少,与世界上几乎所有CA的桌面浏览器不同。