弹性城堡TLS API的使用
本文关键字:API TLS 城堡 | 更新日期: 2023-09-27 18:15:02
我想使用使用弹性城堡TLS库的套接字在服务器和客户端之间进行通信。我看了很多文档(这对我来说是不够的),但我不知道怎么做,
我使用BouncyCastle v1.7.48(运行时版本=v2.0.50727)二进制,我找到了这些信息,
我必须使用,Org.BouncyCastle.Crypto.Tls
命名空间和TlsProtocolHandler
类。
要实现TLS通信,
- 我应该在服务器端使用什么API ?
我应该在客户端使用什么API ?
System.IO.Stream inputStream, outputStream; TlsProtocolHandler tls = new TlsProtocolHandler(inputStream, outputStream);
inputStream
和outputStream
参数是什么
public virtual void Connect(TlsClient);
式中, 4。如何使用上述API?我必须声明新的类和实现方法里面的所有? 请帮我做这个充气城堡。 编辑1:我创建了一个继承自抽象类 除了上面提到的,我没有初始化任何参数。(套接字在2055年这些操作之前连接)但我不确定握手是否完整。我的程序将进入读取状态TlsClient
为接口,且在内部包含多个接口。DefaultTlsClient
的类。然后我可以创建类的实例并将其传递给接口引用。我可以这样发送参数。tls.Connect(tlsClient);
bouncy castle中没有服务器端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服务器测试了这个,并收到了客户端hello。
请记住它是1.0版本的TLS,所以如果你需要其他版本或服务器api,那么我建议使用其他库。. NET框架支持TLS)