Как я могу заставить Tomcat (и т. Д.) Принимать запросы прокси HTTPS?

Я пытаюсь создать прокси на Java, который проксирует URL-адреса HTTP и HTTPS. (Я использую Tomcat 8.0.14. Я настроил Tomcat для приема HTTPS-соединений через порт 8443, хотя в этом нет необходимости использовать Tomcat в качестве прокси-сервера HTTPS. Но в любом случае я получаю такое же поведение.) У меня он работает с использованием HTTP, но когда я использую HTTPS, кажется, что Tomcat просто отклоняет соединение и даже не вызывает мой сервлет.

Чтобы проиллюстрировать это, я создал пример сервлета «Hello World», сопоставленного с «/ *» в моем web.xml.

public class HelloWorldProxy extends HttpServlet {
    @Override
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
        System.out.println("Hello, World! " + ((new Date()).toString()));
        super.service(req, res);
    }
}

Я установил localhost: 8080 в качестве прокси для запросов HTTP и HTTPS в Firefox в качестве теста. Поведение:

  • Когда я нажимаю «http://www.bbc.co.uk/», я получаю «Здравствуйте! , Мир! .... "в консоли, как и ожидалось.
  • Когда я нажимаю «https://github.com/», я не получаю никакого вывода на консоль.

Кто-нибудь знает, почему это?


person Adam Burley    schedule 18.08.2015    source источник
comment
Проксирование https - это человек в центре атаки. Браузер пытается проверить, что его соединение установлено с целевым сервером, а не с прокси. См. Также stackoverflow.com/questions/516323/   -  person flup    schedule 25.08.2015
comment
Как прокомментировал Бруно связанный ответ, HTTP-прокси в этом смысле не посредник. Например, мы используем прокси-сервер под названием CNTLM, который аутентифицируется с помощью нашего корпоративного прокси-сервера NTLM. И CNTLM, и корпоративный прокси отлично работают с HTTPS-соединениями. В случае корпоративного прокси-сервера вы можете представить, что это может быть достигнуто с помощью сертификата, который развернут на все корпоративные машины, но для локально установленного CNTLM такого процесса нет. Прокси-серверу не нужно расшифровывать HTTPS-трафик и, следовательно, иметь сертификат.   -  person Adam Burley    schedule 25.08.2015


Ответы (1)


Для меня пока не ясно, какая часть соединения не работает. Насколько я понял, ваша установка выглядит так

client ‹---> my-tomcat-proxy ‹---> какая-то веб-страница

Если https-соединение между клиентом и вашим tomcat не работает, возможно, вам нужно расширить XML-файл конфигурации tomcat с помощью коннектора SSL, см. СПРАВОЧНИК по настройке SSL в Apache Tomcat 6.0 для получения дополнительных сведений.

У меня была та же проблема, что мой кот не отвечал на запросы https на стороне клиента. Моя проблема заключалась в том, что я неправильно настроил tomcat для приема https-соединений.

person Westranger    schedule 27.08.2015
comment
Я настроил tomcat для приема https-соединений в соответствии с моим вопросом, и это отлично работает (когда сервер tomcat вызывается как автономный сервер, а не как прокси). Однако в этом также не должно быть необходимости для создания прокси-сервера HTTPS в смысле спецификации HTTP. Соединение между клиентом и прокси-сервером не является сквозным HTTPS, поскольку прокси просто передает зашифрованный трафик между хостом и клиентом. Между клиентом и прокси, прокси и хостом не существует двух отдельных соединений HTTPS. Это все одно соединение с одним сертификатом SSL. - person Adam Burley; 27.08.2015
comment
Руководство, на которое вы ссылаетесь, посвящено настройке автономного сервера, на котором шифрование HTTPS завершается на прокси-сервере. Мой сервер уже может это сделать, но я не пытаюсь достичь этой цели. Я разместил весь свой код и настройку в своем вопросе. Если вы сможете заставить его работать и опубликуете, как вы это сделали, я приму ваш ответ. Однако я подозреваю, что ваш текущий ответ основан на вашем опыте работы с автономными серверами HTTPS, а не с прокси HTTPS. - person Adam Burley; 27.08.2015
comment
Привет, Westranger, ответ не помог мне решить мою проблему, в соответствии с моими комментариями выше, на которые вы не ответили. - person Adam Burley; 15.07.2016