आप keytool के साथ ऐसा नहीं कर सकते। सबसे पहले, keytool
DH का समर्थन बिल्कुल नहीं करता है। दूसरा, keytool
किसी भी एल्गोरिथ्म के लिए खुद के द्वारा पैरामीटर उत्पन्न नहीं करता है, केवल एक प्राइवेटकी / कीपर। तीसरा, जब keytool
एक कीपर उत्पन्न करता है तो यह एक स्व-हस्ताक्षरित प्रमाण पत्र भी उत्पन्न करता है (जो कभी-कभी बाद में "वास्तविक" सीए-जारी किए गए प्रमाण पत्र द्वारा बदल दिया जाता है) और डीएच के लिए स्व-हस्ताक्षरित प्रमाण पत्र उत्पन्न करना असंभव है क्योंकि डीएच हस्ताक्षर नहीं करता है। डीएच पैरामीटर जेनरेट करने के लिए आप एक बहुत ही सरल (लगभग 10 लाइन) जावा प्रोग्राम लिख सकते हैं । लेकिन यह शायद आप किसी भी अच्छा नहीं होगा क्योंकि:
जावा वैसे भी यहाँ डीएचईई मापदंडों को स्वीकार नहीं करता है। JbossWS (Jboss वेबसर्वर, बाद में Wildfly) Tomcat का एक कांटा है, और सामान्यतः SSL / TLS, JSSE के जावा कार्यान्वयन का उपयोग करता है। जावा 7 के माध्यम से, जेएसएसई अपने स्वयं के डीएचईई मापदंडों का उपयोग करता है जो 768-बिट हैं जो अस्वीकार्य रूप से कमजोर हैं। (एक्सपोर्ट सुइट्स को छोड़कर, जहाँ JSSE DH-512 के लिए RFC आवश्यकता का पालन करता है, जो पूरी तरह से टूट गया है, लेकिन फिर एक्सपोर्ट सुइट वैसे भी डिज़ाइन से पूरी तरह टूट चुके हैं, और डिफ़ॉल्ट रूप से जावा 7 अप में अक्षम हैं।) Java 8 JEE आपको अनुमति देता है। डीएचईई मापदंडों के आकार को नियंत्रित करें , लेकिन वास्तविक मूल्य नहीं।
आपके (कुछ अतिव्यापी) विकल्प हैं:
Java 8 में JSSE का प्रयोग करें। लेकिन इससे पहले नहीं, लेकिन DHE को 1024 बिट्स में डिफॉल्ट करता है, जो कि ज्यादातर अधिकारी काफी मजबूत मानते हैं, भले ही कमजोर dd.org.org नहीं करता है, और आपको अधिक निर्दिष्ट करने की अनुमति देता है, https://docs.oracle.com देखें। /javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#customizing_dh_keys और पृष्ठभूमि के लिए /programming/30352105/how-to-set-custom-dh-group-in-java -लस्लेन-से-रोक-लोगजाम-हमला । ध्यान दें कि यदि आपके पास जावा 8 से पहले कोई जावा क्लाइंट है , तो सर्वर 1024 बिट पर डीएचई का उपयोग करने पर वे विफल हो जाएंगे । मैं किसी भी अन्य ग्राहकों को नहीं जानता, जिनके पास यह समस्या है, लेकिन इस बदलाव के लिए प्रतिबद्ध होने से पहले आपका परीक्षण करें।
ECDHE सक्षम करें। जावा 7 में JSSE और बाद में ECDHE को लागू करता है, जो P-256 का उपयोग करते हुए DHE, (सामान्य रूप से) जैसे प्री-कॉम्प्लेक्शन के अधीन नहीं है, जो कि मजबूत से अधिक है। (हालांकि कुछ लोग NIST ECC घटता में से किसी पर भरोसा नहीं करते हैं क्योंकि NIST सामान्य रूप से NSA से प्रभावित होता है, हालांकि मुझे कोई भी खुला स्रोत नहीं पता है जो ECC घटता में विशेष रूप से एक समस्या दिखा चुका है।) जावा 6 में वास्तव में ECDHE में JSSE हिस्सा है। लेकिन यह केवल तभी सक्षम होता है जब JVM में ECC आदिम के लिए एक क्रिप्टो "प्रदाता" होता है, जो कि Java 6 नहीं करता है। bcprov - * - से jdk15on http://www.bouncycastle.org/ , ईसीसी सहित जावा क्रिप्टो पुरातन की एक श्रृंखला के लिए एक JCE प्रदाता है, इसलिए यदि आप करने के लिए जार जोड़ने अपने JRE/lib/ext
और जोड़ने org.bouncycastle.jce.provider.BouncyCastleProvider
में सूची में JRE/lib/security/java.security
(या एक उपयुक्त करनाSecurity.add/insertProvider()
अपने कोड में कहीं जल्दी) Java 6 ECDHE कर सकता है। बेशक, क्या आपके पास कोई जावा 6 अभी भी उपयोग में होना चाहिए यह अपने आप में एक सवाल है।
कुछ साल पहले, ब्राउज़र और अन्य ग्राहकों में ईसीडीएचई के लिए समर्थन iffy था, लेकिन आज AFAIK सभी अप-टू-डेट ब्राउज़र इसका समर्थन करते हैं और इसे डीएचई को पसंद करते हैं - अर्थात, ब्राउज़र हेलो ईसीडीएच सुइट्स को डीएचईई सुइट्स से पहले सूचीबद्ध करता है। यदि सर्वर दोनों को लागू करता है तो उसे ECDHE चुनना चाहिए। गैर-ब्राउज़र क्लाइंट शायद नहीं; कुछ होने की परीक्षा।
DHE अक्षम करें। आप डीएचई साइपर को बाहर करने के लिए कनेक्टर की सूची को कनेक्टर विशेषता में कॉन्फ़िगर कर सकते हैं; जब आप इसमें हों, तो staticDH और staticECDH को भी बाहर कर दें, जो बेकार हैं, और (एकल) DES (और) "निर्यात" यदि मौजूद है (जावा 6)। इसका मतलब है कि ब्राउज़र और क्लाइंट जो ECHDE नहीं करते हैं, वे सादे-आरएसए और फॉरवर्ड सेक्रेसी के साथ फंस जाएंगे, लेकिन कम से कम उनके पास "वर्तमान" गोपनीयता है। मुझे यकीन है कि याद नहीं है, लेकिन मुझे लगता है कि 5.1 कनेक्टर विन्यास अभी भी कुछ जगह की तरह था $server/deploy/jbossweb/server.xml
।
देशी कोशिश करें। टॉमकैट, जैसा कि मैंने कहा कि JbossWS से शुरू हुआ, के पास "देशी" उर्फ "APR" का उपयोग करके HTTPS (SSL / TLS) को लागू करने का एक विकल्प है जो वास्तव में JSSE के बजाय ओपनएसएसएल है। मुझे इस विकल्प को JbossWS पर काम करने में सफलता मिली है, और 5.1 के बारे में याद नहीं है। यदि आपके JbossWS के पास एक कार्य-योग्य टीसी-देशी विकल्प है, और यदि यह DH पैरामीटर कॉन्फ़िगर करने को संभाल सकता है, तो DH पैरामीटर और उन्हें कॉन्फ़िगर करने के लिए JbossWS- देशी निर्देशों को उत्पन्न करने के लिए Opensl का उपयोग करें।