Bouncy Castle TLS API用法

时间:2013-05-24 04:52:38

标签: c# ssl bouncycastle

我想使用充气城堡TLS库使用套接字在服务器和客户端之间进行通信。 我浏览了很多文档(对我来说不够用),但我不知道该怎么做,

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

我必须使用Org.BouncyCastle.Crypto.Tls命名空间和TlsProtocolHandler类。

要实现TLS通信,

  1. 我应该在服务器端使用什么API?
  2. 我应该在客户端使用什么API?

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

  4.   

    public virtual void Connect(TlsClient tlsClient);

    其中,TlsClient是一个界面包含许多界面

    4。如何使用上面的API?我必须在其中声明新类并实现方法吗?

    请帮助我这个充气城堡。

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

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

1 个答案:

答案 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)。