gpt4 book ai didi

java - 如何在 chrome 证书详细信息中防止出现此消息 - "Your connection to example.com is encrypted with obsolete cryptography."?

转载 作者:行者123 更新时间:2023-11-30 08:14:15 24 4
gpt4 key购买 nike

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

使用

  • Java 7
    • jetty 服务器(嵌入式)
    • 安装在服务器上的自签名证书。使用命令生成:

      keytool -genkey -keyalg RSA -sigalg SHA256withRSA -alias selfsigned -keystore mykeystore.jks -validity 360 -keysize 2048

    • Chrome 浏览器作为客户端

enter image description here

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

Certificate fingerprints:
MD5: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SHA1: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SHA256: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Signature algorithm name: SHA256withRSA
Version: 3

我还在 jetty 方面做了以下工作,以确保我排除了一些不良的 CipherSuites 并避免使用 SSLV3 协议(protocol)(因为 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;
}

有用的链接

最佳答案

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

关于java - 如何在 chrome 证书详细信息中防止出现此消息 - "Your connection to example.com is encrypted with obsolete cryptography."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29587309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com