带套接字tcp的C#ssl/tls
我是C#development的新手。我试图通过tcp使用ssl/tls,但在我的代码中,system.net.sockets.socket(裸套接字)未使用tcpclient或tcplistner。我已经在网上搜索了至少200个链接,但我没有得到任何相关的。我想使用较少的编码,通过tcp套接字连接完成ssl或tsll。我有客户端,服务器,ca证书,密钥在。密钥格式。请提供示例或链接帮助。如果您想了解更多详细信息,可以提问。您应该能够使用包装套接字,然后包装网络流带套接字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;
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中编写高性能套接字代码可能很困难,但也有一些很好的例子。你有很多选择。我不确定一个解决方案是否适合所有人,所以我将在这里列出一些解决方案
SslStream
类
您还需要研究缓冲池。如果你为成千上万的客户服务,垃圾收集将是一个问题。这方面的一个很好的介绍是
以前 在这个回答中投入了如此多的精力,但遗憾的是,这根本不能回答问题。这个答案看起来很简单。只有一个疑问:这是否意味着在像这样包装套接字之后,我们不应该使用socket.send(),而应该始终使用sslStream?我这样问是因为我已经有了一个使用Begin/End进行发送/接收的异步套接字的工作项目,而且工作正常。使用SSL只是应用程序中的一个选项,所以我试图弄清楚需要做多少更改才能实现它。任何帮助都将不胜感激。非常感谢。绝对是的,仅使用ssl流,否则数据将无法被另一方正确读取。您可以使用此来商定密钥,然后通过连接使用AES。创建并加密字节,然后像平常一样发送它们。