Мы запускаем веб-приложение с серверной частью JVM (обновление Java 7 75; код находится на Scala, но я не думаю, что это актуально). Мы используем Google для аутентификации через Oauth.
За последние пару месяцев было несколько дней, когда нам периодически не удавалось аутентифицировать пользователей.
Перенаправление в Google и из Google выполняется успешно, но когда мы пытаемся вызвать token_endpoint
по адресу https://www.googleapis.com/oauth2/v4/token для проверки аутентификации мы иногда получаем следующее исключение: javax.net.ssl.SSLHandshakeException: server certificate change is restrictedduring renegotiation
.
Этот комментарий к другому вопросу привел меня к обнаружению ошибки JDK, которая может проявляться как это исключение (Что означает javax.net.ssl.SSLHandshakeException: изменение сертификата сервера ограничено во время повторного согласования и как это предотвратить?).
Моя рабочая гипотеза:
Ошибка (https://bugs.openjdk.java.net/browse/JDK-8072385) означает, что проверяется только первая запись в списке альтернативных имен субъекта (SAN). Приведенное выше исключение возникает, когда проверяемое имя хоста находится в списке SAN, но не находится в верхней части списка.
Вчера (27 мая 2015 г. из ) мы увидели два разных сертификата, которые с перерывами обслуживались с www.googleapis.com. Первый (серийный номер 67:1a:d6:10:cd:1a:06:cc
) имел список SAN из DNS:*.googleapis.com, DNS:*.clients6.google.com, DNS:*.cloudendpointsapis.com, DNS:cloudendpointsapis.com, DNS:googleapis.com
, а второй (серийный номер 61:db:c8:52:b4:77:cf:78
) имел список SAN из: DNS:*.storage.googleapis.com, DNS:*.commondatastorage.googleapis.com, DNS:*.googleapis.com
.
Из-за ошибки в JVM мы можем проверить первый сертификат, но исключение выдается со вторым (несмотря на то, что он полностью действителен), поскольку *.googleapis.com
не является первой записью в списке SAN.
Исправление находится в еще не выпущенном 7u85 (без упоминания о том, когда оно будет доступно).
Я понизил рейтинг одного узла нашего кластера до 7u65, но сертификат, похоже, был отменен примерно в то время, когда мы это сделали (последняя ошибка, которую мы видели, была 22:20 по Гринвичу), поэтому трудно определить положительное исправление.
Кто-нибудь еще сталкивался с этим или чем-то подобным и имел ли какой-либо другой обходной путь, кроме понижения версии (при понижении версии удаляются различные другие проверки SSL/TLS)?