Как предотвратить появление этого сообщения? Ваше соединение с example.com зашифровано устаревшей криптографией. - в деталях сертификата chrome?

Обновление : (ответ принят и обновлен вопрос с полезными ссылками внизу)

С использованием

  • Java 7
    • Jetty server (Embedded)
    • Самоподписанный сертификат, установленный на сервере. Генерируется с помощью команды:
      #P3#
    • Браузер Chrome в качестве клиента

введите здесь описание изображения

Сертификат показывает это, когда я просматриваю его детали:

Certificate fingerprints: MD5: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX SHA1: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX SHA256: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Signature algorithm name: SHA256withRSA Version: 3

Я также сделал следующее на стороне пристани, чтобы исключить некоторые плохие CipherSuites и избежать использования протокола SSLV3 (поскольку хром постепенно отказался от SSLV3 из-за недавних атак POODLE):

            sslContextFactory.setIncludeCipherSuites(new String[] {
                    "TLS_DHE_RSA.*", "TLS_ECDHE.*", });
            sslContextFactory.setExcludeCipherSuites(new String[] { ".*NULL.*",
                    ".*RC4.*", ".*MD5.*", ".*DES.*", ".*DSS.*" });
            sslContextFactory.setExcludeProtocols(new String[] { "SSLv3" });
            sslContextFactory.setRenegotiationAllowed(false);

Что я здесь упускаю?

Что нужно сделать, чтобы Chrome не жаловался на устаревшую криптографию?

Я копался в базе кода хрома, чтобы увидеть это? Но я пока не мог понять причину.

Перед установкой сообщения об устаревшей криптографии Chrome проверяет следующее.


if (net::SSLConnectionStatusToVersion(ssl.connection_status) >=
        net::SSL_CONNECTION_VERSION_TLS1_2 &&
    net::IsSecureTLSCipherSuite(
        net::SSLConnectionStatusToCipherSuite(ssl.connection_status))) {
  site_connection_details_.assign(l10n_util::GetStringFUTF16(
      IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTED_CONNECTION_TEXT,
      subject_name));
} else {
  site_connection_details_.assign(l10n_util::GetStringFUTF16(
      IDS_PAGE_INFO_SECURITY_TAB_WEAK_ENCRYPTION_CONNECTION_TEXT,
      subject_name));
}

bool IsSecureTLSCipherSuite(uint16 cipher_suite) {
  int key_exchange, cipher, mac;
  if (!GetCipherProperties(cipher_suite, &key_exchange, &cipher, &mac))
    return false;

  // Only allow forward secure key exchanges.
  switch (key_exchange) {
    case 10:  // DHE_RSA
    case 14:  // ECDHE_ECDSA
    case 16:  // ECDHE_RSA
      break;
    default:
      return false;
  }

  switch (cipher) {
    case 13:  // AES_128_GCM
    case 14:  // AES_256_GCM
    case 17:  // CHACHA20_POLY1305
      break;
    default:
      return false;
  }

  // Only AEADs allowed.
  if (mac != kAEADMACValue)
    return false;

  return true;
}

Полезные ссылки


person acthota    schedule 12.04.2015    source источник
comment
goo.gl/LLgCjR, goo.gl/ueVl0e - Chromium Codebase   -  person acthota    schedule 12.04.2015
comment
Обновление: Пробовал и с ключом размером 4096. Тем не менее хром говорит то же самое.   -  person acthota    schedule 12.04.2015
comment
Отредактировано, чтобы добавить версию Java в среду, которую я использую.   -  person acthota    schedule 12.04.2015
comment
Это SHA1. Вы должны использовать SHA256 для аутентификации сообщений.   -  person Boris the Spider    schedule 12.04.2015
comment
@BoristheSpider: Есть идеи, как этого избежать?.. -sigalg SHA256withRSA ... Это то, что я использую в команде keytool .... Должен ли я явно исключить все CipherSuites, которые имеют SHA1, в конфигурации SSL Jetty? Что определяет, какой алгоритм используется для аутентификации сообщений?   -  person acthota    schedule 12.04.2015
comment
Я скажу то, что сказал в прошлый раз, прочитайте это.   -  person Boris the Spider    schedule 12.04.2015
comment
Ok. Сделаю это. Полностью еще не читал. Спасибо за ссылку.   -  person acthota    schedule 12.04.2015
comment
@BoristheSpider: выполнение sslscan показало, что .. Принято TLSv1 256 бит ECDHE-RSA-AES256-SHA Принято TLSv1 256 бит DHE-RSA-AES256-SHA Принято TLSv1 128 бит ECDHE-RSA-AES128-SHA Принято TLSv1 128 бит DHE-RSA -AES128-SHA (продолжение)   -  person acthota    schedule 12.04.2015
comment
(продолжение) Затем я явно вынул наборы, содержащие 128... Тогда сервер вообще не может согласовывать SSL... Я на Java 7, 9.2.x Jetty. Нужно изучить дальше   -  person acthota    schedule 12.04.2015
comment
Я полагаю, вы не установили Файлы политики юрисдикции неограниченной силы?   -  person Boris the Spider    schedule 12.04.2015
comment
Я сделал. Я давно использую 256-битные ключи.   -  person acthota    schedule 12.04.2015
comment
@All : принял ответ и обновил вопрос полезными ссылками внизу.   -  person acthota    schedule 13.04.2015


Ответы (1)


Как вы указали в коде, игрушка должна использовать AES_128_GCM, AES_256_GCM или CHACHA20_POLY1305 в качестве шифра, чтобы криптография считалась современной. Это не имеет ничего общего с сертификатом, но с конфигурацией сервера.

На самом деле Chrome еще не поддерживает AES_256_GCM, а java еще не поддерживает CHACHA20_POLY1305. Даже AES_128_GCM поддерживается только в java 8. Если вы не используете java 8, «современная» криптография не включена по умолчанию. Если вы используете java 8, в документации причала объясняется, как настроить наборы шифров.

Если у вас нет Java 8, кажется, вы можете использовать Bouncy Castle, настроенный как поставщик (http://www.bouncycastle.org/wiki/display/JA1/Provider+Installation), чтобы включить наборы шифров с использованием GCM. Хотя я сам не тестировал.

person user2313067    schedule 12.04.2015
comment
Спасибо за ответ. Итак, вы говорите, что это может быть невозможно исправить, если мы используем Java 7, поскольку поддержка криптографии в Java не поддерживает современную криптографию (в глазах браузера Chrome)... AKA.. шифры с аутентификацией и 256 бит поддержка ключей (поправьте меня, если я не прав)? .... [Все] : Могут ли это подтвердить другие эксперты в этой области и те, кто пытался настроить SSL на JAVA 7 и JETTY SERVER? - person acthota; 12.04.2015
comment
@acthota После некоторых поисков кажется, что Bouncy Castle поддерживает более старые версии Java. Я отредактировал свой ответ соответственно. - person user2313067; 12.04.2015
comment
@All: [КОММЕНТАРИЙ ПРИНЯТИЯ]: Официальная ссылка на Chrome гласит: Возможно, вы видите сообщение. Ваше соединение с example.com зашифровано устаревшей криптографией. Обычно это означает, что для подключения к текущему веб-сайту используется устаревший набор шифров. [ПРОДОЛЖЕНИЕ] - person acthota; 13.04.2015
comment
[ПРОДОЛЖЕНИЕ] Раздел CipherSuites по этой ссылке (docs.oracle.com/javase/7/docs/technotes/guides/security/) также ясно показывает, что в Java 7 нет поддерживаемых GCM CipherSuites. Этот ответ (stackoverflow.com/questions/21289293/) тоже похоже на это намекает. - person acthota; 13.04.2015
comment
Пожалуйста, включите мои комментарии / ссылки выше в свой ответ, если вы считаете, что это сделает его исчерпывающим. Принятие вашего ответа. Спасибо за ваше время. (Невозможно проголосовать за ваш ответ, так как у меня недостаточно репутации :() - person acthota; 13.04.2015
comment
Получил репутацию :) - person acthota; 13.04.2015