.net VB请求被中止:无法创建SSL/TLS安全通道

.net VB请求被中止:无法创建SSL/TLS安全通道,.net,vb.net,ssl,.net,Vb.net,Ssl,我有一个Visual Basic客户端程序,该程序在对HttpWebRequest的实例执行GetRequestStream时会出现“请求已中止:无法创建SSL/TLS安全通道”异常。当服务器允许的协议为“SSLProtocol all-SSLv2-SSLv3”且客户端程序根本没有设置ServicePointManager.SecurityProtocol属性时,此程序就可以工作 服务器已更改为允许“SSLProtocol+TLSv1.2-TLSv1.1-TLSv1-SSLv2-SSLv3”。最

我有一个Visual Basic客户端程序,该程序在对
HttpWebRequest
的实例执行
GetRequestStream
时会出现“请求已中止:无法创建SSL/TLS安全通道”异常。当服务器允许的协议为“SSLProtocol all-SSLv2-SSLv3”且客户端程序根本没有设置
ServicePointManager.SecurityProtocol
属性时,此程序就可以工作

服务器已更改为允许“SSLProtocol+TLSv1.2-TLSv1.1-TLSv1-SSLv2-SSLv3”。最初,程序没有设置
ServicePointManager.SecurityProtocol
。在服务器被更改后,我得到了上面的异常,所以我添加了

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12
但还是得到了上面的例外

使用VB.NET、VS2013和目标4.5框架,我认为TLS1.2需要该框架

异常状态为

SecureChannelFailure{10}
System.Net.WebExceptionStatus

我看到了一篇关于日志记录的帖子,打开了详细跟踪,我可以看到与证书的握手。下面是跟踪失败的尾部部分:

系统.Net信息:0:[6792]安全通道#54616604- 证书类型为X509Certificate2,包含私钥

系统.Net信息:0:[6792]AcquireCredentialsHandle(包= Microsoft统一安全协议提供程序,意图=出站,scc =System.Net.SecureCredential)

系统.Net信息:0:[6792] 初始化安全上下文(凭证)= System.Net.SafeFreeCredential\u安全性,上下文 =1bb58fc0:1cff780,targetName=paygate-dev1.eaglesoa.com,inFlags=ReplayDetect,SequenceDetect,机密性,分配内存, 初始化(确认)

系统.Net信息:0:[6792] InitializeSecurityContext(缓冲区内计数=2,缓冲区外长度=173, 返回的代码=ContinueNeeded)

系统.Net信息:0:[6792] 初始化安全上下文(凭证)= System.Net.SafeFreeCredential_安全性,上下文=1bb58fc0:1cff780, targetName=paygate-dev1.eaglesoa.com,flaggs=ReplayDetect, 序列检测、机密性、分配内存、, 初始化(确认)

系统.Net信息:0:[6792] InitializeSecurityContext(缓冲区内计数=2,缓冲区外长度=0, 返回的代码=非法消息)

System.Net错误:0:[6792]HttpWebRequest中出现异常#63403007::-请求被中止:无法创建SSL/TLS安全通道..

System.Net错误:HttpWebRequest中出现0:[6792]异常#63403007::EndGetRequestStream-请求被删除 中止:无法创建SSL/TLS安全通道。

下面是客户端程序的一小部分:我还尝试了
SecurityProtocol
列表中的tls和ssl3,
Expect100Continue
True
False
(在其他帖子中看到了这一点),
AutoRedirect
True
False
。异常发生在显示的最后一条语句
loWebRequest.GetRequestStream()
。在工作时,使用的证书与以前相同。如果服务器将其允许的协议更改回原始值(请参见上文),则可以正常工作。我还将证书添加到证书存储中。你知道我需要对客户做什么吗

Dim loDataToSend As System.IO.Stream
Dim loWebRequest As HttpWebRequest

ServicePointManager.SecurityProtocol = SecurityProtocolType.tls or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12

ServicePointManager.Expect100Continue = True

loWebRequest = DirectCast(HttpWebRequest.Create(lsSystemURL), HttpWebRequest)

With loWebRequest
    .Method = "POST"
    .ClientCertificates = lcCertificates
    .Credentials = CredentialCache.DefaultCredentials
    .UseDefaultCredentials = False
    .ContentLength = lsRequest.Length
    .KeepAlive = False
    .AllowAutoRedirect = True
    .Timeout = 100000
End With

loDataToSend = loWebRequest.GetRequestStream()