我正在尝试创建一个不会在客户端握手中发送server_name
的JVM HTTP客户端(长话说,但是我正在模拟一个不支持SNI的旧系统)。
设置serverNames
SSLParameters
并不能解决问题,我仍然可以在Wireshark中看到“服务器名称指示扩展名”。
fun run() {
val keyStore = keyStore()
val trustFactory =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
trustFactory.init(keyStore)
val sslContext = SSLContext.getInstance("SSL")
sslContext.init(null, trustFactory.trustManagers, null)
val httpClient = HttpClient.newBuilder()
.sslContext(sslContext)
.sslParameters(sslContext.defaultSSLParameters.apply {
serverNames = null
})
.build()
val request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/hello"))
.GET()
.build()
httpClient.send(request, HttpResponse.BodyHandlers.ofString())
}
this gist.中的完整代码
如何阻止客户端发送SNI扩展名?
答案 0 :(得分:1)
如果您不介意将设置应用于整个JVM,请尝试
jsse.enableSNIExtension=false