C# Bouncy Castle TLS API的使用
我想使用bouncy castle TLS库使用套接字在服务器和客户端之间进行通信。 我查阅了很多文档(这对我来说是不够的),但我不知道如何做到这一点 我使用的是BouncyCastle v1.7.48(运行时版本=v2.0.50727)二进制文件, 我找到了这些信息 我必须使用,C# Bouncy Castle TLS API的使用,c#,ssl,bouncycastle,C#,Ssl,Bouncycastle,我想使用bouncy castle TLS库使用套接字在服务器和客户端之间进行通信。 我查阅了很多文档(这对我来说是不够的),但我不知道如何做到这一点 我使用的是BouncyCastle v1.7.48(运行时版本=v2.0.50727)二进制文件, 我找到了这些信息 我必须使用,Org.BouncyCastle.Crypto.Tls名称空间和tlsprotochlandler类 为了实现TLS通信 我应该在服务器端使用什么API 我应该在客户端使用什么API System.IO.Str
Org.BouncyCastle.Crypto.Tls
名称空间和tlsprotochlandler
类
为了实现TLS通信
System.IO.Stream inputStream, outputStream;
TlsProtocolHandler tls = new TlsProtocolHandler(inputStream, outputStream);
inputStream
和outputStream
TlsClient
是一个接口,该内部包含许多接口
4。如何使用上述API?我必须向所有人声明新类并在其中实现方法?
请帮我搬这座有弹性的城堡
编辑1:
我创建了一个从名为DefaultTlsClient
的抽象类继承的类。
然后我可以创建一个类的实例,并将其传递给接口引用。
所以我可以像这样发送参数<代码>tls.Connect(tlsClient)代码>
除了上面提到的以外,我没有初始化任何参数。
(在2055上进行这些操作之前,先连接插座)
但我不确定握手是否完整。我的程序将进入读取状态。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 framework支持TLS)。我找不到任何将使用上述api的测试用例。然后您可以使用我们的SecureBackbox-它附带文档、支持和示例。请验证:1。我想要TLSV1.2,我不能使用Bouncy castle
2。没有可用于TLS的服务器端api意味着,客户端我可以使用Bouncy castle。但在服务器端,我必须通过myslef或使用一些库在TCP上实现TLS(可能是.net framework或其他库)
您可以在源代码TlsProtocolHandler.cs中看到“TLS 1.0中所有高级协议的实现”,它们也在头0x0301=版本1.0中发送。我会在客户端和服务器中使用.NET。