簡體   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