我是C#开发的新手。我试图在tcp上使用ssl / tls,但在我的代码中,使用system.net.sockets.socket(裸套接字)而不是tcpclient或tcplistner。我已经在网上搜索了至少200个链接,但我没有得到任何相关内容。我想使用较少的编码并通过tcp套接字连接完成ssl或tsll。我有客户端,服务器,ca证书,密钥为.key格式。请帮助举例或链接。如果你有更多细节,你可以提问。
答案 0 :(得分:7)
为什么不想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编写,但有很好的例子。你有很多选择。我不确定一个解决方案是否适合所有人,所以我在这里列出一些。
我没有专门解决SSL,而是查看SslStream
类。
您还需要查看缓冲池。如果您为数千个客户服务,垃圾收集将是一个问题。对此的一个很好的介绍是Sunny Ahuwanya's Blog
http://nitoasync.codeplex.com/
之前。
答案 1 :(得分:0)
您应该可以使用System.Net.Sockets.NetworkStream
来包装套接字,然后使用System.Net.Security.SslStream
来包装网络流。
Socket socket;
Stream networkStream = new NetworkStream(socket);
Stream sslStream = new SslStream(networkStream);