Java 7带来client support for SNI。是否有已知的SNI服务器角色的开源实现? Java提供“transparant支持”TLS连接(包括握手),但我需要解耦握手过程,以便我可以根据SNI host_name扩展名发回证书。
在找不到在线文档之后,我查看了OpenJDK源代码,但是在Java发送ServerHello消息之前,我似乎无法监视ClientHello消息。
答案 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。