Актуализация: (Приех отговор и актуализирах въпроса с полезни връзки в долната част)
Използвайки
- 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;
}
Полезни връзки
- 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