জাভা কীটোলের সাথে কীভাবে নতুন, 2048-বিট ডিফি-হেলম্যান প্যারামিটার তৈরি করা যায়?


9

আমরা অ-বিশেষজ্ঞরা চেষ্টা করে যাচ্ছি - অসফলভাবে এতদূর - ডিফি-হেলম্যান মানদণ্ডগুলি পূরণের জন্য আমাদের ওয়েব সার্ভার (JBoss-5.1.0.GA) সেটিংস আপডেট করার জন্য। Https://weakdh.org/sysadmin.html এ একটি পরীক্ষা চালানোর পরে , আমাদের বলা হয়েছে যে আমাদের "নতুন, 2048-বিট ডিফি-হেলম্যান প্যারামিটার তৈরি করা" দরকার। অতীতে, আমরা জাভা কীটল দিয়ে কীগুলি তৈরি করেছি, তবে জাভা কীটোলে নতুন 2048-বিট ডিফি-হেলম্যান প্যারামিটার তৈরি করার কোনও তথ্য আমরা খুঁজে পেতে পারিনি। কেউ কীভাবে এটি করতে জানেন বা আমাদের সঠিক দিকে নির্দেশ করতে পারেন? ধন্যবাদ!

উত্তর:


13

আপনি কীটোল দিয়ে এটি করতে পারবেন না। প্রথমত, keytoolডিএইচ মোটেও সমর্থন করে না। দ্বিতীয়ত, keytoolকোনও অ্যালগরিদমের জন্য নিজেই প্যারামিটার তৈরি করে না, কেবল একটি প্রাইভেটকি / কিপাইয়ার। তৃতীয়ত, keytoolকী-পেয়ার তৈরি করার সময় এটি একটি স্ব-স্বাক্ষরিত সার্টিও উত্পন্ন করে (যা পরে মাঝে মাঝে "সত্যিকারের" সিএ-দ্বারা জারি করা শংসাপত্র দ্বারা প্রতিস্থাপন করা হয়) এবং ডিএইচ স্বাক্ষরিত না কারণ ডিএইচ-এর স্ব-স্বাক্ষরিত সার্টিটি তৈরি করা অসম্ভব। আপনি ডিএইচ প্যারামিটারগুলি তৈরি করতে খুব সাধারণ (প্রায় 10 টি লাইন) জাভা প্রোগ্রাম লিখতে পারেন । তবে এটি সম্ভবত আপনার কোনও ভাল করতে পারে না কারণ:

জাভা এখানে যাইহোক DHE পরামিতি গ্রহণ করে না। JbossWS (Jboss ওয়েবসারভার, পরবর্তীকালে ওয়াইল্ডফ্লাই) টমকেটের একটি কাঁটাচামচ, এবং সাধারণত এসএসএল / টিএলএস, জেএসএসির জাভা বাস্তবায়ন ব্যবহার করে। জাভা 7 এর মাধ্যমে, জেএসএসই নিজস্ব ডিএইচই প্যারামিটারগুলি ব্যবহার করে যা 768-বিট যা অগ্রহণযোগ্যভাবে দুর্বল। (এক্সপোর্ট স্যুট ব্যতীত যেখানে জেএসএসই ডিএইচ -512 এর জন্য আরএফসি প্রয়োজনীয়তা মেনে চলে, যা সম্পূর্ণরূপে ভাঙ্গা, তবে তারপরেও এক্সপোর্ট স্যুটগুলি যেকোনভাবে সম্পূর্ণরূপে ভাঙা নকশার দ্বারা তৈরি করা হয় এবং জাভা up-তে ডিফল্টরূপে অক্ষম করা হয়)) জাভা 8 জেএসএসই আপনাকে অনুমতি দেয় DHE পরামিতিগুলির আকার নিয়ন্ত্রণ করুন , তবে আসল মানটি নয়।

আপনার (কিছু ওভারল্যাপিং) বিকল্পগুলি হ'ল:

জাভা ৮. জাভাসি 8 ব্যবহার করুন , তবে এর আগে নয়, ডিএইচইকে 1024 বিটকে ডিফল্ট করেছে, বেশিরভাগ কর্তৃপক্ষ দুর্বল ডিএইচএস না করলেও যথেষ্ট শক্তিশালী বলে বিবেচনা করে এবং আপনাকে আরও নির্দিষ্ট করার অনুমতি দেয়, দেখুন 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-এ জেএসএসই পরে ECDHE প্রয়োগ করে, যা ডি-ইইচই (যেমন সাধারণত) পি -২6 using ব্যবহার করে প্রাক-গণনার সাপেক্ষে নয়, যা যথেষ্ট শক্তিশালী। (কিছু মানুষ বিশ্বাস যদিও না কোনো , NIST ইসিসি রেখাচিত্র কারণে সাধারণভাবে, NIST এনএসএ দ্বারা প্রভাবিত, যদিও কোন ওপেন সোর্স আমি জানি বিশেষভাবে ইসিসি রেখাচিত্র একটা সমস্যা দেখানো হয়েছে।) জাভা 6 আসলে ECDHE জন্য JSSE অংশ হয়েছে তবে এটি কেবল তখনই সক্ষম করা হবে যদি ইসভি প্রিমিটিভগুলির জন্য জাভিএমের একটি ক্রিপ্টো "সরবরাহকারী" থাকে, যা জাভা 6 না। বিসিপ্রভ - * - জেডি কে 15on http://www.bouncycastle.org/ থেকে ইসিসি সহ জাভা ক্রিপ্টো আদিম সংখ্যাগুলির জন্য একটি জেসিই সরবরাহকারী, তাই আপনি যদি জারেটি JRE/lib/extযুক্ত org.bouncycastle.jce.provider.BouncyCastleProviderকরেন এবং তালিকায় যুক্ত করেন JRE/lib/security/java.security(বা উপযুক্ত কোনও কাজ করেন তবেSecurity.add/insertProvider()আপনার কোডের প্রথম দিকে কোথাও) জাভা 6 ECDHE করতে পারে। অবশ্যই আপনার কোনও জাভা 6 ব্যবহার করা উচিত কিনা তা নিজেই একটি প্রশ্ন।

কয়েক বছর আগে, ব্রাউজারগুলিতে এবং অন্যান্য ক্লায়েন্টগুলিতে ECDHE এর জন্য সমর্থন ছিল ইফফ, তবে আজ আফিক সমস্ত আপ-টু-ডেট ব্রাউজারগুলি এটি সমর্থন করে এবং এটি ডিএইচইতে পছন্দ করে - অর্থাৎ ব্রাউজার হ্যালো ডিএইচই স্যুটগুলির আগে ইসিডিএইচই স্যুটগুলি তালিকাভুক্ত করে সার্ভার উভয় প্রয়োগ করলে এটি ECDHE চয়ন করা উচিত। ব্রাউজারবিহীন ক্লায়েন্ট সম্ভবত না; পরীক্ষা নিশ্চিত।

ডিএইচই অক্ষম করুন। আপনি ডিএইচই সাইফারগুলি বাদ দিতে সংযোগকারী বৈশিষ্ট্যে সাইফারগুলির তালিকাটি কনফিগার করতে পারেন; আপনি যখন এতে রয়েছেন তখন স্ট্যাটিকডিএইচ এবং স্ট্যাটিকসিডিএইচও বাদ দিন যা অকেজো, এবং (একক) ডিইএস এবং (সমস্ত) উপস্থিত থাকলে "এক্সপোর্ট" (জাভা 6)। এর অর্থ ব্রাউজার এবং ক্লায়েন্টরা যা ECHDE না করে তারা প্লেইন-আরএসএ এবং কোনও ফরোয়ার্ড সিক্রেসির সাথে আটকে থাকবে না, তবে কমপক্ষে তাদের "বর্তমান" গোপনীয়তা রয়েছে। আমি নিশ্চিতভাবে মনে করতে পারি না, তবে আমি মনে করি 5.1 সংযোগকারী কনফিগারটি এখনও অন্য কোথাও ছিল $server/deploy/jbossweb/server.xml

নেটিভ চেষ্টা করুন। টমক্যাট, যা আমি বলেছিলাম যে JbossWS থেকে শুরু হয়েছিল, "নেটিভ" ওরফে "এপিআর" ব্যবহার করে এইচটিটিপিএস (এসএসএল / টিএলএস) প্রয়োগ করার বিকল্প রয়েছে যা জেএসএসির পরিবর্তে প্রকৃতপক্ষে ওপেনএসএসএল। JbossWS এ কাজ করার জন্য এই বিকল্পটি পাওয়ার ক্ষেত্রে আমি মিশ্রিত সাফল্য পেয়েছি এবং প্রায় 5.1 স্মরণ করতে পারি না। যদি আপনার JbossWS এর কার্যক্ষম টিসি-নেটিভ বিকল্প থাকে এবং যদি এটি ডিএইচ প্যারামিটারগুলি কনফিগার করতে পারে তবে ডিএইচ প্যারামিটারগুলি তৈরি করতে ওপেনসেল এবং সেগুলি কনফিগার করার জন্য JbossWS- স্থানীয় নির্দেশাবলী ব্যবহার করুন।


ভাল তথ্যের জন্য আপনাকে ধন্যবাদ. উত্তর আমাদের জন্য চূড়ান্তভাবে keytool জড়িত না, শুধু আমাদের server.xml ফাইলে পরিবর্তন, কিন্তু আমি এই উত্তর চেক করতে যাচ্ছি।
ব্যবহারকারী 2072931

4

আসলে আপনি সাম্প্রতিক জাভা 8 সংস্করণ সহ কাস্টম ডিএইচই পরামিতি নির্দিষ্ট করতে পারেন । এটি অ্যাপ্লিকেশনটির স্বতন্ত্র (যতদিন এটি জেএসএসই টিএলএস বাস্তবায়ন ব্যবহার করে)।

আপনার প্রথমে DHE কী ( -Djdk.tls.ephemeralDHKeySize=1024বা -Djdk.tls.ephemeralDHKeySize=2048) ব্যবহারের আকার নির্দিষ্ট করতে হবে । সার্ভারে এটি DHE এর জন্য একটি পূর্বনির্ধারিত জেনারেটর / প্রাইম সংমিশ্রণ ব্যবহার করবে। জাভা 8 এর সাথে কেবল 1024 বা 2048 ব্যবহার করা যেতে পারে, জেডিকে 9 আরও বড় আকারের সমর্থন করবে

আপনি যদি অন্য কোনও সংমিশ্রণ সরবরাহ করতে চান তবে আপনি সেগুলি জে / লিব / সুরক্ষা / জাভাতে নির্ধারণ করতে পারেন। jdk.tls.server.defaultDHEParametersসুরক্ষা সম্পত্তি সহ (8u51 থেকে)) এটি প্যারামিটারগুলির একটি তালিকা নেয় (প্রতিটি ব্যবহৃত কীসাইজের জন্য একটি) এবং এতে অবশ্যই প্রাইম এবং জেনারেটর (সাধারণত 2 বা 5) হেক্স হিসাবে থাকা উচিত।

আপনি যদি openssl dhparam -out dhparam2048.pem 2048একটি নতুন জুড়ি তৈরি করতে ব্যবহার করেন তবে openssl dhparam -noout -text -check -in dhparam2048.pemআপনি সেই ফাইলটি পাঠ্য মোডে পড়তে এবং মুদ্রণ করতে ব্যবহার করতে পারেন । আপনাকে জাভা সুরক্ষা বৈশিষ্ট্যগুলিতে পাঠ্যটি অনুলিপি করে আটকে tr -d ':'দিতে হবে ( :ওপেনসেল হেক্স উপস্থাপনার মধ্যবর্তী অংশটি সরিয়ে ফেলতে )

এখানে একটি নমুনা রয়েছে (কেবলমাত্র 1024 বিস):

>openssl dhparam -in p -check -text -noout | tr -d ':'
PKCS#3 DH Parameters: (1024 bit)
    prime:
       00f7a63b59edcc43a43df12077f0e9
        14129c20a73cef95f919896e608ebc
        8722776c948765bbbf61542e118329
        6c6ea74ecbded3a93aff77a062aba4
        fcf04fc01030e65077f5a802605058
        65b836368dd5ea389d77691fac0f2c
        f7a161c51c8e97ddecb3cf7f872b0c
        cfaf54373d5203edcabc575e871bb1
        107ec2f30c78ebf403
    generator: 2 (0x2)
DH parameters appear to be ok.

এবং এর ফলাফল

jdk.tls.server.defaultDHEParameters= \
    { \
        00f7a63b59edcc43a43df12077f0e9 \
        14129c20a73cef95f919896e608ebc \
        8722776c948765bbbf61542e118329 \
        6c6ea74ecbded3a93aff77a062aba4 \
        fcf04fc01030e65077f5a802605058 \
        65b836368dd5ea389d77691fac0f2c \
        f7a161c51c8e97ddecb3cf7f872b0c \
        cfaf54373d5203edcabc575e871bb1 \
        107ec2f30c78ebf403, 2 }

আপনার সার্ভারটি পুনরায় আরম্ভ করা উচিত এবং যাচাই করা উচিত যে প্রক্রিয়াটি সরাসরি ফরোয়ার্ড না হওয়ায় এটি প্রকৃতপক্ষে এই প্রাইমটি ব্যবহার করে (এবং পূর্বনির্ধারিতগুলি নয়) তাই অনেকগুলি ভুল হতে পারে। ডিফল্ট উত্স হিসাবে সংজ্ঞায়িত করা হয় , 2048 বিটের জন্য প্রধান TLS FFDHE খসড়া থেকে।

উদাহরণস্বরূপ ওপেনসেল এস_স্লায়েন্ট চলাকালীন, জাভা 8 জেএসএসই সার্ভারের সাথে সংযোগ করার সময় আমি 1024 বিট প্রাইম ( ffffff ffffffffccf ... 5381ffffffffffffffff ) দেখতে পাচ্ছি :

>openssl s_client -msg -cipher DHE-RSA-AES128-SHA256 -connect localhost:1234
...
<<< TLS 1.2 Handshake [length 018f], ServerKeyExchange
0c 00 01 8b 00 80 ff ff ff ff ff ff ff ff c9 0f
da a2 21 68 c2 34 c4 c6 62 8b 80 dc 1c d1 29 02
4e 08 8a 67 cc 74 02 0b be a6 3b 13 9b 22 51 4a
08 79 8e 34 04 dd ef 95 19 b3 cd 3a 43 1b 30 2b
0a 6d f2 5f 14 37 4f e1 35 6d 6d 51 c2 45 e4 85
b5 76 62 5e 7e c6 f4 4c 42 e9 a6 37 ed 6b 0b ff
5c b6 f4 06 b7 ed ee 38 6b fb 5a 89 9f a5 ae 9f
24 11 7c 4b 1f e6 49 28 66 51 ec e6 53 81 ff ff
ff ff ff ff ff ff 00 01 02 ...

এর পরিবর্তে, ইনস্টল করার সময় আপনাকে অবশ্যই আপনার কাস্টম প্যারামিটারগুলি দেখতে হবে।

জাভা 7 (768 বিট) এর ডিফল্ট পরামিতিগুলি "e9e642 ... 7a3daf" প্যারামিটার ক্যাশে হিসাবে সংজ্ঞায়িত হিসাবে একটি দীর্ঘ জেনারেটর "30470ad..529252" হবে ।


3

আমি এই একই সমস্যার মধ্যে দিয়ে যাচ্ছি, তবে গ্লাস ফিশ থেকে।

প্রথমত, আমি সুপারিশ করব (যদি আপনি পারেন) আপনার জেবিএস সার্ভারের সামনে কিছু প্রকারের বিপরীত প্রক্সি রাখার জন্য এটি সিফার / শংসাপত্রের সুরক্ষা এবং জাভা যে সংস্করণটি আপনি চালাচ্ছেন তার মধ্যবর্তী লিঙ্কটি সরিয়ে দেবে।

জাভা 8 এ চলমান আপনার 768 বিটের চেয়ে বড় এফিমেরাল ডিএইচ কী দৈর্ঘ্য পেতে 1024 নতুন ডিফল্ট, এবং আপনি jdk.tls.ephemeralDHKeySize(বিশদ: ডিএইচ কীগুলি অনুকূলিতকরণ ) ব্যবহার করে 2048 পর্যন্ত যেতে পারেন 48 আমি যা দেখতে পেলাম তা থেকে জাভাতে মূল পরামিতিগুলি আলাদাভাবে পুনরুত্থানের কোনও ধারণা নেই।


বিকল্পের এই পরামর্শের জন্য ধন্যবাদ। ভবিষ্যতে আমরা এটি খতিয়ে দেখতে পারি।
ব্যবহারকারী 2072931


গ্লাস ফিশ / পেয়ারা / পেয়ারা-মাইক্রো ডিএইচই সাইফারগুলি অক্ষম <ssl tls-enabled="false" classname="com.sun.enterprise.security.ssl.GlassfishSSLImpl" tls11-enabled="false" cert-nickname="s1as" ssl3-tls-ciphers="+TLS_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,+TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA256,+TLS_ECDH_RSA_WITH_AES_256_CBC_SHA256,+TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,+TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,+TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA256,+TLS_ECDH_RSA_WITH_AES_256_GCM_SHA256"></ssl>করতে <protocol name="http-listener-2" security-enabled="true">এসএসএল সংযোগকারী যুক্ত করুন
মার্কাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.