سؤال

لقد قمت بتنفيذ خدمة ويب مع مصادقة الخادم والعميل باستخدام KeyTool. المشكلة هي أن هذه المصادقة لا تعمل إذا لم تقم بتضمين اسم المضيف فيه. علي سبيل المثال:

keytool -genkey -alias myAlias -keyalg RSA -keypass myPassword -storepass myPassword -keystore my.keystore -dname "CN=myhost"

لكنني لا أحتاج ولا أحب التحقق من الصحة عن طريق المضيف أو عن طريق IP. هل هناك أي طريقة لتجنب ذلك؟

شكرا.

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

المحلول

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

ليس هناك اي طريقة حول هذا.

نصائح أخرى

وأنا أتفق مع الملصقات الأخرى: إذا كنت تستخدم SSL، فأنت بالتأكيد تقريبا يريد التحقق من اسم المضيف كجزء من مجموعة ميزة أمان SSL.

ومع ذلك، اعتمادا على العميل الذي تستخدمه، قد يكون هناك طريقة حول هذه المشكلة. سوف يقوم المهندسون بالتحايل على التحقق من اسم المضيف في بيئات الاختبار، لتصحيح الأخطاء، النماذج الأولية، إلخ. إذا كنت تستخدم عميل Java يتصل عبر HTTPSurLConnection، فسيكون الأمر بسيطا مثل إضافة ما يلي إلى فئة العميل الخاصة بك:

static {
    HttpsURLConnection.setDefaultHostnameVerifier( 
        new HostnameVerifier(){
            public boolean verify(String string,SSLSession ssls) {
            return true;
        }
    });
}

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

في الواقع، أنت هل تحتاج التحقق من الصحة بواسطة عنوان DNS، لأنه إذا لم تكن التحقق من صحة طباعة المقابس الآمنة الخاصة بك لا قيمة لها. (أو على الأقل، في أي مكان آمن كما يمكن أن يكون.)

أعتقد أنه من الناحية النظرية، يمكنك محاولة القيام باتصال العميل / الخادم عبر القنوات المضمونة من خلال بعض الوسائل الأخرى من SSL / TLS. ولكن كنت بحاجة إلى خبرة جادة في تكنولوجيا الأمن والتشفير في جافا.

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

ولكن في بعض البيئات الداخلية، قد يكون لديك سيطرة كافية على الشبكة والتكوين لا تقلق.

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

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