【问题标题】:How to setup HTTPS with jetty embedded 8.1.16.v20140903如何使用 jetty 嵌入式 8.1.16.v20140903 设置 HTTPS
【发布时间】:2021-03-05 21:21:40
【问题描述】:

我正在使用来自here 的示例码头嵌入式项目之一

我添加了一个 SelectChannelConnect、SslSelectChannelConnect 和 SslSocketConnector,如上面的链接所示。 这是我的代码中的一个 sn-p:

// Create the server
Server server = new Server();

SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(80);
connector.setMaxIdleTime(30000);
connector.setConfidentialPort(8443);
connector.setStatsOn(false);
connector.setAcceptors(4);

server.setConnectors(new Connector[]
                       { connector });

SslSelectChannelConnector ssl_connector = new SslSelectChannelConnector();
ssl_connector.setPort(443);
SslContextFactory cf = ssl_connector.getSslContextFactory();
cf.setKeyStorePath("/path/to/keystore");
cf.setKeyStorePassword("password");
cf.setKeyManagerPassword("password");
cf.setTrustStore("/path/to/keystore");
cf.setTrustStorePassword("password");
cf.setExcludeCipherSuites(
  "SSL_RSA_WITH_DES_CBC_SHA",
  "SSL_DHE_RSA_WITH_DES_CBC_SHA",
  "SSL_DHE_DSS_WITH_DES_CBC_SHA",
  "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
  "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
  "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
  "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA");
ssl_connector.setStatsOn(false);
server.addConnector(ssl_connector);
ssl_connector.open();

SslSocketConnector ssl2_connector = new SslSocketConnector(cf);
ssl2_connector.setPort(443);
ssl2_connector.setStatsOn(false);
server.addConnector(ssl2_connector);
ssl2_connector.open();

server.start()

HTTP 工作正常,但我无法让它在 HTTPS 上工作。它在浏览器中给了我一个关于不受信任的证书等等的初步警告。我添加了一个例外,但随后它显示此消息:“这可能是因为该站点使用了过时或不安全的 TLS 安全设置。如果这种情况持续发生,请尝试联系该网站的所有者。”在 IE 上。我在 IE 上的设置没问题,选中 TLS 1.0、1.1 和 1.2,未选中 SSL 3.0。

我错过了什么吗?我相信我遵循了示例项目中的所有内容。

我还生成了密钥库并从 jdk SE 6u45 构建了项目。我认为密钥库文件没有任何问题,因为它可以在另一个应用程序中完美运行。

【问题讨论】:

  • 在服务器端使用 SSL/TLS,您需要使您的 JVM 保持最新。您使用的配置早在 2014 年就有效,而现在,在 2021 年,同样的配置实际上很容易受到攻击,大多数浏览器不再支持。
  • Jetty 8.x 早在 2014 年就被设置为 EOL(生命终止)。考虑升级 - eclipse.org/jetty/download.php
  • 感谢您的反馈。不幸的是,我并不奢侈地升级 jetty 或 java。我将在其中使用的应用程序也将在本地运行。我可以让它与旧版本的浏览器一起使用吗?
  • 你需要一个非常旧的浏览器,2013-2014 年左右发布的浏览器应该可以。
  • 请注意,如果您将浏览器降级,则只有您的浏览器才能访问该网站,其他用户、防火墙、负载均衡器或 http 客户端等都无法访问...

标签: java ssl https embedded-jetty


【解决方案1】:

大部分浏览器不再支持 SSLv3、TLS/1.0 和 TLS/1.1。

Chrome 公告
https://developers.google.com/web/updates/2020/05/chrome-84-deps-rems

Firefox 公告
https://blog.mozilla.org/security/2018/10/15/removing-old-versions-of-tls/

Apple Safari 公告
https://webkit.org/blog/8462/deprecation-of-legacy-tls-1-0-and-1-1-versions/

微软公告
https://blogs.windows.com/msedgedev/2018/10/15/modernizing-tls-edge-ie11/#OkGpBsuyj6XwhUEQ.97

您应该使用 TLS/1.2 或更高版本(例如:TLS/1.3)

Java 6u45 不支持 TLS/1.2,您必须至少升级 JVM。
您需要使用 Java 7u95 或更高版本才能获得良好的 TLS/1.2 支持。
要获得 TLS/1.3 支持,您需要使用 Java 8u262 或更高版本。

注意 JVM 到期日期。
这对于 SSL/TLS 的长期成功非常重要,因为 JVM 中的各种数据库和配置需要保持最新状态,SSL/TLS 才能在一般互联网上可靠运行。

最后,摆脱您拥有的整个 setExcludeCipherSuites,因为现在 JVM 本身排除了所有这些密码套件(请参阅现代 JVM 上的 security.properties)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-16
    • 2017-07-05
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    相关资源
    最近更新 更多