当前位置: 首页 > 知识库问答 >
问题:

Bouncy Castle TLS API用法

马俊
2023-03-14

要实现TLS通信,

>

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

        System.IO.Stream inputStream, outputStream;
        TlsProtocolHandler tls = new TlsProtocolHandler(inputStream, outputStream);
    

    参数InputStreamOutputStream是什么?

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

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

  • 共有1个答案

    乐正浩博
    2023-03-14

    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。

     类似资料:
    • 问题内容: 编辑:“ 我从’erickson’那里收到了一个非常相关的答案,但是存在一个附带问题(向上投射?),这个问题在我的原始示例中并未明确涵盖,并且无法用他的答案解决。我将该示例扩展到涵盖了另一个问题,我已在本文结尾处将其包括在内。感谢您的帮助。 我目前面临Java泛型的问题,该问题与所谓的“好奇地重复的通用模式”有关。在阅读了Jon Skeet对这个问题“ java枚举定义”的答案之后,我

    • 本文向大家介绍php中引用&的用法分析【变量引用,函数引用,对象引用】,包括了php中引用&的用法分析【变量引用,函数引用,对象引用】的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php中引用&的用法。分享给大家供大家参考,具体如下: php的引用(就是在变量或者函数、对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的

    • 本文向大家介绍使用 iisext.vbs 启用应用程序的方法,包括了使用 iisext.vbs 启用应用程序的方法的使用技巧和注意事项,需要的朋友参考一下 应用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1 可以使用命令行脚本 iisext.vbs(存储在 systemroot\system3

    • 有人能告诉我用两种不同的方法调用同一个函数的区别,以及编译器在这两种情况下到底做了什么;比如:

    • 我的问题是关于JMeter和BeanShell后处理程序。 我已经用Eclipse开发了一个Java项目,并将该项目导出到一个JAR中。我已经把这个jar放在JMeter的/lib/ext文件夹中。 我不明白为什么当我直接调用jar时它会工作,为什么当我用JMeter做同样的事情时它不会工作。 谢谢你的帮助。

    • 本文向大家介绍蓝牙用法和应用,包括了蓝牙用法和应用的使用技巧和注意事项,需要的朋友参考一下 蓝牙使用 蓝牙的使用大致可分为三个领域: 数据和语音的接入点-蓝牙通过无线连接便携式和固定网络设备来提供实时语音和数据传输。 电缆更换-蓝牙替代了有线网络的大量电线和电缆。即使设备不在范围内,连接也可以立即建立并保持。设备的范围通常为10m。但是,可以通过使用放大器扩大范围。 Ad hoc网络-网络设备即席

    • Usage: mocha [debug] [options] [files] Options: -V, --version output the version number -A, --async-only force all tests to take a callback (async)

    • 当你面对需要用多段代码来处理一个事件的情况时,典型的解决方案有:用函数指针进行回调,或者直接对 产生事件的子系统与处理事件的子系统之间的依赖性进行编码。这种设计常常会导致循环的依赖性。通过使用 Boost.Signals, 你将获得灵活性和解耦。要开始使用这个库,首先要包含头文件 "boost/signals.hpp".[2] <small class="calibre23"></small><s