ألا تحتاج إلى كلمة مرور للوصول إلى TrustStore (مصنوعة من Java Keytool)؟

StackOverflow https://stackoverflow.com/questions/2343691

سؤال

لقد قمت للتو بإنشاء ائتمان مع Java Keytool (لمصادقة الخادم لخادم لا يحتوي على شهادة CA). ومع ذلك لاحظت شيئًا غريبًا. أبدأ موكلي مثل هذا:

java -Djavax.net.ssl.trustStore=<PATHSTUFF>/client.keystore -classpath <STUFF> Client

(ملاحظة: لا توجد كلمة مرور محددة)

المكالمة أعلاه تعمل.


لكن عندما أحاول هذا:

java -classpath <STUFF> Client

انه لا يعمل. (من الواضح أنه لا ينجح ، فهو يتطلب truststore).


كنت أتوقع أن أحتاج إلى تمرير هذا الخيار (لكنني لم أفعل):

-Djavax.net.ssl.trustStorePassword=mypass

سؤال: ألا تحتاج إلى كلمة مرور للوصول إلى TrustStore؟ هل كلمة المرور فقط للتعديل؟ ماذا عن keystore؟

هل كانت مفيدة؟

المحلول

يتم استخدام كلمة المرور لحماية سلامة keystore. إذا لم تقدم أي كلمة مرور للمخزن ، فلا يزال بإمكانك قراءة محتويات Keystore. الامر keytool -list يوضح هذا السلوك (استخدمه بكلمة مرور فارغة).

نصائح أخرى

بالإضافة إلى إجابة @Pascal-Thivent الممتازة:

تحتوي كلمة مرور KeyStore على غرضين - إذا لم يتم توفيرها ، keytool يرفض السماح لك باستبدال محتويات المتجر بمحتويات جديدة على سبيل المثال عن طريق حذف أو إضافة إدخالات شهادة جديدة.

بالطبع إذا كان لديك الوصول إلى الكتابة لتحديث ملف keystore باستخدام keytool (ليس setuid) ، يمكنك استبدال المحتويات باستخدام أداة أخرى لم تتحقق من كلمة المرور. ونحن نعلم أن المتجر وتنسيقه قابل للقراءة بدون كلمة مرور ، لذلك من المفترض أن نتمكن من كتابة ما نريد هناك.

هذا هو المكان الذي تأتي فيه كلمة مرور التحقق. عند كتابة إدخالات المتجر ، يتم استخدام كلمة مرور المتجر الموردة لحساب مصلحة من محلات المتجر ، كما هو مملح لكلمة المرور. هذا هو تجزئة/هضم في اتجاه واحد ، لذلك بدون كلمة المرور ، لا يمكنك التحقق مما إذا كانت محتويات المتجر قد تم العبث بها أم لا. وبالمثل ، لا يمكن لأي شخص لا يعرف كلمة المرور أيضًا تعديل محتويات المتجر وإنتاج التثبيت الذي ستنتجه كلمة المرور هذه.

لهذا السبب عندما تقوم بتوفير كلمة غير محدودة ، keytool فقط يحذرك من أنه لا يمكن التحقق من أن المتجر لم يتم العبث به. إذا قدمت غير صالحة كلمة المرور ، أو المتجر لديها تم العبث بها ، ستحصل على رسالة مختلفة:

Enter keystore password: keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect

keytool لم يتمكن من إعادة إنشاء هضم التجزئة الحالي استنادًا إلى محتويات المتجر الحالية وكلمة المرور التي قدمتها ، لذلك إما أن كلمة المرور غير صحيحة ، أو أن keystore معرضة للخطر - keytool لا يمكن معرفة ذلك ، لكنه يفترض أنك أو البرنامج الذي يقرأ المتجر تعرفه.

لاحظ أنه بينما المصطلح Keystore يستخدم بشكل عام ، ويشير بالتساوي محلات المفاتيح و الثقة. أقل من الناحية العملية ، أ Keystore في كثير من الأحيان متجر الهوية ويحتوي على هويات ومفاتيحها السرية والخاصة ، كما هو مستخدم على سبيل المثال بواسطة خادم يعمل HTTPS. أ ائتمان في كثير من الأحيان يحتوي على مفاتيح عامة فقط وليس مفاتيح خاصة ، لذلك لا توجد أسرار ، ولكن من المهم تحديد الهويات أ زبون الثقة.

إذا لم تحدد ائتمان ، يتم استخدام الافتراضي بدلاً من ذلك. أفترض ، ستحصل على خطأ ، ستحتاج إلى تحديد ائتمان من أجل الوثوق بالمضيف الذي تطلبه؟ يتواجد TrustStore الافتراضي في $ java_home/lib/security/jssecacerts.

بشكل افتراضي ، فإن كلمة مرور متجر JRE Trust هي "تغيير". إذا كنت ترغب في تغيير كلمة مرور متجر Trust Store (Cacerts) بشكل برمجي باستخدام Java ، فيرجى المرور هذا الرابط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top