C# 针对同一套接字的两个流的SslStream.com客户端失败
我有一个设计,其中一个C# 针对同一套接字的两个流的SslStream.com客户端失败,c#,sockets,ssl,tls1.2,sslstream,C#,Sockets,Ssl,Tls1.2,Sslstream,我有一个设计,其中一个Socket打开了两个NetworkStream:一个用于读取,一个用于写入 更新代码以开始使用sslStream时,调用sslStream.authenticatesClientAsync会为第二个流产生错误(顺序不相关) Win32Exception:提供给函数的令牌无效 Q:有没有办法让两个活动且经过身份验证的SslStream与一个套接字相对应 示例代码: NetworkStream readStream = socket.CreateReadWriteStream
Socket
打开了两个NetworkStream
:一个用于读取,一个用于写入
更新代码以开始使用sslStream
时,调用sslStream.authenticatesClientAsync
会为第二个流产生错误(顺序不相关)
Win32Exception:提供给函数的令牌无效
Q:有没有办法让两个活动且经过身份验证的SslStream
与一个套接字
相对应
示例代码:
NetworkStream readStream = socket.CreateReadWriteStream();
NetworkStream writeStream = socket.CreateReadWriteStream();
var sslR = new SslStream(readStream, false, RemoteCertificateValidationCallback, null, EncryptionPolicy.RequireEncryption);
var sslW = new SslStream(writeStream, false, RemoteCertificateValidationCallback, null, EncryptionPolicy.RequireEncryption);
var clientAuthOptions = new SslClientAuthenticationOptions
{
RemoteCertificateValidationCallback = RemoteCertificateValidationCallback,
AllowRenegotiation = true,
CertificateRevocationCheckMode = X509RevocationMode.Online,
ClientCertificates = connectionInfo.ClientCertificates,
EnabledSslProtocols = SslProtocols.Tls12,
EncryptionPolicy = EncryptionPolicy.RequireEncryption,
TargetHost = host.Address
};
//Suceeds
await sslR.AuthenticateAsClientAsync(clientAuthOptions, cancellationToken).ConfigureAwait(false);
//Fails
await sslW.AuthenticateAsClientAsync(clientAuthOptions, cancellationToken).ConfigureAwait(false);
身份验证需要双向通信,因此由
SslStream
包装的流需要是可读写的流。@StephenCleary是的,但这不是我要问的。我想知道是否有一种方法可以让两个SSL流以某种方式对一个套接字打开,而这两个套接字都具有读写功能。不,这是不可能的。我不知道你想做什么;你要求做的没有意义。转换一个旧的流,确保读取在一个后台线程中单独完成,写入一个多线程(同步)。然后它就有了意义。您只需要一个SslStream
,然后自己序列化写入。