Проверка общего имени сертификата SSL в Java - PullRequest
4 голосов
/ 23 декабря 2010

Я открываю безопасный сокет SSL для порта 12345 на моем сервере. Сейчас я использую самоподписанный сертификат. Я установил сертификат в хранилище ключей сервера и доверенного хранилища клиента; хорошо, бла-бла-шум.

Я строю на этом примере: http://www.exampledepot.com/egs/javax.net.ssl/Client.html

Клиент правильно проверяет наличие у сервера подписанного сертификата. Кажется, что клиент НЕ проверяет, что представленный сертификат CN (Common Name) соответствует имени хоста сервера, к которому я подключаюсь. Очевидно, что получить подписанный сертификат несложно, если не требуется, чтобы он соответствовал запрашиваемому домену.

Когда я устанавливаю свой сертификат (используя keytool --import), я устанавливаю его как сертификат корневого уровня? Нужно ли подписывать второй сертификат, используя первичный ключ первого сертификата? Почему TrustManager не проверяет общее имя?

Надеюсь, это имело смысл, и я не слишком обдумываю все это.

Спасибо!

ОБНОВЛЕНИЕ: Похоже, что для Java SSL может потребоваться проверка сертификатов вручную? (http://www.java2s.com/Open-Source/Java-Document/Net/Apache-common-HttpClient/org/apache/commons/httpclient/contrib/ssl/StrictSSLProtocolSocketFactory.java.htm) Может ли это действительно быть правдой? Я ожидал, что по умолчанию будет безопасным, а все, что меньше, потребует явного переопределения. Я удивлен. Может кто-то подтвердить?

Ответы [ 2 ]

11 голосов
/ 23 декабря 2010

Проверка имени хоста зависит от приложения.Он встроен в Java в случае HTTPS через классы HttpsURLConnection и HostnameVerifier.Если вы используете SSLSocket напрямую, вам решать, как правило, через HandshakeCompletedListener.

1 голос
/ 23 декабря 2010

Возможно, у вас есть такой код? Это будет игнорировать упомянутое вами несоответствие имени хоста.

HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier(){
    public boolean verify(String string,SSLSession ssls) {
        return true;
    }
});

В противном случае, как говорится в одном из комментариев в этой ссылке , вы получите исключение HTTPS hostname wrong: should be...

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