O Java 7 desativa o TLS 1.1 e 1.2 para clientes. Da arquitetura de criptografia Java Documentação dos provedores Oracle :
Embora o SunJSSE na liberação Java SE 7 suporte TLS 1.1 e TLS 1.2, nenhuma versão é ativada por padrão para conexões do cliente. Alguns servidores não implementam a compatibilidade direta corretamente e se recusam a conversar com os clientes TLS 1.1 ou TLS 1.2. Para interoperabilidade, o SunJSSE não habilita o TLS 1.1 ou TLS 1.2 por padrão para conexões do cliente.
Estou interessado em habilitar os protocolos em uma configuração geral do sistema (talvez por meio de um arquivo de configuração), e não em uma solução por aplicativo Java.
Como habilito administrativamente o TLS 1.1 e 1.2 em todo o sistema ?
Nota : desde POODLE, eu gostaria de desativar administrativamente o sistema SSLv3. (Os problemas com o SSLv3 são anteriores ao POODLE há pelo menos 15 anos, mas o Java / Oracle / Developers não respeitava as práticas recomendadas básicas, para que usuários como você e eu ficassem limpando a bagunça).
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:
Você pode simplesmente adicionar a propriedade a seguir,
-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.fonte
export JAVA_OPTS="-Dhttps.protocols=TLSv1.1,TLSv1.2"
o setenv.sh do Tomcat habilita o TLSv1 e o TLSv2 para todas as conexões SSL feitas a partir de aplicativos no servidor de aplicativos.Você pode tentar adicionar algo como o seguinte ao 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: https://blogs.oracle.com/java-platform-group/entry/java_8_will_use_tls
fonte
No Java 7 no Mac OS X, você acessa
System Preferences > Java
e o Java Control Panel é aberto em uma janela separada. Então você vai para aAdvanced
guia, role para baixo até aAdvanced Security Settings
seção e marque as caixas de seleçãoUse TLS 1.1
eUse TLS 1.2
.fonte
SSLSocket
(e presumo que isso aconteça com outros programas Java), o TLS 1.0 está ativado (e o TLS 1.1 e 1.2 estão disponíveis).javac ProtocolTest.java && java ProtocolTest
em um terminal. Veja o que aparece em Protocolos ativados .Eu pesquisei isso recentemente e quero adicionar - isso não funcionará para o JDK, o deployment.properties relevante apenas 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");
fonte
Parece que as configurações de deployment.security. * Funcionam para os Java Applets e os programas Java Web Start em execução em uma área de trabalho. Como outras pessoas mencionam aqui, você pode editar deployment.properties para especificar isso.
Aqui está um artigo que mostra como usar uma política de grupo para implantar o mesmo arquivo deployment.properties para todos os usuários: http://www.darkoperator.com/blog/2013/1/12/pushing-security-configuration-for- java-7-update-10-via-gpo.html
Infelizmente, não há como ativar isso em todos os programas java em um computador que chame diretamente java.exe ou javaw.exe. Você precisa encontrar cada programa que usa java, encontrar o arquivo de configuração onde especifica os parâmetros a serem passados para java e alterá-lo.
Para Tomcat tivemos que passar isso para que as conexões do Tomcat para outros servidores usar TLS 1.1+:
-Dhttps.protocols=TLSv1.1,TLSv1.2
. No Linux, isso pode ser feito editandobin/catalina.sh
ou criandobin/setenv.sh
.Não sei o que é preciso para fazer o Tomcat usar apenas o TLS 1.2 no lado do servidor. Nós enfrentamos o Apache HTTP.
fonte
Se você estiver com o Java 7, poderá adicionar
-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2
aos argumentos da JVM.Observe que isso tem várias ressalvas:
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 que se interessa usa TLS, mas não é HTTPS, por exemplo, LDAPS.
[ATUALIZAÇÃO] Na minha empresa, que executa seu pool de servidores no Ubuntu, percebemos que nem a atualização 121 do OpenJDK 7 era suficiente para implementar isso corretamente. Atualizamos todos os servidores para atualizar 181 antes que funcionasse.
fonte