java - الموضوع-6، ريكف TLSv1 أليرت: فادح، handshake_failure



ssl groovy (1)

ما هو الخطأ في هذا الرمز، فمن المفترض أن يثق جميع المضيفين، لكنه لا ..

يعمل بشكل جيد مع على سبيل المثال google.com ولكن ليس مع خدمة بوابة أبي تشغيل محليا على الجهاز الخاص بي، لماذا؟

سل ديبوغ أوتبوت

بذر الزناد من سيكورياراندوم القيام به البذر سيكوريراندوم تجاهل جناح الشفرات غير معتمد: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 ... تجاهل التشفير غير معتمد: TLS_RSA_WITH_AES_128_CBC_SHA256 السماح إعادة التفاوض غير آمنة: فالس السماح رسائل مرحبا القديمة: ترو هو المصافحة الأولية: ترو هو آمن إعادة التفاوض: كاذبة الموضوع 6، سيتسوتيموت (0 ) ٪٪ لا يوجد جلسة عميل مخزنة *** كلينثيلو، TLSv1 راندومكوكي: غمت: 1434280256 بيتس = {216 ... 40} معرف الجلسة: {} أجنحة التشفير: [TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA، .... SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA، SSL_RSA_WITH_RC4_128_MD5، TLS_EMPTY_RENEGOTIATION_INFO_SCSV] ضغط الأساليب: {0} ملحق elliptic_curves، أسماء منحنى: {secp256r1 .. secp256k1} إكستنسيون ec_point_formats، تنسيقات: [أونكومبرسد]

الموضوع 6، كتابة: TLSv1 المصافحة، طول = 163 الموضوع 6، قراءة: تنبيه TLSv1، طول = 2 الموضوع 6، ريكف TLSv1 التنبيه: قاتلة، handshake_failure الموضوع 6، ودعا كلوزسوكيت () الموضوع 6، التعامل مع استثناء: javax.net.ssl.SSLHandshakeException: **

تلقى تنبيه فادح: handshake_failure

**

import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;

public class ConnectHttps {
  public static void main(String[] args) throws Exception {
    /*
     *  fix for
     *    Exception in thread "main" javax.net.ssl.SSLHandshakeException:
     *       sun.security.validator.ValidatorException:
     *           PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
     *               unable to find valid certification path to requested target
     */
    TrustManager[] trustAllCerts = [
        [ getAcceptedIssuers: { -> null },
          checkClientTrusted: { X509Certificate[] certs, String authType -> },
          checkServerTrusted: { X509Certificate[] certs, String authType -> } ] as X509TrustManager
    ]

    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

    // Create all-trusting host name verifier
    HostnameVerifier allHostsValid = new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
          return true;
        }
    };
    // Install the all-trusting host verifier
    HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
    /*
     * end of the fix
     */

    //URL url = new URL("https://google.com"); //WORKS
    URL url = new URL("https://localhost:8090");   // DOES NOT WORK, WHY?
    URLConnection con = url.openConnection();
    Reader reader = new InputStreamReader(con.getInputStream());
    while (true) {
      int ch = reader.read();
      if (ch==-1) {
        break;
      }
      System.out.print((char)ch);
    }
  }
}

تشغيل التعليمات البرمجية الموجودة هنا يظهر أنه لم يتم تمكين TLSv1.2 على جانب العميل:

البروتوكولات المدعومة: 5
SSLv2Hello
أنظمة SSLv3
TLSv1
TLSv1.1
TLSv1.2

البروتوكولات الممكنة: 2
أنظمة SSLv3
TLSv1


.. من المفترض أن يثق كل المضيفين، لكنه لا ..

.. ريكف TLSv1 أليرت: فتل، handshake_failure ثرياد-6

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

إديت: من الخادم بتسجيل سبب المشكلة مرئيا:

معالجة الخطأ: خطأ خطأ بروتوكول سل: 1408A0C1: إجراءات سل: SSL3_GET_CLIENT_HELLO: لا يوجد تشفير مشترك

وهذا يعني أنه لا يوجد تشفير مشترك بين العميل والخادم.

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

آخر سوء تكوين شائع هو تعطيل كافة الأصفار SSLv3 في الملقم في الاعتقاد بأن هذا ضروري لتعطيل بروتوكول SSL3.0 (ليس كذلك). يؤدي هذا إلى تعطيل جميع الأصفار بشكل فعال باستثناء بعض الأصفار الجديدة التي تم إدخالها مع تلس 1.2. سوف المتصفحات الحديثة لا تزال قادرة على الاتصال ولكن كبار السن العملاء لا. يمكن رؤية هذا التهيئة الخاطئة في هذه الحالة (من التعليق):

من سجل الخادم ،، واجهة الشفرات: فيبس:! SSLv3:! أنول ،،

!SSLv3 تعطيل جميع الأصفار المتاحة للإصدار SSL3.0 وأعلى . وهذا في الواقع يترك فقط الأصفار TLS1.2 لأنه لا توجد أصفار جديدة مع TLS1.0 و TLS1.1. منذ العميل يبدو أن يكون فقط دعم TLS1.0 لن يكون هناك تشفير مشترك:

... الكتابة: TLSv1 المصافحة

استخدام !SSLv3 في الأصفار عادة ما يكون بسبب عدم فهم الفرق بين إصدار البروتوكول والأصفار. لتعطيل SSLv3 يجب عليك فقط تعيين البروتوكول وفقا لذلك ولكن ليس الأصفار.





certificate