java - 如何使用 jetty 嵌入式 8.1.16.v20140903 设置 HTTPS

标签 java ssl https embedded-jetty

我正在使用 here 中的示例 jetty 嵌入式项目之一
我添加了一个 SelectChannelConnect、SslSelectChannelConnect 和 SslSocketConnector,如上面的链接所示。
这是我的代码片段:

// 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 上工作。它在浏览器中给了我一个关于不受信任的证书等等的初步警告。我添加了一个异常(exception),但随后它显示此消息:“这可能是因为该站点使用了过时或不安全的 TLS 安全设置。如果这种情况持续发生,请尝试联系该网站的所有者。”在 IE 上。我在 IE 上的设置没问题,选中了 TLS 1.0、1.1 和 1.2,未选中 SSL 3.0。
我错过了什么吗?我相信我遵循了示例项目中的所有内容。
我还生成了 keystore 并从 jdk SE 6u45 构建了项目。我认为 keystore 文件没有任何问题,因为它可以在另一个应用程序中完美运行。

最佳答案

大多数浏览器不再支持 SSLv3、TLS/1.0 和 TLS/1.1。
Chrome 公告
https://developers.google.com/web/updates/2020/05/chrome-84-deps-rems
火狐公告
https://blog.mozilla.org/security/2018/10/15/removing-old-versions-of-tls/
苹果 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)

关于java - 如何使用 jetty 嵌入式 8.1.16.v20140903 设置 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66499803/

相关文章:

java - JavaFX 场景生成器中的调整大小按钮

java - Spring AOP配置拦截所有异常

ssl - 如何在使用 openssl 的专用网络上的服务器上启用 SSL?

ssl - 通过 Https 端点在两个 Webrole 之间交换数据

c# - 检查 Url 是否以 "http"或 "https"开头,非安全 Url 是否可能以 "https"开头?

ssl - 访问digitalocean nginx服务器上的8000端口

java - 在java中创建一个带有字符串拆分函数的数组

java - 虚拟实现设计模式名称

java - JDK 11.javax.net.ssl.SSLPeerUnverifiedException : peer not authenticated

php - 通过 php 中的 ssh 连接隧道请求