服务器角色中的服务器名称指示(SNI)的Java支持?

时间:2013-02-26 22:12:46

标签: java sni

Java 7带来client support for SNI。是否有已知的SNI服务器角色的开源实现? Java提供“transparant支持”TLS连接(包括握手),但我需要解耦握手过程,以便我可以根据SNI host_name扩展名发回证书。

在找不到在线文档之后,我查看了OpenJDK源代码,但是在Java发送ServerHello消息之前,我似乎无法监视ClientHello消息。

3 个答案:

答案 0 :(得分:4)

我前段时间做了一个快速的黑客攻击:https://bitbucket.org/zmarcos/sniserversocket

如果您按照说明操作:https://bitbucket.org/zmarcos/sniserversocket/wiki/Home

它甚至可以在像Glassfish这样的Java EE服务器上运行。

答案 1 :(得分:1)

我不知道Java 7的已知开源实现,但服务器SNI支持是coming in Java 8。如果你将它反向移植到Java 7,我很想知道。

答案 2 :(得分:0)

我自己遇到了同样的问题,最后编写了一个开源库:TLS Channel。库的范围实际上更大:它是SSLEngine的完全抽象(严重难以直接使用),将其暴露为ByteChannel。

关于SNI,库在创建SSLEngine之前解析第一个字节。然后,用户可以向服务器通道提供功能,根据收到的域名选择SSLContexts。