C# Bouncy Castle TLS API的使用

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

我想使用bouncy castle TLS库使用套接字在服务器和客户端之间进行通信。 我查阅了很多文档(这对我来说是不够的),但我不知道如何做到这一点

我使用的是BouncyCastle v1.7.48(运行时版本=v2.0.50727)二进制文件, 我找到了这些信息

我必须使用,
Org.BouncyCastle.Crypto.Tls
名称空间和
tlsprotochlandler

为了实现TLS通信

  • 我应该在服务器端使用什么API
  • 我应该在客户端使用什么API

        System.IO.Stream inputStream, outputStream;
        TlsProtocolHandler tls = new TlsProtocolHandler(inputStream, outputStream);
    
  • 什么是参数
    inputStream
    outputStream

  • 公共虚拟连接(TlsClient TlsClient)

    其中,
    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。