我正在研究一个我没写过的项目,继承过,并且有一个我不确定如何解决的问题。我的背景不在.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方法?
非常感谢任何有关从何处出发的帮助或指导!
答案 0 :(得分:0)
您需要在设备上安装与服务器上的SSL证书匹配的受信任根证书。
或者更改服务器上的证书以匹配设备上的某个受信任的根。默认情况下,设备附带的可信CA数量非常少,与世界上几乎所有CA的桌面浏览器不同。