Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
带套接字tcp的C#ssl/tls_C#_Ssl_Tcp - Fatal编程技术网

带套接字tcp的C#ssl/tls

带套接字tcp的C#ssl/tls,c#,ssl,tcp,C#,Ssl,Tcp,我是C#development的新手。我试图通过tcp使用ssl/tls,但在我的代码中,system.net.sockets.socket(裸套接字)未使用tcpclient或tcplistner。我已经在网上搜索了至少200个链接,但我没有得到任何相关的。我想使用较少的编码,通过tcp套接字连接完成ssl或tsll。我有客户端,服务器,ca证书,密钥在。密钥格式。请提供示例或链接帮助。如果您想了解更多详细信息,可以提问。您应该能够使用包装套接字,然后包装网络流 Socket socket;

我是C#development的新手。我试图通过tcp使用ssl/tls,但在我的代码中,system.net.sockets.socket(裸套接字)未使用tcpclient或tcplistner。我已经在网上搜索了至少200个链接,但我没有得到任何相关的。我想使用较少的编码,通过tcp套接字连接完成ssl或tsll。我有客户端,服务器,ca证书,密钥在。密钥格式。请提供示例或链接帮助。如果您想了解更多详细信息,可以提问。

您应该能够使用包装套接字,然后包装网络流

Socket socket;
Stream networkStream = new NetworkStream(socket);
Stream sslStream = new SslStream(networkStream);

为什么不想使用
TcpClient
?使用
TcpClient
Ssltream
创建SSL连接非常简单。除非您需要数千个同时连接,否则我将坚持使用
TcpClient
SSLStream

基本的
TcpClient
SslStream
示例如下:

static void Main(string[] args)
{
    string server = "127.0.0.1";
    TcpClient client = new TcpClient(server, 443);

    using (SslStream sslStream = new SslStream(client.GetStream(), false,
        new RemoteCertificateValidationCallback(ValidateServerCertificate), null))
    {
        sslStream.AuthenticateAsClient(server);
        // This is where you read and send data
    }
    client.Close();
}

public static bool ValidateServerCertificate(object sender, X509Certificate certificate,
X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return true;
}
在.NET中编写高性能套接字代码可能很困难,但也有一些很好的例子。你有很多选择。我不确定一个解决方案是否适合所有人,所以我将在这里列出一些解决方案

  • 使用计算机可能是一个好的开始
  • 您可以利用一些现有的库。我已经用过了,但是我不认为它从2009年起就已经更新了。有人说会有第二版,但我不相信它会实现
  • 我对它不熟悉,但CodeProject有
  • 回顾微软的指南
  • 阅读Stephen Toub要说的所有内容,包括
  • 我没有特别提到SSL,而是研究了
    SslStream

    您还需要研究缓冲池。如果你为成千上万的客户服务,垃圾收集将是一个问题。这方面的一个很好的介绍是



    以前

    在这个回答中投入了如此多的精力,但遗憾的是,这根本不能回答问题。这个答案看起来很简单。只有一个疑问:这是否意味着在像这样包装套接字之后,我们不应该使用socket.send(),而应该始终使用sslStream?我这样问是因为我已经有了一个使用Begin/End进行发送/接收的异步套接字的工作项目,而且工作正常。使用SSL只是应用程序中的一个选项,所以我试图弄清楚需要做多少更改才能实现它。任何帮助都将不胜感激。非常感谢。绝对是的,仅使用ssl流,否则数据将无法被另一方正确读取。您可以使用此来商定密钥,然后通过连接使用AES。创建并加密字节,然后像平常一样发送它们。