如何在使用SSLEngine之前获取请求的域名


我想

在确定要发回哪个证书之前在java中获取域名。 我怎样才能做到这一点?

我需要自己以某种方式分析字节吗? 还是有这个库? 或者一些java SSL库可以做到吗?

相关文章从 TLS 客户端 hello 中提取服务器名称指示 (SNI(

但我希望只使用 java 库来获取主机名。

很难解释,这不可能直接用SSLEngine来完成。

我自己也遇到了同样的问题,最终编写了一个库(TLS 通道(。它不仅这样做,它实际上是SSLEngine的完整抽象,作为ByteChannel公开。关于SNI,可以向服务器通道提供一个功能,根据提供的域名选择SSLContexts。

在使用SSLEngine.之前不需要它 在自定义KeyManager实现中,在chooseServerAlias()方法中需要它。您需要通过下面列出的技术之一发现域名,然后创建您的X509KeyManager实现,正确配置以返回适当的密钥库别名,然后构造一个SSLContext,使用您的KeyManager初始化它,然后构造您的SSLEngine. 在握手期间,引擎将调用您的密钥管理器。

  1. 斯尼。如果客户端支持 SNI,您可以从初始ClientHello消息中获取域名,如链接所示。分析ByteBuffer后,您需要将其还原到以前的状态,以便SSLEngine也可以分析它。

  2. 否则,您依赖于每个域的 IP 地址不同。您必须已经有一个SocketChannel,,因此您已经知道连接的目标地址,即客户端用于通过SocketChannel.getLocalAddress()连接到您的地址,因此,如果您的域具有不同的IP地址,您所能做的就是从中映射域名。

相关内容

  • 没有找到相关文章