جافا: كيفية إظهار مربع حوار للسماح للمستخدم قبول شهادات SSL

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

سؤال

وأواجه حاليا شهادة موقعة ذاتيا لبلدي خادم HTTPS.

في برنامج جافا بلدي هناك SSLSocketFactory التي سيتم إنشاء مأخذ لخادم الويب. تطبيق الافتراضي كتل الشمس قعت الذات الشهادة. مع تنفيذ الخاصة من X509TrustManager I يمكن أن تحقق فقط ما إذا كان تاريخ شهادة صالحة.

هل هناك أي إمكانية للسماح للتطبيق الافتراضي التحقق من صحة (تاريخ واسم المضيف، ...)، وإذا فشلت في إظهار مربع حوار للسماح للمستخدم قبول هذه الشهادة؟

وكل رمز وجدت حتى الآن تعطيل فقط الاختيار خدمة تصميم المواقع وقبول كل شهادة غير صالحة.

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

المحلول

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


ويمكنك تهيئة معظم الطبقات الأمنية مع حجج فارغة لاستخدام القيم الافتراضية. للحصول على مدير الثقة الافتراضي، يجب أن تحصل على مديري الثقة المتاحة واختيار واحد الأولى في صفائف MGRS لتنفيذ واجهة X509TrustManager. عادة، فإن مجموعة تحتوي فقط elment واحدة على أي حال.

TrustManagerFactory trustmanagerfactory = 
     TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustmanagerfactory.init((KeyStore)null);
TrustManager[] mgrs = trustmanagerfactory.getTrustManagers();

وبعد أن كنت قد اختتم مدير الثقة الافتراضي مع تمديد الخاص بك، لديك لتهيئة سياق SSL والحصول على مصنع مأخذ منه:

SSLContext sslContext=SSLContext.getInstance("SSL","SunJSSE");
sslContext.init(null, new TrustManager[] {myTm}, null);
SSLSocketFactory sf = sslContext.getSocketFactory();

وثم استخدم هذا المصنع مقبس لإنشاء مآخذ عميل جديد أو نقله إلى HttpsURLConnection.setDefaultSSLSocketFactory لاستخدام بروتوكول HTTPS في عناوين URL مع مدير الثقة بنفسك.

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