Как использовать HostnameVerifier? - PullRequest
0 голосов
/ 26 октября 2019

Я сейчас экспериментирую с SSL-конфигами с использованием KeyManager и TrustManager, мне все ясно, кроме части HostNameVerifier.

Я прочитал следующее:
https://docs.oracle.com/javase/7/docs/api/javax/net/ssl/HostnameVerifier.html
https://lightbend.github.io/ssl-config/HostnameVerification.html

Таким образом, в основном это вступает в силу, когда запрошенный URL-адрес и URL-адрес в сертификате не совпадают.

Как лучше всего справиться с этим?

 new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession session) {
          // some code
        }
    };

С точки зрения безопасности (как человек в средней атаке), я думаю, он должен все время возвращать ложь. Но в этом случае, какова цель всего этого?
Однако большую часть времени в Интернете. Я сталкиваюсь с решениями, которые возвращают «истинное» истинное (без какой-либо работы над аргументами).

Так что меня смущает, когда, почему и как я должен его использовать.

Не могли бы вы уточнитьэто пожалуйста?

1 Ответ

1 голос
/ 26 октября 2019

С точки зрения безопасности (как человек в середине атаки) Я думаю, что он должен возвращать false все время.

Почти правильно. Этот метод вызывается только в том случае, если проверка по умолчанию обнаруживает проблему. Почти во всех случаях такая проблема означает, что соединение должно быть прервано, чтобы сохранить его в безопасности.

Однако, просматривая интернет в большинстве случаев, я сталкиваюсь с решениями, которые возвращают «истинное» значение (безлюбая работа над аргументами).

Это неправильно почти каждый раз. Авторы такого кода обычно не понимают последствий (возможно, MITM, как вы правильно сказали) и просто хотят, чтобы их код работал как-то. Да, он будет работать, но он также будет работать, когда не должен, то есть небезопасен.

Типичные причины сбоя проверки по умолчанию состоят в том, что сервер неправильно настроен с неверным сертификатом или к серверу обращаютсяс неправильным именем хоста (т.е. не тем, что в сертификате).

Так что меня смущает, когда, почему и как я должен его использовать.

Вы должны использоватьэто только в том случае, если вы знаете, что хост возвращает сертификат с неверным субъектом, но вы также знаете, что именно будет неправильно, и правильно проверит это ожидание в вашей реализации.

Конечно, гораздо лучше обходить не все приложения, обращающиеся к серверу, а вместо этого решить реальную проблему. В зависимости от реальной причины проблемы это обычно означает либо исправление сертификата на сервере, либо исправление имени хоста, используемого для доступа к серверу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...