弹性城堡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 ?
  1. 我应该在客户端使用什么API ?

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

public virtual void Connect(TlsClient);

式中,TlsClient接口,且内部包含多个接口

4。如何使用上述API?我必须声明新的类和实现方法里面的所有?

请帮我做这个充气城堡。

编辑1:我创建了一个继承自抽象类DefaultTlsClient的类。然后我可以创建类的实例并将其传递给接口引用。我可以这样发送参数。tls.Connect(tlsClient);

除了上面提到的,我没有初始化任何参数。(套接字在2055年这些操作之前连接)但我不确定握手是否完整。我的程序将进入读取状态

弹性城堡TLS API的使用

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)