2017-03-15 345 views
0

我有一个遗留的Visual Studio 2010 vb.net应用程序,我需要更新SSL TLS通道以支持TLS 1.2。我尝试了几个不同的选项(请参阅评论代码尝试),并且所有这些都导致我出现相同的错误,“无法创建SSL/TLS安全通道”。我错过了什么?SSL TLS 1.2通道创建VB.net HTTPS WebRequest

Public Shared Function processCCRequest(ByVal strRequest As String) As String 
    'declare the web request object and set its path to the PayTrace API 

    Dim ThisRequest As WebRequest = WebRequest.Create("https://beta.paytrace.com/api/default.pay") 
    'configure web request object attributes 
    ThisRequest.ContentType = "application/x-www-form-urlencoded" 
    ThisRequest.Method = "POST" 

    'encode the request 
    Dim Encoder As New System.Text.ASCIIEncoding 
    Dim BytesToSend As Byte() = Encoder.GetBytes(strRequest) 

    'declare the text stream and send the request to PayTrace's API 
    Dim StreamToSend As Stream = ThisRequest.GetRequestStream 
    StreamToSend.Write(BytesToSend, 0, BytesToSend.Length) 
    StreamToSend.Close() 

    ''ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; 
    ''allows for validation of SSL conversations 
    ''ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf) 
    ServicePointManager.Expect100Continue = True 
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls 
    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls 
    ''| SecurityProtocolType.Tls11 | SecurityProtocolType.Tls 
    ''var(response = WebRequest.Create("https://www.howsmyssl.com/").GetResponse()) 
    ''var(body = New StreamReader(response.GetResponseStream()).ReadToEnd()) 


    'Catch the response from the webrequest object 
    Dim TheirResponse As HttpWebResponse = ThisRequest.GetResponse 

    Dim sr As New StreamReader(TheirResponse.GetResponseStream) 
    Dim strResponse As String = sr.ReadToEnd 

    'Out put the string to a message box - application should parse the request instead 
    ' MsgBox(strResponse) 

    sr.Close() 
    Return strResponse 
End Function 

非常感谢您的建议!

+1

我认为.NET 4.5中增加了TLS 1.2支持,所以你需要安装它,然后在4.0代码中使用'ServicePointManager.SecurityProtocol = DirectCast(3072,SecurityProtocolType)'解决方法。 – Mark

+0

是的,在我的回答中,我根据这些信息进一步完成了我的任务。 –

回答

0

从Microsoft下载并安装.net 4.6 Targeting Pack后,我完全成功。这增加了完整的.net升级,包括TLS 1.2支持并添加了.Net 4.6作为发布选项。一旦我升级并发布,上面的代码与安全协议设置为TLS 1.2一起工作。

相关问题