Java 11 SSLHandshakeException com TLS 1.3: Como faço para reverter para TLS 1.2?

Soham:

Meu aplicativo é uma forma de "raspador de web", que carrega o HTML de uma página de entrada desejada usando a biblioteca Java Jsoup . Eu recentemente atualizado minha plataforma de aplicação de Java 8 a Java 11. Com esta atualização, tenho recebido vários relatos de meus clientes dizendo que eles recebem SSLHandshakeExceptions ao tentar carregar o conteúdo HTML de certas páginas. As páginas web estes ocorrem em variam de dispositivo para dispositivo, e em alguns dispositivos, meus clientes não são capazes de carregar qualquer páginas em tudo (nem http: // nem https: // webpages).

Eu tentei resolver isso de várias maneiras, mas sem sucesso:

  1. Substituir arquivo cacert do Java Runtime 11 com ficheiro cacert o Java 8 de runtime
  2. Criando um receptor de certificado SSL personalizado que aceita todos os certificados SSL, independentemente de validade (eu sei que isso é ruim para o código de produção, mas este foi apenas para fins de teste) - ver Confiando todos os certificados usando HttpClient através de HTTPS

Neste ponto, eu não sou realmente certo quais as opções a tomar, já que tenho um conhecimento limitado de SSL, TLS e HTTPS. Estes erros nunca ocorreu em Java 8, e tudo usado para funcionar bem antes da atualização para Java 11.

No meu entendimento, a única coisa Java 11 mudado sobre SSL foi a atualização para o TLS 1.3, enquanto a versão anterior do Java invocada usando TLS 1.2.

Por isso, eu gostaria de forçar Java 11 para usar TLS 1.2 em vez de TLS 1.3, como eu acredito que isso seja a causa dos SSLHandshakeExceptions. Como devo ir sobre como fazer isso?

dave_thompson_085:

Neardupe Java 11 conexão HTTPS falha com SSL HandshakeException ao usar Jsoup mas tenho alguns para adicionar.

Use Connection.sslSocketFactory (de fábrica) com um argumento adequado. Assumindo que os fornecedores / padrão padrão, você pode usar uma fábrica criada a partir SSLContext.getInstance("TLSv1.2"), provavelmente, com o TrustManager padrão e keymanager ie .init(null,null,null).

Ou conjunto jdk.tls.client.protocolsou https.protocolspor tabela 8-3 na documentação JSSE . Observe isso pode afetar qualquer outra SSL / TLS, ou outro URLConnection é para HTTPS, feita a partir da mesma JVM.

Eu ficaria surpreso se isso corrige o problema, no entanto. TLS1.3 foi adiada anos , em parte por causa dos hacks eles adicionaram por isso não falhar com sistemas legados 1.2 (ainda mais cedo e) e 'caixas'.

Acho que você gosta

Origin http://10.200.1.11:23101/article/api/json?id=385808&siteId=1
Recomendado
Clasificación