基于 JSSE 示例,我试图在服务器端获取 TLS 参数“服务器名称指示”(SNI)的值 - 没有成功。我确定该值是由客户端发送的,因为我使用了显示该值的网络嗅探器(Wireshark)。
但是当我使用以下代码片段时,服务器名称参数列表为空(同时显示了“协议”):
public void connectionAccepted(Socket socket)
{
System.out.println("Connection accepted!");
try {
/* get SNI parameter */
SSLSocket sslSocket = (SSLSocket)socket;
SSLParameters sslParams = sslSocket.getSSLParameters();
List<SNIServerName> serverNames = sslParams.getServerNames();
for(SNIServerName item : serverNames){
System.out.println("SNI: " + item.toString());
}
String[] protocols = sslParams.getProtocols();
for(String item : protocols) {
System.out.println("Protocols: " + item.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}