2016-07-29 7 views
1

Ich schreibe einen Testcode (nicht HTTPS), um TLS mit JDK8 zu testen. Wenn der Test Code ausgeführt wird, verwende ich nmap-Tool zum Scannen und wie folgt Ergebnis:Wie kann ich TLSv1 deaktivieren, ohne den Quellcode zu ändern?

D:\softwares\nmap-7.12>nmap -p xxxx --script=ssl* x.x.x.x --unprivileged 


Starting Nmap 7.12 ( https://nmap.org ) at 2016-07-26 15:33 °?′óà????÷2?±ê×?ê±?? 
Nmap scan report for x.x.x.x 
Host is up (1.0s latency). 
PORT     STATE  SERVICE 
xxxx/tcp open unknown 
| ssl-enum-ciphers: 
|  TLSv1.0: 
|    ciphers: 
|      TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) -A 
|    compressors: 
|      NULL 
|    cipher preference: indeterminate 
|    cipher preference error: Too few ciphers supported 
|  TLSv1.1: 
|    ciphers: 
|      TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) -A 
|    compressors: 
|      NULL 
|    cipher preference: indeterminate 
|    cipher preference error: Too few ciphers supported 
|  TLSv1.2: 
|    ciphers: 
|      TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) -A 
|    compressors: 
|      NULL 
|    cipher preference: indeterminate 
|    cipher preference error: Too few ciphers supported 
|_ least strength: A 
MAC Address: xx:xx:xx:xx:xx:xx 


Nmap done: 1 IP address (1 host up) scanned in 3.88 seconds 


D:\softwares\nmap-7.12> 

JDK8 TLSv1.0 als Standard ermöglicht, aber ich möchte sie deaktivieren.

Protocols 
The SunJSSE provider supports the following protocol parameters: 
Protocol Enabled by Default for Client Enabled by Default for Server 
SSLv3  No(Unavailable Footnote 2)  No(Unavailable Footnote 2) 
TLSv1  Yes        Yes 
TLSv1.1  Yes        Yes 
TLSv1.2  Yes        Yes 

https://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunJSSE_Protocols

I "setEnabledProtocols" Methode der javax.net.ssl.SSLEngine Klasse auf meinem Test-Code aufrufen, kann TLSv1.0 vollkommen deaktiviert werden. Gibt es eine Möglichkeit, TLSv1.0 ohne Änderungscode zu deaktivieren? zum Beispiel über die Konfigurationsdatei.
ich versuchte mehrere Methoden wie folgen, aber niemand kann die gewünschte Wirkung :(
1. -Djdk.tls.client.protocols = TLSv1.1, TLSv1.2
2. -Ddeployment.security.TLSv1 = erzielen Hier falsche

ist die Java-Version:

java version "1.8.0_92" 
Java(TM) SE Runtime Environment (build 1.8.0_92-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode) 

Antwort

1

Sie scheinen einen Server zu schreiben, und jdk.tls.client.protocols gilt für Kunden, daher der Name, wenn auch etwas weniger offensichtlich, in Grund JavaSE ‚Einsatz‘ bedeutet, browser- or-WebStart ist eine Teilmenge des Clients

Es gibt keine Eigenschaft speziell für TLS- (oder HTTPS-) Serverprotokolle, aber die Sicherheitseigenschaft gilt sowohl für Client und Server (und alle Kontexttypen) und kann in JRE/lib/security/java.security wie auf der verknüpften Seite angegeben festgelegt werden. Achten Sie darauf, dass Sie die bestehenden Einschränkungen (insbesondere das Entfernen von SSLv3, seit 8u31) beibehalten, während Sie Ihre hinzufügen.

+0

Caveat emptor, '-d' werden * für' jdk.tls nicht * Arbeit .disabledAlgorithms', wie Sie es vorgeschlagen haben, sollte in 'java.security' gehen. – kubanczyk

0

Vielen Dank für Ihre Antwort zuerst. Wenn Sie ändern, JRE/lib/security/java.security, wird das eine globale Auswirkung haben.

Hier ist meine Lösung: Kopieren Sie JRE/lib/security/java.security in eine neue Datei, und fügen Sie TLSv1 hinzu.
dann starten JVM wie folgt aus:
java -Djava.security.properties=./java.security -jar xxxxx

Hier ist die Zusammenfassung von JRE/lib/security/java.security ist:

# 
# This is the "master security properties file". 
# 
# An alternate java.security properties file may be specified 
# from the command line via the system property 
# 
# -Djava.security.properties=<URL> 
# 
# This properties file appends to the master security properties file. 
# If both properties files specify values for the same key, the value 
# from the command-line properties file is selected, as it is the last 
# one loaded. 
# 
# Also, if you specify 
# 
# -Djava.security.properties==<URL> (2 equals), 
# 

# 
# Determines whether this properties file can be appended to 
# or overridden on the command line via -Djava.security.properties 
# 
security.overridePropertiesFile=true 
Verwandte Themen