سؤال

أحاول إرسال بريد باستخدام Javamail على المنفذ 25 (بدون SSL) باستخدام TLS ولكن مع ائتماني الخاص (لأن Cacerts Truststore الأصلي لا يحتوي على الشهادات المطلوبة ولا أريد تعديل المتجر الافتراضي لـ Java) . لدي رمز قادر على إرسال بريد باستخدام TLS باستخدام نظام TrustStore ، عن طريق إعداد

mail.smtp.starttls.enable=true

الخاصية ، أيضا ، الإعداد

System.setProperty("javax.net.ssl.trustStore", ...) 

للإشارة إلى TrustStore الصحيح عندما يذهب الاتصال الآمن. نظرًا لأنه المنفذ العادي 25 ، لست بحاجة إلى إعداد أي SocketFactory الخصائص (والتطبيقات) أيضا. يمكنني إرسال رسائل البريد باستخدام TLS على المنفذ 25 باستخدام System TrustStore.

ومع ذلك .. تبديل خصائص النظام لتتمكن من إعداد المتجر الصحيح للثقة أمر سخيف نوعًا ما ، خاصة على الخادم ، عندما لا أعرف ما الذي يريده الرمز الآخر إرسال بريد وربما يحتاج إلى استخدام خصائص النظام أيضًا ، في عام: أنا أبحث عن حل آخر لا لتعديل ائتمان النظام ( cacerts ملف ، وصنع نسخة منه وتعديل النسخة على ما يرام!) ولا خصائص النظام اللازمة حاليًا لإعدادها.

ما جربته بالفعل:

  • إعداد SSL الخاص بي SocketFactory واستخدام مدير المفاتيح الخاص بي لتحميل TrustStore آخر. هذا من شأنه أن يعمل بشكل مثالي تمامًا عندما لم تكن هناك حاجة لإرسال المنفذ 25 ، لكن بدلاً من ذلك يمكنني بدء اتصال آمن على المنفذ 465. ومع ذلك .. لا يمكنني فعل ذلك ، فإن القيام بذلك ينتهي باستثناء المقبس لأنني 'M تحاول الاتصال بأمان بخادم البريد غير المحمي رغم ذلك.

  • أحاول إعداد بلدي SocketFactory, ، ولكن باستخدام مقبس عادي للاتصال الفعلي. هذا هو نفسه في الأساس عدم استخدام SocketFactory الخاص بي على الإطلاق وينتهي بـ Java باستخدام ملف Cacerts System Cacerts.

  • تعديل cacerts ملف struststore النظام. هذا يعمل ، لكنني لا أريد تعديل المتجر الثقة للنظام ، قد لا يكون لدي أذونات الكتابة أو يمكن تعديل كلمة مرور keystore ، إلخ.

  • تعديل "javax.net.ssl.trustStore" خاصية النظام للإشارة إلى ملف TrustStore الخاص بي. يعمل بشكل جيد ، لكنني لا أريد تعديل خصائص النظام أيضًا ، لأن الرمز الخاص بي يعمل على خادم ولا أعرف ما هي الكود الآخر الذي يتم تشغيله هناك ويحتاج إلى الخصائص سليمة. حتى إنقاذ الدولة السابقة والاستعادة لا يحرس حقًا ضد المواضيع الأخرى التي تستخدم هذه الخاصية في الوقت الذي تم تعديله ، لذلك لا أحب هذا الحل حقًا.

لذلك .. باختصار: هل يعرف أي شخص حلًا كيف يمكنني استخدام اتصال غير آمن بخادم بريد على المنفذ 25 ، قم بتشغيل TLS (عن طريق إعداد خاصية البريد) ، وهذا يضمن الاتصال داخليًا واستخدام ملف ائتماني الخاص بي بدون تعديل cacerts أو خاصية النظام؟ ربما هناك طريقة مماثلة لخصائص SocketFactory التي يتم استخدامها فقط عندما يصبح الاتصال غير الآمن آمنًا؟

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

المحلول 2

يصيح .. وجدها .. هناك خصائصين مقسمين يمكن تمريرها .. واحدة لـ SSL ، والآخر لمصانع غير SSL ..

نصائح أخرى

ابدأ التطبيق الخاص بك مع -djavax.net.ssl.truststore = ...

بعد ذلك ، سيكون الأمر ذا صلة فقط بتطبيق Java الخاص بك ولا توجد خصائص نظام أخرى.

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