[英]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.