كيف يمكنني استيراد شهادة Java CA جديدة دون استخدام أداة سطر أوامر KeyTool؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

ملخص تنفيذي: كيف يمكنني تثبيت شهادة جذر جديدة في Java باستخدام رمز Java؟

لدينا تطبيق سطح مكتب يصل إلى مختلف خدمات الويب. قام أحدهم مؤخرًا بتحويل شهادة SSL إلى شهادة موقعة بواسطة Trustwave. في حين أن شهادات SSL Trustwave مقبولة من قبل متصفحات الإنترنت العادية ، لا يبدو أن Java تأتي مع شهادات الجذر المتطلب السابق ، وفقدنا الوصول إلى خدمة الويب المحددة مع رسالة الخطأ التالية:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

لقد حصلنا على تأكيد مؤقت من خلال إقناع المزود بالعودة إلى Verisign ولكن عندما يتبادرون إلى الوراء ، يجب أن نكون جاهزين. لذلك أحتاج إلى برنامج سطح المكتب الخاص بنا لتثبيت شهادة جذر Trustwave تلقائيًا حسب الحاجة. إن عملائنا ليسوا ذكاءً للتكنولوجيا بما يكفي لاستخدام أمر KeyTool وأفضل عدم السيناريو لأن هذا يثيرني كحل هش (تطبيقات منفصلة لـ Mac و PC ، النضال ضد قيود تنفيذ Vista ، واضطر إلى العثور على JRE الصحيح للتثبيت في ، إلخ).

أتصور أن Keytool يستخدم Java داخليًا. ما هو الأمر الذي يمكنني استخدامه داخل Java لتكرار وظائف KeyTool وتثبيت شهادة الجذر برمجيًا؟

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

المحلول

لا أعرف ما إذا كان ذلك ممكنًا ، ولكن يمكنك تنفيذ TrustManager الخاص بك للسماح لهذا الاتصال أو هذا CA. هنا هي الأساسيات.

نصائح أخرى

IMHO ، SUN لم تعرض Keytool عبر واجهة برمجة التطبيقات ، في المقام الأول لمنع المطورين من تعديل مجموعة CAS الموثوقة. يمكنني أن أتخيل شديدة المهاجمين الذين يستغلون مثل هذا الرمز لإدراج شهادات الجذر الخاصة بهم في المتجر الاستئماني الذي يمسك بنموذج المتجر الثقة.

في الواقع ، إذا نظرت إلى مصدر فئة KeyTool (Sun.Security.Tools Package) ، ليس فقط هو النهائي ، بل يحتوي أيضًا على مُنشئ خاص يمنع أي متصل من إنشاء مثيل لفئة KeyTool من الرمز. يحتوي KeyTool على طريقة رئيسية ، مما يجعل سطر الأوامر (وبالتالي مستخدم نظام التشغيل) هو الطريقة الوحيدة التي يمكن للمرء تهيئتها والتواصل مع KeyTool.

النهج الوحيدة (التبسيط) المتبقية هي:

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

يمكنك دائمًا استدعاء KeyTool كعملية Runtime.exec(...).

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

  • اكتب الشهادة إلى ملف أو دفق بايت أو أي شيء آخر
  • استيراد باستخدام KeyTool صف دراسي (sun.security.tools.KeyTool)

لكن IMHO إذا كانت الشهادة غير صالحة ، فهي غير جديرة بالثقة. أود أن أقول أن هناك سبب وجيه لذلك.

حل سطر الأوامر. على جهاز Mac ، منزل Java هو/Library/Java/Home. محاولة:

$ sudo -i
# cd /Library/Java/Home
# keytool -import -trustcacerts -alias CAName -file CA.crt -keystore lib/security/cacerts

استبدل Caname باسم CA الخاص بك ، و CA.CRT مع مسار إلى ملف الشهادة الخاص بك (PEM Works). سيطالب بكلمة مرور keystore. ترد كلمة المرور الافتراضية في المقالة المرتبطة.

اضطررت إلى القيام بذلك لأحد شهادات Rapidssl.

نشرت Sun هذا الرمز لإنشاء إصدار محدث من ملف Cacerts الخاص بك استنادًا إلى أي مضيف مستهدف يعمل HTTPS مع أي شهادات:

https://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/installcert.java

سيتم تسمية cacerts الجديدة الخاصة بك jssecacerts في الدليل الحالي. فقط انسخ هذا الملف الجديد عبر ملف JRE/LIB/Security/Cacerts.

لا أقوم بأي تعليق حول أمان ملف Cacerts الجديد.

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