![](/img/trans.png)
[英]How can i get the username and domain name of client system in java as i can get the ip address and host name using request.getRemoteHost
[英]How can I get the domain name of the request before using SSLEngine?
在确定将使用哪个证书发回之前,我想在 java 中获取域名。 我怎样才能做到这一点?
我需要自己以某种方式分析字节吗? 或者有一个图书馆吗? 或者一些java SSL lib可以做到吗?
相关文章从 TLS 客户端 hello 中提取服务器名称指示 (SNI)
但我希望只使用 java 库来获取主机名。
很莫名其妙,这是不可能直接用 SSLEngine 做到的。
我自己也遇到了同样的问题,最终编写了一个库( TLS Channel )。 它不仅如此,它实际上是 SSLEngine 的完整抽象,公开为 ByteChannel。 关于 SNI,可以向服务器通道提供一个函数,根据提供的域名选择 SSLContexts。
在使用SSLEngine.
之前您不需要它SSLEngine.
您需要在自定义KeyManager
实现中的chooseServerAlias()
方法中使用它。 您需要通过下面列出的技术之一发现域名,然后创建您的X509KeyManager
实现,适当配置以返回适当的密钥库别名,然后构造一个SSLContext,
使用您的KeyManager
对其进行初始化,然后构造您的SSLEngine.
在握手期间,引擎将呼叫您的密钥管理器。
SNI。 如果客户端支持 SNI,您可以从初始ClientHello
消息中获取域名,如链接所示。 您需要在解析ByteBuffer
后将其恢复到其先前状态,以便SSLEngine
也可以解析它。
否则,您将依赖于每个域的 IP 地址不同。 你必须已经有一个SocketChannel,
所以你已经知道连接的目标地址,即客户端用来连接到你的地址,通过SocketChannel.getLocalAddress()
,所以你所能做的就是从中映射域名,如果您的域具有不同的 IP 地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.