سؤال

أحاول الحصول على صورة عبر عنوان URL HTTPS، وأوصي بعض المشاكل. أقوم بإنشاء مفاتيح مع أمر Keytool Java. إذا حددت الاسم الشائع (CN) يساوي اسم مضيفي، مثل CN = Jonmorra، ثم حاول الاستعلام عن اسم مضيفي، مثل https: // جونمارا: 8443 / ثم يعمل بشكل جيد. ومع ذلك، إذا قمت بتحديد الاسم الشائع كعنوان IP الخاص بي، مثل CN = 192.168.56.1، وحاول الاستعلام عن عنوان IP الخاص بي، مثل https://192.168.56.1:8443/ ثم أحصل على خطأ

HTTPS HostName خطأ: يجب أن يكون <192.168.56.1>

التي توضح أن اسم مضيفي مخطئ، على الرغم من أن هذا ما حددته في Keystore.

أرغب في استخدام عناوين IP بدلا من أسماء المضيفين حتى أتمكن من الاستعلام بين صناديق Linux و Windows دون القلق بشأن أسماء المضيفين.

لماذا لا يقبل CN عناوين IP، وكيف يمكنني إصلاحه؟

شكرًا

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

المحلول

قد يعمل هذا المقتطف من أجلك:

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;

HostnameVerifier hv = new HostnameVerifier() {
    public boolean verify(String urlHostName, SSLSession session) {
        System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
        return true;
    }
};

HttpsURLConnection.setDefaultHostnameVerifier(hv);

إذا قمت بإحاولة هذا الرمز، فهذا لا يعمل، يرجى نشر ما هو مطبوع urlHostName و session.getPeerHost().

أيضا، لماذا تتطلب وجود صناديق Windows و Linux Interperating استخدام عناوين IP بدلا من HostNames؟

نصائح أخرى

مواصفات HTTPS (RFC 2818) واضحة تماما حول التحقق من هوية الخادم مع عنوان IP: يجب أن يكون إدخال اسم البديل (IP) موجودا في الشهادة (في حين أن CN في موضوع DN سيكفي كحل حاد اسم المضيف).

على الرغم من أن جميع العملاء (على وجه الخصوص ليس جميع المتصفحات) ينفذون هذا التحقق بدقة، فإن التحقق من اسم المضيف الافتراضي Java.

يمكن إنشاء شهادة مع إدخال IP San مع Openssl على سبيل المثال أو (غير متوفر في الوقت الذي تم طرحه / أجاب / تمت الإجابة عن Java 7 keytool.

انظر هذا السؤال للحصول على التفاصيل: كيف يتم حل أسماء خادم شهادة SSL / هل يمكنني إضافة أسماء بديلة باستخدام KeyTool؟

لتوليد بشهادة صالحة باستخدام keytool, ، استعمال:

keytool -keystore keystore.jks -genkey -ext SAN=IP:{IP_ADDRESS}

على سبيل المثال:

keytool -keystore keystore.jks -genkey -ext SAN=IP:192.168.1.1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top