跳到主要内容

JEP 114:TLS 服务器名称指示 (SNI) 扩展

QWen Max 中英对照

概述

添加对 TLS 服务器名称指示(SNI)扩展的支持,以允许基于 SSL/TLS 协议的更灵活的安全虚拟主机和虚拟机基础设施。

动机

由于 TLS 协议的限制,在没有 SNI 扩展的情况下,HTTPS 服务器无法托管在虚拟主机基础架构和虚拟机基础架构中(多个域共享同一个 IP 地址)。在云计算时代,这个问题变得更加严重。

从 JDK 7 开始,SunJSSE 默认在客户端启用了 SNI 扩展。我们需要在 JDK 8 的服务器端支持 SNI 扩展,以支持虚拟主机和云计算市场。

几乎所有的主流浏览器都支持 SNI 扩展(来自维基百科):

  • Internet Explorer 7 (Vista 或更高版本,非 XP)或更高版本
  • Mozilla Firefox 2.0 或更高版本
  • Opera 8.0 或更高版本(必须启用 TLS 1.1 协议)
  • Android 上至少为 10.1 beta 版本的 Opera Mobile
  • Google Chrome (Vista 或更高版本。XP 在 Chrome 6 或更新版本上,OS X 10.5.7 或更高版本在 Chrome 5.0.342.1 或更新版本上)
  • Safari 2.1 或更高版本(Mac OS X 10.5.6 或更高版本以及 Windows Vista 或更高版本)
  • Apple iOS 4.0 或更高版本中的 MobileSafari
  • Windows Phone 7
  • Maemo

以下 Web 服务器支持 SNI 扩展(来自维基百科):

  • Apache 2.2.12 或更高版本,使用 mod_ssl(或者实验性的 mod_gnutls)
  • 如果编译时启用了 TLS 支持的 Cherokee
  • Lighttpd 1.4.x 和 1.5.x
  • Nginx

描述

  1. 定义接口,以根据特定的服务器名称指示(Server Name Indication)选择特定的密钥管理器和信任管理器。

    对于虚拟主机基础设施,即多个服务器托管在同一个平台中,具有相同的 IP 地址但不同的主机名,不同的服务器应使用不同的密钥管理器和信任管理器。

  2. 增加根据特定的服务器名称指示将连接委派给虚拟机的能力。

    对于虚拟机基础设施,即不同服务器托管在不同的虚拟机中,具有不同的主机名但共享相同的主机 IP 地址,主机应能够根据特定的服务器名称指示将 SSL/TLS 连接委派给目标虚拟机。

替代方案

为了解决 Java 计算环境中的 TLS 问题,许多 ISP 不得不为每个 TLS/HTTPS 服务器单独分配一个新的 IP 地址,或者转而使用其他 TLS 实现作为代理。

测试

  1. 需要验证新接口是否按预期运行。
  2. 需要验证实现不会以意外方式破坏向后兼容性。
  3. 需要验证实现不会以意外方式带来新的互操作性问题。
  4. 需要验证即使服务器在委派模式下运行以支持虚拟机,也没有显著的性能影响。

影响

  • JCP:对 JCP 无影响
  • 其他 JDK 组件:对其他 JDK 组件无影响
  • 兼容性:影响最小
  • 安全性:对安全性无影响
  • 可移植性:对可移植性的影响有限
  • 用户界面:无图形用户界面
  • 文档:需要记录新接口
  • 国际化:影响最小,可能会添加新的错误消息
  • 本地化:影响最小,可能会添加新的错误消息
  • 法律:无法律问题
  • 其他:无其他已知影响