我想使用充气城堡TLS库使用套接字在服务器和客户端之间进行通信。 我浏览了很多文档(对我来说不够用),但我不知道该怎么做,
我正在使用 BouncyCastle v1.7.48 (运行时版本= v2.0.50727)二进制文件, 我找到了这些信息,
我必须使用Org.BouncyCastle.Crypto.Tls
命名空间和TlsProtocolHandler
类。
要实现TLS通信,
我应该在客户端使用什么API?
System.IO.Stream inputStream, outputStream;
TlsProtocolHandler tls = new TlsProtocolHandler(inputStream, outputStream);
参数inputStream
和outputStream
是什么?
public virtual void Connect(TlsClient tlsClient);
其中,TlsClient
是一个界面,包含许多界面 。
4。如何使用上面的API?我必须在其中声明新类并实现方法吗?
请帮助我这个充气城堡。
编辑1:
我创建了一个继承自名为DefaultTlsClient
的抽象类的类。
然后我可以创建我的类的实例并将其传递给接口引用。
所以我可以像这样发送参数。 tls.Connect(tlsClient);
我没有初始化除上面提到的任何参数。 (在2055年这些操作之前连接插座) 但我不确定握手是否完整。我的课程将进入阅读状态。
答案 0 :(得分:11)
充气城堡中没有服务器端TLS API。您可以在主页上阅读它们仅支持客户端。
对于客户端,您已经找到了正确的课程。 TlsProtocolHandler
完成了这项工作,但没有自定义课程就无法工作。以下是示例代码:
// Need class with TlsClient in inheritance chain
class MyTlsClient : DefaultTlsClient
{
public override TlsAuthentication GetAuthentication()
{
return new MyTlsAuthentication();
}
}
// Need class to handle certificate auth
class MyTlsAuthentication : TlsAuthentication
{
public TlsCredentials GetClientCredentials(CertificateRequest certificateRequest)
{
// return client certificate
return null;
}
public void NotifyServerCertificate(Certificate serverCertificate)
{
// validate server certificate
}
}
class Program
{
static void Main(string[] args)
{
TcpClient client = new TcpClient();
client.Connect(IPAddress.Loopback, 6000);
// input/output streams are deprecated, just pass client stream
TlsProtocolHandler handler = new TlsProtocolHandler(client.GetStream());
handler.Connect(new MyTlsClient());
// handshake completed
// use handler.Stream.Write/Read for sending app data
Console.ReadLine();
}
}
我已经使用我的tcp服务器对此进行了测试并收到了客户端问候。
请记住它是版本1.0中的TLS,所以如果你需要其他版本或服务器api,那么我建议使用其他库(.NET框架支持TLS)。