Java 7引入了默认情况下启用的SNI支持。我发现某些配置错误的服务器会在SSL握手中发送“无法识别的名称”警告,大多数客户端会忽略此警告… Java除外。如@Bob Kerns所述,Oracle工程师拒绝“修复”此错误/功能。
解决方法是,他们建议设置jsse.enableSNIExtension
属性。要允许您的程序无需重新编译即可运行,请按以下方式运行您的应用:
java -Djsse.enableSNIExtension=false yourClass
也可以在Java代码中设置该属性,但是必须在任何SSL操作之前设置该属性。加载SSL库后,您可以更改属性,但不会对SNI status产生任何影响。要在运行时禁用SNI(具有上述限制),请使用:
System.setProperty("jsse.enableSNIExtension", "false");