Как може да бъде предотвратено това съобщение - Вашата връзка с 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 протокола (тъй като chrome постепенно премахна 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 няма да се оплаква от остаряла криптография?

Разрових се в кодовата база на chromium, за да видя това? Но все още не можах да разбера причината.

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   -  person acthota    schedule 12.04.2015
comment
Актуализация: Опитах и ​​с ключ с размер 4096. Все пак chrome казва същото.   -  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
Добре. Ще направи това. Все още не съм го прочел напълно. Благодаря за линка.   -  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, документацията на jetty обяснява как да конфигурирате пакетите за шифроване.

Ако нямате 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
@Всички : [КОМЕНТАР ЗА ПРИЕМАНЕ] : Официалната връзка на chrome казва: Може да виждате съобщението Вашата връзка с example.com е шифрована с остаряла криптография. Това обикновено означава, че връзката с текущия уебсайт използва остарял шифров пакет. [ПРОДЪЛЖЕНИЕ] - person acthota; 13.04.2015
comment
[ПРОДЪЛЖЕНИЕ] Разделът CipherSuites в тази връзка (docs.oracle.com/javase/7/docs/technotes/guides/security/) също ясно показва, че няма GCM CipherSuites, поддържани в Java 7. Този отговор (stackoverflow.com/questions/21289293/) изглежда също предполага същото. - person acthota; 13.04.2015
comment
Моля, включете моите коментари/връзки по-горе в отговора си, ако смятате, че това ще го направи изчерпателен. Приемане на вашия отговор. Благодаря за отделеното време. (Не мога да гласувам за вашия отговор, тъй като нямам достатъчна репутация :( ) - person acthota; 13.04.2015
comment
Сдоби се с репутация :) - person acthota; 13.04.2015