Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java TLS:在客户端握手时禁用SNI_Java_Kotlin_Ssl - Fatal编程技术网

Java TLS:在客户端握手时禁用SNI

Java TLS:在客户端握手时禁用SNI,java,kotlin,ssl,Java,Kotlin,Ssl,我试图创建一个JVM HTTP客户端,它不会在客户端握手时发送服务器名称(说来话长,但我正在模拟一个不支持SNI的遗留系统) 设置serverNamesSSLParameters不会起作用,我仍然可以在Wireshark中看到“服务器名称指示扩展名” fun run() { val keyStore = keyStore() val trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory

我试图创建一个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())
}
完整代码输入


如何阻止客户端发送SNI扩展?

如果您不介意将该设置应用于整个JVM,请尝试

jsse.enableSNIExtension=false

您是否尝试过setHostnameVerifier(NoopHostNameVerifier.Instance)或setHostnameVerifier(new SSLSkipSNIHostnameVerifier()null表示使用默认值(即从URL发送名称或打开名称,除非sysprop说否);若要明确地发送none@KevinBoone,您是对的。请随意添加此作为答案。@dave_thompson_085不幸的是,空列表无法解决此问题。