SSL Soket'i etkinleştirmek için hangi Cipher Suites? | tutuappapks.com
İstemci ve sunucu programı arasındaki iletişimi sağlamak için Java'nın SSLSocket kullanıyorum. Sunucu programı ayrıca web tarayıcılarından HTTPS istekleri de sunar.
Göre "Java ile Kriptografiye Başlamak", sayfa 371, her zaman aramalısınız setEnabledCipherSuites senin üstünde SSLSocket / SSLServerSocket Anlaşılan sona eren şifreleme paketinin sizin amaçlarınız için yeterince güçlü olmasını sağlamak.
Bu söyleniyor, benim için bir çağrı SSLSocketFactory'ler getDefaultCipherSuites yöntem bazı verir 180 seçenekler. Bu seçenekler TLS_RSA_WITH_AES_256_CBC_SHA (ki bence oldukça güvenli) SSL_RSA_WITH_RC4_128_MD5 (MD5'in şu anki durumu göz önüne alındığında güvenli ise emin değil) SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA (ne yaptığını tam olarak emin değilim).
Soketleri kısıtlamak için şifreli paketlerin makul bir listesi nedir?
İstemcinin ve sunucunun Şişme kale Hizmet sağlayıcısı ve sınırsız kriptografik ilke dosyaları yüklü olabilir veya olmayabilir.
TLS_RSA_WITH_AES_256_CBC_SHA ... - muhtemelen RSA anahtar taşıma şemalarından kaçınmalısınız (veya reklamı yaptığınız listenin en altına yerleştirmelisiniz). Bunun yerine, geçici anahtar değişimlerini tercih edin DHEileri gizlilik için. Aslında TLS 1.3, mülkten yoksun oldukları için kaldırılmalarını tartışıyor. - jww
SSL_RSA_WITH_RC4_128_MD5 ... - RC4 şimdi sorun olan çocuk. Görmek TLS ve WPA’daki RC4’ün Güvenliği Üzerine. Bir saldırgan muhtemelen yapamam forge a HMAC-MD5 Ağın 2MSL zaman penceresinde imza. Bununla birlikte, bir saldırgan, şifreleme akışındaki bitleri istatistiksel olarak ilişkilendirebilir. (Ve MD5 olduğu Sertifikalar ve dijital imzalar gibi uzun süreli kullanım için öldü). - jww
SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA ... - yak onu. Veba gibi kaçının. - jww
İçinde ihracat ile hiçbir şey kullanmayın. Güçlü kriptografi üzerindeki ihracat kısıtlamaları nedeniyle sakat yazılımlar.
DÜZENLEME: 2009 belgesini kullanmak için değiştirildi.
2009 NIST tavsiye TLS_RSA_WITH_AES_256_CBC_SHA (bahsettiğiniz) dahil olmak üzere aşağıdakileri listeler:
TLS_RSA_WITH_NULL_SHA (Gizlilik / mahremiyete ihtiyacınız olmadığından emin değilseniz bunu kullanmayın).
TLS_RSA_WITH_NULL_SHA hakkında biraz kafam karışık - bu şifreleme belirtmiyor mu? Bu bağlamda bu demek oluyor yok hayır veya herhangi şifreleme? - Zarkonnen
Zarkonnen, bence doğru TLS_RSA_WITH_NULL_SHA şifreleme yok demektir. s. Bağlantılı taslağın 34'ü NULL şifrelemesinin, "bütünlük korumasının gerekli olduğu ancak şifrelemenin olmadığı durumlarda" olduğunu söylüyor. - Matthew Flaschen
Sanırım Preshared Key (PSK) şifrelerini istiyor gibi. TLS_PSK_WITH_3DES_EDE_CBC_SHA. TLS_RSA_WITH_AES_256_CBC_SHA RSA anahtar taşıma kullanır. Muhtemelen kullanıyor olmalı DHE veya ECDHE ileri gizlilik için. - jww
Şifre paketi özelliklerinin alt bölümlerinin iyi bir açıklaması ve kaçınmanız gerekenler burada: blog.eveoh.nl/2014/02/tls-ssl-ciphers-pfs-tomcat - Søren Boisen
Aşağıda şifre setleri ve protokolleri uygulamak için kullandığım Java sınıfı var. Önce SSLSocketFactoryEx, Üzerinde özellikleri değiştiriyordum SSLSocket Onlara eriştiğimde. Yığın Taşması üzerinde Java millet yardımcı oldu, bu yüzden burada yayınlamak için güzel.
SSLSocketFactoryEx daha güçlü şifre setleri tercih ediyor ECDHE ve DHE) ve zayıf ve yaralı şifre paketlerini (örneğin RC4 ve MD5). TLS 1.2 olduğunda Google ve Microsoft ile birlikte çalışmak için dört adet RSA anahtar taşıma şifresini etkinleştirmek zorundadır. değil mevcut. Onlar TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA ve iki arkadaş. Mümkünse TLS_RSA_* Anahtar taşıma şemaları.
Şifre paketi listesini olabildiğince küçük tutun. Reklamını yaparsan herşey mevcut şifreleri (Flaschen'in listesine benzer), sonra listeniz 80+ olacaktır. Bu 160 bayt kadar sürer ClientHellove bazı aygıtların arızalanmasına neden olabilir, çünkü bunlar işlemek için küçük, sabit boyutlu bir arabelleğe sahiptir. ClientHello. Kırık cihazlar F5 ve Ironport içerir.
Pratikte, tercih edilen liste Java'nın desteklenen şifreleme paketleriyle kesiştiğinde, aşağıdaki koddaki liste 10 veya 15 şifre paketi ile eşleştirilir. Örneğin, bağlamaya hazırlanırken aldığım liste veya microsoft.com veya google.com'u sınırsız bir JCE politikasıyla yürütün:
List, RC4 ve MD5 gibi zayıf / yaralanmış algoritmaları atlar. Eğer etkinlerse, muhtemelen bir Tarayıcıdan eski kriptografi uyarısı ara sıra.
İlke, varsayılan JCE ilkesiyle daha küçük olacaktır; çünkü ilke, AES-256'yı ve bazılarını kaldırır. Kısıtlı politika ile 7 şifre suit hakkında düşünüyorum.
SSLSocketFactoryEx sınıf ayrıca TLS 1.0 ve üstü protokollerin kullanılmasını sağlar. Java 8'den önceki Java istemcileri TLS 1.1 ve 1.2'yi devre dışı bırakır. SSLContext.getInstance("TLS") ayrıca gizlice girecek SSLv3 (Java 8'de bile), kaldırmak için adımlar atılmalıdır.
Son olarak, aşağıdaki sınıf TLS 1.3'ün farkındadır, bu yüzden sağlayıcı bunları kullanılabilir hale getirdiğinde çalışmalıdır. *_CHACHA20_POLY1305 Mevcut suitlerin birçoğundan çok daha hızlı oldukları ve daha iyi güvenlik özelliklerine sahip oldukları için şifre takımları tercih edilirse tercih edilir. Google daha önce sunucularına aktardı. Oracle'ın onlara ne zaman sağlayacağından emin değilim. OpenSSL, onlara OpenSSL sağlayacak 1.0.2 1.1.0.
Kodu paylaştığınız için teşekkürler. Benim iki meselem var. İlk olarak, anlamadığım şey kodun neden 2 createSockether biri farklı argümanlar ile çalışır? Bunun bir hatası var. Birinin adını değiştirdiysem, in-kod çağrısının aslında hangisi için olduğunu bilmiyorum. İkincisi, bir hata alıyorum List<String> aa = new ArrayList<String>(); `tür listesi genel değildir; argümanlarla parametarize edilemez <String>. - user2192774
Ayrıca, bu kod Bouncy Castle sağlayıcısı kullanıyor mu? Java Crypto kütüphaneleri aşağıdaki gibi algoritmalar içermediğinden: CHACHA20 Kodumdaki Bouncy Castle sunucusunu nerede arayacağımı anlamıyorum. Başka bir konu olarak, "TLS_ECDHE_ECDSA_WITH_CHACHA20_SHA" ve "TLS_ECDHE_RSA_WITH_CHACHA20_SHA" gibi kod şifrelerini görüyorum, bu SHA256 mı? çünkü asıl olarak ihtiyacım olan şey CHACHA256. - user2192774
@ user2192774 - "Neden her biri farklı argümanlara sahip 2 createSocket fonksiyonu içeriyor?" - Aslında 4 veya 5 tanesi var. Çünkü sınıf Java'nın yerini alıyor SSLSocketFactoryOrijinalin yaptığı tüm yöntemleri sağlamak zorundaydı. - jww
@ user2192774 - "Bouncy Castle sağlayıcısını kodumda nereye arayacağımı anlamıyorum ..." - sağlayıcıları değiştirmeli veya başka bir soru sormalısınız. Not: Temel kütüphane (Sun veya Bouncy Castle gibi) algoritmayı sağlamalıdır. SSLSocketFactorEx bunu sağlamaz. - jww
@jww: güzel açıklama, @ user2192774: "Bouncy Castle sağlayıcısını kodumda nereye arayacağımı anlamıyorum ...", İçe aktardım import org.bouncycastle.jce.provider.BouncyCastleProvider; sınıf dosyamda projedeki kavanozla ve özel yapım öncesi sslContext bu satırı dahil Security.addProvider(new BouncyCastleProvider()); hangi gerekli şifreleri almak için bana yardımcı oldu, ama gerekli olmayan şifreleri hariç yukarıdaki yukarıda iyi açıklamalar / örnekler vardır! - srinivas y
Ruby'de C gibi “ana” bir yöntem var mı? Scala Haritasını java.Float k / v dönüşümü ile scala.Float ile Java Haritasına nasıl dönüştürebilirim? Bir karma veya başka bir nesnenin hafıza boyutu? Referans: mod_rewrite, URL yeniden yazma ve “güzel linkler” açıklandı Sınıf yöntemleri ile Python functools lru_cache: release object Mysql'de ayrı 2 sütun kombinasyonu seçilmesi Bir iphone uygulamasını nasıl test edersiniz?