gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:39 27 4
gpt4 key购买 nike

我正在从事一个我没有编写、继承的项目,并且有一个我不确定如何解决的问题。我的背景不是 .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 请求。绝对不安全,也不理想,但我不确定处理这些请求的另一种方法。

我的类(class)是:

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 中有解决这个问题的方法吗?

  • 是否有其他请求方法可以使用?

非常感谢任何关于从这里去哪里的帮助或指导!

最佳答案

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

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

关于vb.net - vb 无法为 SSL/TLS 建立安全通道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50050581/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com