繁体   English   中英

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

[英]vb Could not establish secure channel for SSL/TLS

我正在做一个我没有写,已经继承的项目,并且有一个我不确定如何解决的问题。 我的背景不是.NET,所以请原谅听起来不正确的内容,因为我可能不知道正确的术语是什么。

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

到目前为止,我们只需要连接到GET请求的http(非安全)网址即可。 为了安全起见,我们现在需要将这些地址切换到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版本(也许是全部?)未包括在内。 我缺少某些东西会导致该函数无法调用吗?

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

  • 还有其他可以使用的Request方法吗?

对于从这里出发的任何帮助或指导,我们将不胜感激!

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

或更改服务器上的证书以匹配设备上的“受信任的根”之一。 默认情况下,设备附带的信任CA数量很少,而桌面浏览器几乎包含世界上每个CA。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM