首頁>Program>source

我有一个在Java 7上執行的https web服務。我需要进行更改,以便该服務仅接受tls1.2連線並拒绝ssl3,tls1.0和tls1.1。

我添加了以下java引數,以使tls1.2具有最高優先順序。

-Dhttps.protocols=TLSv1.2

,但它也接受来自Java客戶端的tls1.0連線.如果客戶端也使用上述java引數執行,則連線為tls1.2,但如果客戶端不使用此引數執行,則連線為tls1.0。

我在jdk / jre / lib / security檔案夹中的java.security檔案週圍做了一些工作。

我目前有以下禁用的演算法:

jdk.certpath.disabledAlgorithms= MD2, MD4, MD5, SHA224, DSA, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224
jdk.tls.disabledAlgorithms=DSA, DHE, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224

我使用的是Java 7更新79。我不倾向於拦截每个連線並檢查tls版本。

我的服務器證书是使用RSA演算法的MD5生成的2048位。

如果禁用的演算法列表使用RSA代替RSA keySize<2048,我將收到帶有錯誤訊息的SSLHandShakeError:没有通用的密碼套件。

我的測試程式正在从以下URL執行http服務器: http://www.herongyang.com/JDK/HTTPS-HttpsEchoer-Better-HTTPS- Server.html

請帮助如何使Java仅接受tls 1.2連線。

最新回復
  • 5月前
    1 #

    我找到了解決方案.我設置了

    jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSv1.1
    

    在服務器上的檔案jre / lib / security / java.security中。

    設置此選項後,服務器仅接受TLS1.2連線,並拒绝较低的安全協議版本。

  • 5月前
    2 #

    仅需說明一下;

    在問题中,您說您使用MD5生成了2048大小的證书.但是在證书路徑alg中,您禁用了MD5,因此這通常不起作用.其次,現代瀏覽器(例如Internet Explorer 10 / Edge)禁止使用MD5雜湊生成的服務器證书.

    我建議您至少使用SHA256或<雜湊值生成服務器證书.

  • 5月前
    3 #

    我在" /java/jdk1.7.0_79/jre/lib/security"-java.security檔案中也做了相同的更改,但是某些客戶端仍然可以使用SSL協議呼叫我的服務

    ----更改 jdk.tls.disabledAlgorithms = SSL,SSLv2,SSLv3,TLSv1,TLSv1.1,MD5,SSLv3,DSA,RSA keySize<2048

  • 如何在Meteor應用之間共享MongoDB集合?
  • c:是否有等效於fdopen的windows的windows?