Tomcat 托管具有多个 SSL 证书的多个虚拟主机

2024-05-10

例如,我有一台使用 Tomcat 7 托管多个网站的服务器

  • a.abc.com
  • b.abc.com
  • c.def.com
  • d.def.com

使用tomcat的虚拟主机功能,因此它们各自可能属于不同的webapps文件夹。

我们现在正在尝试为每个站点实施 Https。所以基本上我们得到了 2 个通配符证书,*.abc.com 和 *.def.com

我一直在寻找设置方法,发现:

  • This https://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html它教我如何使用 tomcat 设置 SSL
  • This https://stackoverflow.com/a/6343059/1131470它教我如何使用指向不同 IP 地址的不同 SSL 设置多个主机

第二个例子最接近我需要的,但问题是我的所有虚拟主机都具有相同的IP地址,唯一的区别在于域名本身,更糟糕的是它们中的大多数甚至有几个不同的别名(例如:我的d. def.com 可以将 e.ghi.com 作为其别名之一)。

所以我的问题是,我是否可以为所有虚拟主机设置多个 SSL 证书?


恐怕 Tomcat 无法满足您的所有要求:

  • 多个域
  • 两个 SSL 证书
  • 唯一的IP地址
  • 标准 SSL 端口(我已经假设了)

Tomcat SSL 配置定义于<Connector>元素在config.xml

<Connector
       protocol="org.apache.coyote.http11.Http11NioProtocol"
       port="8443" maxThreads="200"
       scheme="https" secure="true" SSLEnabled="true"
       keystoreFile="${user.home}/.keystore" keystorePass="changeit"
       clientAuth="false" sslProtocol="TLS"/>

每个连接器都需要一个port属性。参见定义HTTP 连接器 https://tomcat.apache.org/tomcat-7.0-doc/config/http.html文档

此连接器将在其上创建服务器套接字并等待传入​​连接的 TCP 端口号。您的操作系统将只允许一个服务器应用程序侦听特定 IP 地址上的特定端口号.

因此,您无法使用同一端口定义两个连接器,并且无法配置不同的 SSL 证书。

备择方案

  • 多个IP: The address属性配置将使用哪个地址来侦听指定端口。使用 SSL 证书设置每个主域的 IP 并配置Connector for it

  • 不同端口: 443对于 *.abc.com,444对于 *.def.com 等

  • SSL 代理:在tomcat前面部署Apache或Nginx等代理服务器。代理仅处理 SSL 协商和虚拟主机。所有流量均以纯 HTTP 方式重定向到 Tomcat。

作为一个例子使用Apache mod_ssl https://httpd.apache.org/docs/current/mod/mod_ssl.html+ 和 tomcat 连接器mod_JK http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html您要求的配置很简单

listen 443

<VirtualHost *:443>
    ServerName a.abc.com:443
    SSLEngine on
    SSLProtocol all -SSLv2 
    SSLCertificateFile "/home/certs/abc.com.crt"
    SSLCertificateKeyFile "/home/certs/abc.com.key"
    SSLCertificateChainFile  "/home/certs/abc.com.ca-bundle"
    SSLOptions +StdEnvVars  +ExportCertData 
    ErrorLog "/var/logs/error_abc_443.log"
    TransferLog "/var/logs/error_abc_443.log"
    JkMount  /* worker1

</VirtualHost>


<VirtualHost *:443>
    ServerName c.def.com:443
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCertificateFile "/home/certs/def.com.crt"
    SSLCertificateKeyFile "/home/certs/def.com.key"
    SSLCertificateChainFile  "/home/certs/def.com.ca-bundle"
    SSLOptions +StdEnvVars  +ExportCertData
    ErrorLog "/var/logs/error_def.log"
    TransferLog "/var/logs/error_def.log"
    JkMount  /* worker2
</VirtualHost> 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat 托管具有多个 SSL 证书的多个虚拟主机 的相关文章

  • 无法添加 laravel/homestead 盒子。 “SSL 证书问题..”。视窗

    我已经在另外两台机器上安装了 laravel homestead 以前从未见过这个问题 我搜索了又搜索 实施了大量建议的修复方案 但没有任何效果对我有用 我已经安装了 virtual box 和 vagrant 但我陷入了第一个障碍 vag
  • 特殊字符被 tomcat cookie 解析器拒绝

    当我尝试将 cookie 从 android 代码发送到服务器端代码时 cookie 解析器不接受值字段中的 字符 即 tomcat 的 cookie 解析器在将 mime 标头解析为 cookie 时拒绝此字符 我尝试使用其他特殊字符代替
  • Tomcat 唯一 SessionId

    有没有办法配置 xml tomcat 6 x 来生成唯一的SessionId 无需扩展 ManagerBase StandardManager 我正在数据库表中捕获用户登录详细信息 会话 ID 在具有唯一约束的列中 并且收到唯一约束异常 您
  • 如何使用 python 日志记录的 SMTPHandler 和 SSL 发送电子邮件

    我正在开发一个烧瓶应用程序 我想在其中将错误级别日志记录发送到电子邮件地址 我尝试设置典型的错误处理程序 mail handler SMTPHandler mailhost app config MAIL SERVER app config
  • OpenSSL 无法建立 SSL 连接,因为协议不受支持

    我正在尝试构建 OpenCoghere https wiki opencog org w Building OpenCog当我发出这个命令时 octool rdcpav l default 它构建了所有内容 但随后进入安装 Link Gra
  • 在 Apache Tomcat 上运行 JSF 项目

    如何在Tomcat上午餐JSP项目 我复制WebContent文件夹到webappApache 的文件夹 但它找不到我的 jsp 页面 但如果我将 jsp 更改为 jsf index jsf 就可以正常工作 我怎么解决这个问题 web xm
  • 使用 iOS 分布式应用程序时 Google Cloud Messaging 显示“notRegistered”

    我在 iOS 应用程序上实现了 GCM 服务 我使用 PHP 在服务器上发送 GCM 当应用程序由开发配置文件签名时 它可以完美运行 也就是说 当应用程序使用 GCM 配置注册自身时 它始终返回一个正常运行的设备令牌 我可以使用令牌向设备发
  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • 在apache中有条件地设置缓存头

    我想根据访问文件的路径有条件地设置缓存标头 基本上 访问http www example com cache cache key 应该为具有遥远未来缓存标头的文件提供服务 我使用重写规则来设置环境变量 然后尝试根据该变量设置缓存控制标头 然
  • Android 2.3.4 SSL问题

    升级到 Android 2 3 4 后 出现以下异常 javax net ssl SSLException Read error ssl 0x I O error during system call Connection timed ou
  • 如何用 C++ 编写 Apache 模块?

    我想用 C 编写一个 Apache 模块 我尝试了一个非常准系统的模块来启动 include httpd h include http core h include http protocol h include http request
  • apache_request_headers() 与 $_SERVER

    据我所知 apache request headers 提供与以下相同的信息 SERVER 但按键略有不同 为什么有人应该使用apache request headers 而不仅仅是从那里获取这些信息 SERVER 我在 Centos 上使
  • 从 HTTP 登录到 HTTPS

    我的网站默认使用 HTTP 我确实有一个启用 HTTPS 的证书 但只有其上的某些区域强制建立安全连接 登录是通过 Ajax 处理的 我想开始使用 SSL 即使请求来自 HTTP 我尝试强制请求的地址具有 HTTPS 并且它完美地回复 然而
  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • Mac 上的 Apache 虚拟主机的通配符域

    我目前正在运行多个域以进行本地开发 http wordpress dev http phpmyadmin dev http projectx dev http projecty dev 这些项目大多数位于用户的 Sites 目录中 但有些项
  • 通过互联网IP地址从一台计算机访问xampp到另一台计算机

    我试图从另一台计算机访问我的 xampp 它显示为禁止错误 然后我在 google 上搜索答案 因为他们告诉在 apache 文件夹中的 httpd conf 文件中更改一些设置 如下所示 Order Deny Allow Deny fro
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 我可以使用 mod_rewrite 更改文件扩展名吗?例如 .jpeg 到 .jpg

    我希望使用 Apache mod rewrite 将文件提供为 jpg 而不是 jpeg 这可能吗 尝试这个 RewriteEngine on RewriteRule jpeg 1 jpg
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • CNAME 速度慢吗?

    我将 CNAME 与 S3 CloudFront 一起使用来提供一些静态文件 例如 js css 图像等 我这样做是为了使存储桶的 URL 更漂亮 因为我认为最好将所有内容都定位到我的网站 以防万一将来我想移动这些文件 更改应该是透明的 今

随机推荐