2016-06-04 15 views
7

Bu, Java ssl Server'ımın kodu. ctx, sunucu anahtar deposuyla başlatılan bir SSLContext sürümüdür.Java SSL Sunucusu zayıf eliptik eğrileri devre dışı bırak

public SSLEngine createSSLEngine() { 

     SSLEngine sslEngine = ctx.createSSLEngine(); 

     String[] ciphersuites = new String[]{ 
       "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", 
       "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", 
       "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", 
       "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", 
       "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", 
       "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", 
       "TLS_EMPTY_RENEGOTIATION_INFO_SCSV" 
     }; 

     sslEngine.setEnabledCipherSuites(ciphersuites); 

     sslEngine.setUseClientMode(false); 

     return sslEngine; 
    } 

Ben, şifre setleri iyi görünüyorsun (https://github.com/jvehent/cipherscan) cipherscan ile test, ancak sunucu tüm olası eliptik eğrileri destekler (sect163k1, sect163r1, sect163r2, sect193r1, sect193r2, sect233k1, sect233r1, sect239k1, sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1, secp160k1, secp160r1, secp160r2, secp192k1, prime192v1, secp224k1, secp224r1, secp256k1, prime256v1, secp384r1, secp521r1).

Secp384r1 gibi güçlü olanlar dışında tüm eğrileri devre dışı bırakmanın bir yolu var mı?

cevap

0

Aynı sorunu yaşıyorum. İşte sadece kısmen sorunu çözmek benim bulgular şunlardır: RFC 3546 (TLS uzantıları) ve RFC 4492 (eliptik eğriler için TLS uzantısı) dayanmaktadır eliptik eğrileri ile

  1. TLS
  2. Java com.sun.security.ssl.HelloExtension bu uzantıları (uygular Tüm uzantıları listeleyen) ve com.sun.security.ssl.SupportedEllipticCurves (bu, izin verilen eğrilerin bir listesini sağlayan eliptik eğri uzantısıdır)
  3. Ne yazık ki, bu sınıflar JVM'ye dahil edilmiştir ve listeyi yalnızca bir parametreyle değiştirmenin bir yolu yoktur. :(
  4. Ben bir yapılandırma özelliğini. Yani 2018'i sanırım içerebilir Java 9.1 dahil edilecektir bir bugfix raporunu okumak?

OpenJDK (GPLv2 + Classpath istisna) ve Oracle lisanslarını göz ardı edilmesi JDK (burada: Java Ortamında İkili Lisans): com.sun.security.ssl.SupportedEllipticCurves

  • (buna göre listesini değiştirmek

    1. OpenJDK kodu almak, örneğin sınıf bir an için, burada teknik olarak sorunu çözmek için bir yoldur eğri kimlikleri com.sun.ec.CurveDB.java numaralı telefondan bulunabilir
    2. Bir kaviteyi derlemek
    3. Sınıfınızı değiştirilmiş eğriler listesiyle yüklemek ve JVM'yi yok saymak için Xbootclasspath:prepend kullanın.

    Ve lisans sorunu daha

  • ... Örneğin

    , iskele-alpn aracısı yapıyor. Ve GPLv2 + istisnasının altına da konur. Ben bir avukat değilim, ama açık kaynak bir proje yaratabileceğinizi, kendi işlerinizi yapabildiğinizi, GPLv2 + uzantısının altına koyabileceğinizi, sonra sadece onu kullanabileceğinizi düşünüyorum.

    6

    Java8 u121'den itibaren hangi eliptik eğrinin kullanılacağını yapılandırmak mümkündür.

    sizin programm yani .:

    -Djdk.tls.namedGroups="secp521r1, secp256r1, secp256k1" 
    

    VM başlangıçta bir parametresini kullanın Veya isterseniz bir JDK/JRE geniş politika java.security dosyasını değiştirebilir ve özellik ekleyin. diğer bir deyişle:

    referans gördüğünüz gibi
    -jdk.tls.namedGroups="secp521r1, secp256r1, secp256k1" 
    

    : http://www.oracle.com/technetwork/java/javase/8u121-relnotes-3315208.html paragraf

    "JDK EC varsayılan gücünü geliştirmek"
    İlgili konular