Java 7帶來client support for SNI。是否有已知的SNI服務器角色的開源實現? Java提供了「透明支持」TLS連接(包括握手),但我需要分離握手過程,以便我可以根據SNI host_name擴展名發回證書。對服務器角色中的服務器名稱指示(SNI)的Java支持?
無法找到在線文檔後,我查看了OpenJDK源代碼,但似乎沒有一點可以在Java發送ServerHello消息之前監視ClientHello消息。
Java 7帶來client support for SNI。是否有已知的SNI服務器角色的開源實現? Java提供了「透明支持」TLS連接(包括握手),但我需要分離握手過程,以便我可以根據SNI host_name擴展名發回證書。對服務器角色中的服務器名稱指示(SNI)的Java支持?
無法找到在線文檔後,我查看了OpenJDK源代碼,但似乎沒有一點可以在Java發送ServerHello消息之前監視ClientHello消息。
我不知道用於Java 7的已知開源實現,但服務器SNI支持是coming in Java 8。如果您將其移植到Java 7,我很樂意知道。
我做了一個快速的黑客前段時間:https://bitbucket.org/zmarcos/sniserversocket
如果你按照指示:https://bitbucket.org/zmarcos/sniserversocket/wiki/Home
它將工作,即使在Java EE服務器,比如GlassFish。
我自己遇到了同樣的問題,最後寫了一個開源庫:TLS Channel。庫的範圍實際上更大:它是SSLEngine的一個完整的抽象(這是認真難以直接使用),將其公開爲ByteChannel。
關於SNI,庫在創建SSLEngine之前先解析第一個字節。然後用戶可以向服務器頻道提供功能,以根據收到的域名選擇SSLContext。