اسم مضيف HTTPS خاطئ:يجب أن يكون <sub.domain.com>.ما الذي يسبب هذا؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

يظهر لي خطأ "اسم مضيف HTTPS خطأ:" عند محاولة الاتصال بخادم باستخدام https.عنوان URL الخاص بي يبدو مثل هذا

https://sub.domain.com/tamnode/webapps/app/servlet.

أقوم بالاتصال باستخدام الكود التالي

    // Create a URLConnection object for a URL
    URL url = new URL(requestedURL);
    HttpURLConnection.setFollowRedirects(false);

    // connect
    connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestProperty("User-Agent", USER_AGENT); //$NON-NLS-1$

    OutputStreamWriter wr = new OutputStreamWriter(connection
            .getOutputStream());

ولكن بعد ذلك تحصل على خطأ

IOException: HTTPS hostname wrong:  should be <sub.domain.com>. 
    at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing
    ....

هذا هو الكود الذي كان يعمل في الماضي ولكن لم يعد كذلك.لقد كانت هناك بعض التغييرات في بنية النظام ولكني بحاجة للحصول على المزيد من البيانات قبل الاتصال بالمسؤولين.

ما الذي يمكن أن يسبب هذا الخطأ؟هل يمكنني إيقاف فحص URLSpoofing؟

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

المحلول

ويبدو أعطيت شهادة SSL ل domain.com إلى sub.domain.com. أو، على الأرجح، ما تمت إعادة تسمية domain.com إلى sub.domain.com دون تحديث شهادة SSL.

نصائح أخرى

كليتوس هو حق عن السبب المحتمل.

وهناك طريقة لإيقاف التدقيق محاكاة ساخرة، أيضا.

ويمكنك إنشاء كائن الأدوات <لأ href = "http://docs.oracle.com/javase/1.5.0/docs/api/javax/net/ssl/HostnameVerifier.html" يختلط = "نوفولو noreferrer "> HostnameVerifier وترجع صحيح تحت أكثر الظروف من" المعتاد ".

وأنت تحل محل HostnameVerifier الافتراضي عن طريق الاتصال <لأ href = "http://docs.oracle.com/javase/1.5.0/docs/api/javax/net/ssl/HttpsURLConnection.html#setHostnameVerifier٪28javax. net.ssl.HostnameVerifier٪ 29 "يختلط =" نوفولو noreferrer "> setHostnameVerifier على كائن الاتصال في التعليمات البرمجية في هذه المسألة.

وكان هذا الجواب 'مستوحاة من': http://www.java -samples.com/showtutorial.php؟tutorialid=211

ولقد وجدت أن الارتباط مع هذا الاستعلام: HTTP: / /www.google.com/search؟q=https+hostname+wrong+should+be

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

حصلت على هذا الاستثناء - java.io.IOException: HTTPS hostname wrong: should be <localhost>.

الحل الخاص بي هو أنني قمت بتغيير شهادتي الموقعة ذاتيًا وقمت بإجراء CN=localhost.

أو

أضف اسم مجال الشهادة الخاص بك cn=<domain-name> إلى ملف المضيف الخاص بك ربما يقع في ج:/ويندوز/system32/السائقين/الخ/...

والتعليمة البرمجية التالية حل مشكلتي

static {
    //for localhost testing only
    javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
            new javax.net.ssl.HostnameVerifier() {

        @Override
        public boolean verify(String hostname,
                javax.net.ssl.SSLSession sslSession) {
            if (hostname.equals("your_domain")) {
                return true;
            }
            return false;
        }
    });
}

واستخدام اسم المضيف (اسم DNS) كاسم مستعار.

مثال:

keytool -import -alias <google.com> -file certificate_one.cer -keystore cacerts

وجافا افتراضيا يتحقق من أن شهادة CN (الاسم الشائع) هو نفس اسم المضيف في URL. إذا كان على CN في الشهادة ليست هي نفسها كما على اسم المضيف ، أو فشل عميل خدمة الويب الخاص بك مع الاستثناء التالي: java.io.IOException: HTTPS المضيف خطأ: يجب أن اسم المضيف كما في الشهادات.

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