Ative o TLS 1.1 e 1.2 para clientes no Java 7

43

O Java 7 desativa o TLS 1.1 e 1.2 para clientes. De Arquitetura de criptografia Java Documentação do Oracle Providers :

Although SunJSSE in the Java SE 7 release supports TLS 1.1 and TLS 1.2, neither version is enabled by default for client connections. Some servers do not implement forward compatibility correctly and refuse to talk to TLS 1.1 or TLS 1.2 clients. For interoperability, SunJSSE does not enable TLS 1.1 or TLS 1.2 by default for client connections.

Estou interessado em ativar os protocolos em uma configuração de todo o sistema (talvez por meio de um arquivo de configuração) e não em uma solução de aplicativo Java.

Como eu ative administrativamente TLS 1.1 e 1.2 todo o sistema ?

Observação : desde POODLE, eu gostaria de desativar administrativamente o sistema SSLv3 ampla . (Os problemas com o SSLv3 são anteriores ao POODLE por pelo menos 15 anos, mas o Java / Oracle / Developers não respeita as melhores práticas básicas, portanto, usuários como eu e você ficam com a limpeza da bagunça).

Aqui está a versão do Java:

$ /Library/Java/JavaVirtualMachines/jdk1.7.0_07.jdk/Contents/Home/bin/java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
    
por jww 29.04.2014 / 06:57

6 respostas

29

Você poderia simplesmente adicionar a seguinte propriedade -Dhttps.protocols=TLSv1.1,TLSv1.2 , que configura a JVM para especificar qual versão do protocolo TLS deve ser usada durante as conexões https.

    
por 16.06.2015 / 10:08
15

Você poderia tentar adicionar algo como o seguinte ao seu script de inicialização, assumindo o Java 1.7:

JAVACMD="$JAVACMD -Ddeployment.security.SSLv2Hello=false -Ddeployment.security.SSLv3=false -Ddeployment.security.TLSv1=false -D\ deployment.security.TLSv1.1=true -Ddeployment.security.TLSv1.2=true"

Algumas outras sugestões: ligação

    
por 18.06.2014 / 18:09
8

Eu só recentemente pesquisei isso e quero adicionar - isso não funcionará para o JDK, o deployment.properties só é relevante para Applets e outras coisas em execução no JRE.

para aplicativos JDK (um servidor que precisa se conectar ao LDAP, por exemplo), o servidor é um cliente, mas o deployment.security. não funcionaria.

nenhuma maneira de alterá-lo, a menos que você escreva algum código como SSLContext.getInstance ("TLSv1.2");

    
por 05.11.2014 / 14:12
6

Para o Java 7 no Mac OS X, você acessa System Preferences > Java e o Painel de Controle do Java é aberto em uma janela separada. Em seguida, vá para a guia Advanced e role até a seção Advanced Security Settings e verifique as caixas de seleção Use TLS 1.1 e Use TLS 1.2 .

    
por 29.04.2014 / 10:46
4

Parece que as configurações de deployment.security. * funcionam para programas Java Applets e Java Web Start executados em uma área de trabalho. Como outros mencionam aqui, você pode editar deployment.properties para especificar isso.

Este é um artigo que mostra como usar uma política de grupo para implantar o mesmo arquivo deployment.properties para todos os usuários: link

Infelizmente, não há como ativar isso em todos os programas java em um computador que chama diretamente java.exe ou javaw.exe. Você tem que encontrar cada programa que usa java, encontrar o arquivo de configuração onde você especifica os parâmetros para passar para o java e alterá-lo.

Para o Tomcat, tivemos que passar isso para que as conexões do Tomcat com outros servidores usem o TLS 1.1+: -Dhttps.protocols=TLSv1.1,TLSv1.2 . No Linux, isso pode ser feito editando bin/catalina.sh ou criando bin/setenv.sh .

Eu não sei o que é preciso para fazer com que o Tomcat use apenas o TLS 1.2 no lado do servidor. Nós nos deparamos com o Apache HTTP.

    
por 18.06.2015 / 19:42
0

Se você estiver preso ao Java 7, poderá adicionar -Djdk.tls.client.protocols=TLSv1.1,TLSv1.2 aos argumentos da JVM.

Note que isso tem várias ressalvas:

  • É válido apenas a partir da atualização 95 do Java 7. Referência: link
  • Não é uma solução de todo o sistema, mesmo que possa ser definida em uma variável de ambiente (por exemplo, JAVA_OPTS ), caso em que você depende do suporte do envvar em seus aplicativos Java.

Apesar dessas deficiências, acho que isso pode ser útil, especialmente quando o protocolo em questão usa o TLS, mas não é HTTPS, por exemplo, LDAPS.

[UPDATE] Na minha empresa, que executa seu pool de servidores no Ubuntu, percebemos que mesmo a atualização 121 do OpenJDK 7 não foi suficiente para implementar isso corretamente. Atualizamos todos os servidores para atualizar 181 antes de funcionar.

    
por 04.07.2018 / 17:02