如何在 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?

更新(接受了一个答案并在底部用有用的链接更新了问题)

使用


当我查看其详细信息时,证书显示了这一点:

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;
}

有用的链接

正如您在代码中指出的那样,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 启用密码套件。不过我还没有亲自测试过。