Предупреждение о подтверждении связи SSL: unrecognized_name - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь получить код ответа для разных URL.

Вот фрагмент кода -

   HttpURLConnection connection = null;
    String location = url;
    int responseCode = 0;
    int count = 1;
    String redirectedUrl = null;

  do{
        try {
            connection = pingUrl(location, true);
        }
        catch (Exception e){
            logger.error("Caught exception : {}", e.getMessage());
            logger.info("Exception while connecting to :{}", location);

            if(e.getMessage().contains("unrecognized_name")) {
                logger.info("Trying establishing connection by disbling SNI ....");

                try {
                    connection = pingUrl(location, false);
                }catch (Exception f){
                    logger.error("Caught exception with SNI disablement as well....");

                    if(count==1)
                        res.put(statusCode, "Connection failure");
                    else
                        res.put(statusCode, "Redirection , Connection failure");

                    break;
                }
            }
        }

        try {
            responseCode = connection.getResponseCode();
        } catch (IOException e) {
            logger.error("Caught Exception getting response code : {}", e.getMessage());

            if(count==1)
                res.put(statusCode, "No Response Code");
            else
                res.put(statusCode, "Redirection, No Response Code");

            break;
        }

        //res.put(statusCode, checkHttpStatus(responseCode,count));

        if ((responseCode>300 && responseCode<310)) {
            location = connection.getHeaderField("Location");
            if(location==null) {
                res.put(statusCode, "Redirection, No Location Field");
                break;
            }
            redirectedUrl = location;
            count++;
            connection.disconnect();
        }

        else {
            if(count==1)
                res.put(statusCode, Integer.toString(responseCode));
            else
                res.put(statusCode, "Redirection, " + responseCode);
        }

    }while(responseCode>300 && responseCode<310);


   public HttpURLConnection pingUrl(String url, boolean sniEnablement) throws Exception{

    int count = 0;
    HttpURLConnection conn = null;

        if(!sniEnablement) {
            System.setProperty("jsse.enableSNIExtension", "false");
        }

        conn = (HttpURLConnection) new URL(url).openConnection();
        conn.setRequestMethod("GET");
        /**
         * Setting the Browser properties
         */
        //conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76 Safari/537.36");
        conn.setConnectTimeout(2000);
        conn.setInstanceFollowRedirects(false);
        conn.setReadTimeout(10000);
        conn.connect();
        Thread.sleep(1000);

    return conn;
}

Сначала я пытаюсь установить sh нормальное HTTP-соединение . Если я получаю исключение подтверждения SSL, я пытаюсь установить соединение sh, отключив SNI.

URL - "https://reg.mci.com/service"

Но поскольку после загрузки библиотеки SSL она не может установить sh соединение даже после отключения SNI.

Основная цель этого кода - получить коды состояния для нескольких URL-адресов. Поэтому я не могу просто отключить SNI для всех сайтов. Что здесь можно сделать, чтобы этот код работал на всех сайтах.

...