2013-09-03 15 views
9

Nasza aplikacja Java udostępnia wiele różnych interfejsów (SMTP, FTP, HTTP), zabezpieczonych przez SSL/TLS. Celem jest teraz ograniczenie dozwolonych na tych interfejsach szyfrów, aby zawierały tylko te "silne". Mam już listę i to jest jasne, w jaki sposób to zrobić pracę dla danego gniazdaOgraniczanie zestawów szyfrów na poziomie JRE

socket.setEnabledCipherSuites(ENABLED_SECURE_CIPHER_SUITES); 

lub złącza Tomcat

<Connector port="443" ciphers="..."/> 

Problem polega na tym, że istnieje już 5 miejsc w aplikacji gdzie powinien zastosuj to ograniczenie manualnie. Common SocketFactory nie wydaje się pomóc, ponieważ nie zawsze możliwe jest dostarczenie niestandardowego SocketFactory do zewnętrznego interfejsu API lub środowiska. Czy jest możliwe jakoś wprowadzić to ograniczenie na poziomie JRE, np. z konfiguracją lub plikiem reguł dostawcy JCE?

JRE: Oracle JRE 1.7.0_17

+0

Definicja "strong". Java ogranicza już włączone zestawy algorytmów szyfrowania. Czy znasz [Właściwości sieciowe] (http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html)? – EJP

+0

To pytanie nie dotyczy siły określonych szyfrów. Mam stałą listę dozwolonych szyfrów i nie mogę tego zmienić. Na przykład RC4 jest w ogóle niedozwolone. Domyślne ograniczenia Java nie wystarczą. Sprawdziłem także właściwości sieci, ale nie znalazłem żadnych właściwości związanych z pakietami szyfrów. – Jk1

+0

Patrz Przewodnik referencyjny JSSE. – EJP

Odpowiedz

9

Cóż, udało mi się dostać, że praca. Dzięki EJP za wskazanie we właściwym kierunku. Ponieważ Java 1.7 istnieją dwie dodatkowe właściwości w $ JRE_HOME/lib/security/java.security:

jdk.certpath.disabledAlgorithms=MD2 

Sterowanie algorytmy budowania ścieżek certyfikacji i walidacji.

jdk.tls.disabledAlgorithms=MD5, SHA1, RC4, RSA keySize < 1024 

Ograniczenia algorytmu JVM dla przetwarzania SSL/TLS, którego szukałem. Notacja jest tu dość oczywista; można zabronić pewnych algorytmów lub ograniczyć rozmiary kluczy. Obie właściwości są obsługiwane w Oracle JRE 7, Open JRE 7 i (zaskakująco) IBM Java v7