如何在 chrome 证书详细信息中防止此消息 - "Your connection to example.com is encrypted with obsolete cryptography." -?
How can this message be prevented - "Your connection to example.com is encrypted with obsolete cryptography." - in the chrome certificate details?
更新:(接受了一个答案并在底部用有用的链接更新了问题)
使用
- Java 7
- Jetty 服务器(嵌入式)
- 服务器上安装了自签名证书。
使用命令生成:
keytool -genkey -keyalg RSA -sigalg SHA256withRSA -alias selfsigned -keystore mykeystore.jks -validity 360 -keysize 2048
- Chrome 浏览器作为客户端
当我查看其详细信息时,证书显示了这一点:
Certificate fingerprints:
MD5: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SHA1: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SHA256: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Signature algorithm name: SHA256withRSA
Version: 3
我还在码头方面做了以下工作,以确保我排除了一些不良的 CipherSuites 并避免使用 SSLV3 协议(因为 chrome 由于最近的 POODLE 攻击而逐步淘汰了 SSLV3):
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://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
正如您在代码中指出的那样,toy 需要使用 AES_128_GCM、AES_256_GCM 或 CHACHA20_POLY1305 作为现代密码学的密码。这与证书无关,与服务器配置有关。
Chrome其实还不支持AES_256_GCM,java还不支持CHACHA20_POLY1305。即使 AES_128_GCM 仅在 java 8 中受支持。如果您不使用 java 8,则默认情况下不包含 "modern" 加密。如果您使用 java 8,jetty 文档说明了如何配置密码套件。
如果您没有 java 8,您似乎可以使用 Bouncy Castle,设置为提供商 (http://www.bouncycastle.org/wiki/display/JA1/Provider+Installation) 以使用 GCM 启用密码套件。不过我还没有亲自测试过。
更新:(接受了一个答案并在底部用有用的链接更新了问题)
使用
- Java 7
- Jetty 服务器(嵌入式)
- 服务器上安装了自签名证书。
使用命令生成:
keytool -genkey -keyalg RSA -sigalg SHA256withRSA -alias selfsigned -keystore mykeystore.jks -validity 360 -keysize 2048
- Chrome 浏览器作为客户端
当我查看其详细信息时,证书显示了这一点:
Certificate fingerprints: MD5: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX SHA1: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX SHA256: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Signature algorithm name: SHA256withRSA Version: 3
我还在码头方面做了以下工作,以确保我排除了一些不良的 CipherSuites 并避免使用 SSLV3 协议(因为 chrome 由于最近的 POODLE 攻击而逐步淘汰了 SSLV3):
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://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
正如您在代码中指出的那样,toy 需要使用 AES_128_GCM、AES_256_GCM 或 CHACHA20_POLY1305 作为现代密码学的密码。这与证书无关,与服务器配置有关。
Chrome其实还不支持AES_256_GCM,java还不支持CHACHA20_POLY1305。即使 AES_128_GCM 仅在 java 8 中受支持。如果您不使用 java 8,则默认情况下不包含 "modern" 加密。如果您使用 java 8,jetty 文档说明了如何配置密码套件。
如果您没有 java 8,您似乎可以使用 Bouncy Castle,设置为提供商 (http://www.bouncycastle.org/wiki/display/JA1/Provider+Installation) 以使用 GCM 启用密码套件。不过我还没有亲自测试过。