Обновление : (ответ принят и обновлен вопрос с полезными ссылками внизу)
С использованием
- 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;
}
Полезные ссылки
- https://security.stackexchange.com/questions/42161/configuring-gcm-cipher-suites-in-jetty-based-server
- https://stackoverflow.com/a/21290409/1103377
- https://www.chromium.org/Home/chromium-security/education/tls#TOC-Deprecation-of-TLS-Features-Algorithms-in-Chrome
- https://code.google.com/p/chromium/codesearch#chromium/src/chrome/app/generated_resources.grd&q=IDS_PAGE_INFO_SECURITY_TAB_WEAK_ENCRYPTION_CONNECTION_TEXT&sq=package:chromium&type=cs&l=9563
SHA1
. Вы должны использоватьSHA256
для аутентификации сообщений. - person Boris the Spider   schedule 12.04.2015