tomcat - 如何使用 SNI 设置 Tomcat 服务于两个 SSL 证书?

标签 tomcat ssl ssl-certificate sni

根据这两个答案[1] [2]有可能有两个来自同一个 Apache Tomcat 的 SSL 证书使用服务器名称指示 (SNI)。

我的问题是,如何设置它? 我可以设置两个虚拟主机,但我仍然只有一个连接器,它向客户端提供指定的 SSL 证书。在连接器中,可以指定用于证书的 keystore 和别名,但没有参数说明此连接器适用于哪个虚拟主机,或者他应该根据使用的域向客户端提供哪个证书。

我如何告诉 tomcat 在使用 SNI 时必须使用哪个 SSL 证书(或者更正确地说是哪个 keystore )?

[1] https://stackoverflow.com/a/10173447
[2] https://stackoverflow.com/a/6343059

最佳答案

您需要重新阅读这些问题的答案。在 Java 8 之前,服务器端不支持 SNI。Tomcat 8 必须支持的最低 Java 版本是 Java 7,因此目前 Tomcat 不支持 SNI。

如果 Tomcat 在 Java 8 或更高版本上运行,则可能有选择地支持 SNI,但这需要 Tomcat 中的代码更改,目前尚无计划。

截至 2014 年 12 月的更新:

添加 SNI 支持在 TODO 上Tomcat 9 的列表。该 TODO 列表很长,SNI 目前不在列表的顶部。一如既往地欢迎补丁。

一旦 SNI 在 Tomcat 9 中实现,SNI 支持可能会向后移植到 Tomcat 7 和 Tomcat 8。再次欢迎打补丁。

截至 2015 年 6 月的更新:

SNI 已为 Tomcat 9 实现。所有三个 HTTP 连接器实现(NIO、NIO2 和 APR/native)都支持它。要将 SNI 与 NIO 或 NIO2 一起使用,您需要从源代码编译 Tomcat 9(又名主干)。要将 SNI 与 APR/native 一起使用,您还需要编译 tc-native 主干(不是 Tomcat 版本当前使用的 1.1.x 分支)。

TLS 配置已发生重大变化以支持 SNI。构建 Tomcat 9 后,详细信息将在文档 Web 应用程序中。

截至 2016 年 11 月的更新:

Tomcat 8.5.x 中包含 SNI 支持。它不太可能进一步向后移植。即不太可能升级到 8.0.x 或 7.0.x。

关于tomcat - 如何使用 SNI 设置 Tomcat 服务于两个 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20190464/

相关文章:

SSL-服务器证书是否绑定(bind)到特定机器?

ssl - TLS 相互认证

apache - 设置 Apache 反向代理 tomcat(Jenkins、Sonar)的正确方法是什么

java - 在 Web 应用程序中使用 javassist 阻塞线程

java - Tomcat Web 应用程序中与 Java 和 MySQL 的连接池

Apache SSL 配置中断 HTTP

postgresql - 使用 SSL 将 Pentaho Kettle/Spoon 连接到 Heroku PostgreSQL 时出现问题

wcf - 使用 SSL 和 WCF 自托管 - 无法将证书绑定(bind)到端口

java - 如何从命令行检查 Java SSL 证书是否真的适用于 Java?

java - 在 Tomcat servlet 中创建套接字 - 权限被拒绝(连接失败)