Java 7 带来了对 SNI 的客户端支持。是否存在已知的 SNI 服务器角色的开源实现?Java 提供“透明支持”TLS 连接(包括握手),但我需要解耦握手过程,以便我可以根据 SNI 主机名扩展发回证书。
在网上找不到文档后,我查看了 OpenJDK 源代码,但似乎没有一点可以在 Java 发送 ServerHello 消息之前监控 ClientHello 消息。
Java 7 带来了对 SNI 的客户端支持。是否存在已知的 SNI 服务器角色的开源实现?Java 提供“透明支持”TLS 连接(包括握手),但我需要解耦握手过程,以便我可以根据 SNI 主机名扩展发回证书。
在网上找不到文档后,我查看了 OpenJDK 源代码,但似乎没有一点可以在 Java 发送 ServerHello 消息之前监控 ClientHello 消息。
我前段时间做了一个快速破解:https ://bitbucket.org/zmarcos/sniserversocket
如果您按照说明操作:https ://bitbucket.org/zmarcos/sniserversocket/wiki/Home
它甚至可以在 Glassfish 等 Java EE 服务器上运行。
我不知道 Java 7 的已知开源实现,但Java 8 中将提供服务器 SNI 支持。如果您将此移植到 Java 7,我很想知道。
我自己也遇到了同样的问题,最后写了一个开源库:TLS Channel。该库的范围实际上更大:它是 SSLEngine 的完整抽象(很难直接使用),将其公开为 ByteChannel。
关于 SNI,该库在创建 SSLEngine 之前解析第一个字节。然后,用户可以向服务器通道提供一个函数,以根据接收到的域名选择 SSLContexts。