Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 针对同一套接字的两个流的SslStream.com客户端失败_C#_Sockets_Ssl_Tls1.2_Sslstream - Fatal编程技术网

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
,然后自己序列化写入。