2014-04-29 04:57:20 +0000 2014-04-29 04:57:20 +0000
50
50

Activar TLS 1.1 e 1.2 para Clientes em Java 7

Java 7 desactiva TLS 1.1 e 1.2 para Clientes. A partir de Java Cryptography Architecture Oracle Providers Documentation :

Embora a SunJSSE na versão Java SE 7 suporte TLS 1.1 e TLS 1.2, nenhuma das versões está activada por defeito para ligações a clientes. Alguns servidores não implementam correctamente a compatibilidade de encaminhamento e recusam-se a falar com os clientes TLS 1.1 ou TLS 1.2. Para a interoperabilidade, o SunJSSE não activa o TLS 1.1 ou o TLS 1.2 por defeito para as ligações com clientes.

Estou interessado em activar os protocolos numa configuração alargada ao sistema (talvez através de um ficheiro de configuração), e não numa solução por aplicação Java.

Como é que eu autorizo administrativamente TLS 1.1 e 1.2 system wide*?

Note* : desde POODLE, gostaria de desactivar administrativamente* SSLv3 system wide*. (Os problemas com o SSLv3 são anteriores ao POODLE em pelo menos 15 anos, mas Java/Oracle/Developers não respeitavam as melhores práticas básicas, por isso os utilizadores como você e eu ficamos com a limpeza da confusão).

  • *

Aqui está a versão 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)

Respostas (6)

31
31
31
2015-06-16 08:08:06 +0000

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

14
14
14
2014-06-18 16:09:55 +0000

Pode tentar adicionar algo como o seguinte ao seu script de arranque, assumindo 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: https://blogs.oracle.com/java-platform-group/entry/java_8_ww_use_tls

9
9
9
2014-04-29 08:46:24 +0000

Para Java 7 no Mac OS X, vá para System Preferences > Java, e o Painel de Controlo Java abre-se numa janela separada. Depois vai ao separador Advanced e desce até à secção Advanced Security Settings e verifica as caixas de verificação Use TLS 1.1 e Use TLS 1.2.

8
8
8
2014-11-05 13:12:56 +0000

Recentemente pesquisei isto e quero acrescentar - isto não vai funcionar para JDK , o deployment.properties só é relevante para Applets e outras coisas em execução no JRE.

para aplicações JDK (um servidor que precisa de se ligar ao LDAP por exemplo) o servidor é um cliente mas o deployment.security. não vai funcionar.

não há forma de o alterar a menos que escreva algum código como SSLContext.getInstance(“TLSv1.2”);

4
4
4
2015-06-18 17:42:31 +0000

Parece que as configurações deployment.security.* funcionam para Java Applets e programas Java Web Start executados em um desktop. Como outros mencionam aqui pode editar deployment.properties para especificar isso.

Aqui está um artigo que mostra como usar uma política de grupo para implementar o mesmo ficheiro deployment.properties para todos os utilizadores: http://www.darkoperator.com/blog/2013/1/12/pushing-security-configuration-for-java-7-update-10-via-gpo.html

Infelizmente não há maneira de ligar isto para todos os programas java num computador que chamam directamente java.exe ou javaw.exe. Tem de encontrar cada programa que utiliza java, encontrar o ficheiro de configuração onde especifica os parâmetros a passar para java e alterá-lo.

Para Tomcat tivemos de passar isto para que as ligações de Tomcat para outros servidores utilizem TLS 1.1+: -Dhttps.protocols=TLSv1.1,TLSv1.2. No Linux isto pode ser feito editando bin/catalina.sh ou criando bin/setenv.sh.

Não sei o que é preciso para que o Tomcat utilize apenas o TLS 1.2 no lado do servidor. Fazemos a frente com o Apache HTTP.

1
1
1
2018-07-04 15:02:10 +0000

Se estiver preso com Java 7, pode adicionar -Djdk.tls.client.protocols=TLSv1.1,TLSv1.2 aos argumentos da JVM.

Note que isto tem várias advertências:

Apesar destas falhas, penso que isto pode ser útil, especialmente quando o protocolo em que se está interessado utiliza TLS mas não HTTPS, e.g. LDAPS.

[UPDATE] Na minha empresa, que corre o seu pool de servidores no Ubuntu, apercebemo-nos que mesmo a actualização 121 do OpenJDK 7 não foi suficiente para implementar isto correctamente. Actualizámos todos os servidores para actualizar 181 antes de funcionar.