如何加密Tomcat的8个连接与Apache或Nginx的在Ubuntu 16.04

Apache Tomcat是一个Web服务器和servlet容器旨在服务于Java应用程序。生产企业部署常用和更小的应用需求,Tomcat是既灵活又强大。在本指南中,我们将讨论如何确保你的Ubuntu ...

介绍

Apache Tomcat是一个Web服务器和servlet容器,用于为Java应用程序提供服务。 Tomcat通常用于生产企业部署和较小的应用程序需求,既灵活又强大。

在本指南中,我们将讨论如何使用SSL保护您的Ubuntu 16.04 Tomcat安装。 默认情况下,安装后,Tomcat服务器和客户端之间的所有通信都是未加密的,包括任何输入的密码或任何敏感数据。 有很多方法可以将SSL加入我们的Tomcat安装。 本指南将介绍如何设置启用SSL的代理服务器以与客户端安全协商,然后将请求转交给Tomcat。

我们将介绍如何使用ApacheNginx的设置方法。

为什么是反向代理?

有多种方法可以为Tomcat安装设置SSL,每种方法都有一组权衡。 在了解到Tomcat能够本地加密连接之后,我们可能会讨论一个反向代理解决方案似乎很奇怪。

SSL与Tomcat有许多缺点,使其难以管理:

  • Tomcat的运行时与非特权用户推荐的,无法绑定到像传统的SSL端口443限制端口 :有方法可以解决该像使用authbind程序映射与受限的端口无特权的程序,设置端口转发了防火墙等,但它们仍然代表额外的复杂性。
  • SSL与Tomcat没有得到广泛的其他软件的支持 :像咱们加密项目提供互动的Tomcat没有本机方法。 此外,Java密钥库格式要求在使用之前转换常规证书,这使自动化复杂化。
  • 常规的Web服务器发布的频率比Tomcat的 :这个可以有你的应用程序显著的安全隐患。 例如,受支持的Tomcat SSL加密套件可能会快速过时,从而使应用程序无法获得最佳保护。 在需要安全更新的情况下,更新Web服务器可能比Tomcat安装更容易。

反向代理解决方案通过简单地将一个强大的Web服务器放在Tomcat安装面前绕过了许多这些问题。 Web服务器可以使用SSL处理客户端请求,它专门用于处理的功能。 然后它可以代理请求到Tomcat运行在其正常,非特权配置。

这种关注的分离简化了配置,即使它意味着运行一个附加的软件。

先决条件

为了完成本指南,您必须在您的服务器上设置Tomcat。 本指南将假设你使用我们的指示在Ubuntu 16.04安装指南Tomcat的8才能完成设置。

当你有一个Tomcat启动和运行,下面继续为您首选的Web服务器的部分。Apache的正下方开始,而Nginx的配置可以通过直接跳到了一下被发现。

与Apache Web服务器的(方案1)代理功能mod_jk

Apache Web服务器有一个模块调用mod_jk可以与使用Apache JServ的协议Tomcat的直接通信。 默认情况下,在Tomcat中启用此协议的连接器,因此Tomcat已经准备好处理这些请求。

部分先决条件

在我们讨论如何代理Apache Web服务器到Tomcat的连接之前,您必须安装和保护Apache Web服务器。

您可以通过以下的第1步安装Apache Web服务器本指南 不要安装MySQL或PHP。

之后,您需要在服务器上设置SSL。 你这样做的方式取决于你是否有域名。

  • 如果你有一个域名......以确保您的服务器是让我们的加密,它提供免费的,可信证书的最简单方法。 按照我们让我们的加密指南为Apache设置此。
  • 如果你没有一个域...你只是使用测试或个人使用此配置,您可以使用自签名证书来代替。 这提供了相同类型的加密,但没有域验证。 按照我们的自签名的SSL指南Apache才能完成设置。

完成这些步骤后,请继续下面了解如何将Apache Web服务器连接到Tomcat安装。

第1步:安装和配置mod_jk

首先,我们需要安装mod_jk模块。 Apache Web服务器使用此来使用Apache JServ协议与Tomcat通信。

我们可以安装mod_jk从Ubuntu的默认存储库。 通过键入以下命令更新本地软件包索引并进行安装:

sudo apt-get update
sudo apt-get install libapache2-mod-jk

该模块将在安装后自动启用。

接下来,我们需要配置模块。 主配置文件位于/etc/libapache2-mod-jk/workers.properties 在文本编辑器中立即打开此文件:

sudo nano /etc/libapache2-mod-jk/workers.properties

在内部,找到workers.tomcat_home指令。 将此设置为Tomcat安装主目录。 对于我们的Tomcat的安装,这将是/opt/tomcat

/etc/libapache2-mod-jk/workers.properties
workers.tomcat_home=/opt/tomcat

保存并在完成后关闭文件。

第2步:调整Apache的虚拟主机来代理与mod_jk

接下来,我们需要调整我们的Apache Virtual Host来代理我们Tomcat安装的请求。

要打开的正确的虚拟主机文件将取决于您用来设置SSL的方法。

如果设置了使用链接到上面的导自签名的SSL证书,打开default-ssl.conf文件:

sudo nano /etc/apache2/sites-available/default-ssl.conf

如果使用Let's Encrypt设置SSL,文件位置将取决于在证书过程中选择的选项。 您可以通过键入以下内容找到提供SSL请求所涉及的虚拟主机:

sudo apache2ctl -S

你的输出可能会开始像这样:

VirtualHost configuration:
*:80                   example.com (/etc/apache2/sites-enabled/000-default.conf:1)
*:443                  is a NameVirtualHost
         default server example.com (/etc/apache2/sites-enabled/000-default-le-ssl.conf:2)
         port 443 namevhost example.com (/etc/apache2/sites-enabled/000-default-le-ssl.conf:2)
         port 443 namevhost www.example.com (/etc/apache2/sites-enabled/default-ssl.conf:2)

. . .

查看与SSL端口443(本示例中为第3-6行)相关联的线路,我们可以确定为这些域提供服务所涉及的虚拟主机文件。 在这里,我们看到,无论是000-default-le-ssl.conf文件和default-ssl.conf文件中都有涉及,所以你应该修改这两个。 您的结果可能会有所不同:

sudo nano /etc/apache2/sites-enabled/000-default-le-ssl.conf
sudo nano /etc/apache2/sites-enabled/default-ssl.conf

无论您要打开哪些文件,过程都是相同的。 某处内的VirtualHost标记,则应输入以下内容:

<VirtualHost *:443>

    . . .

    JKMount /* ajp13_worker

    . . .

</VirtualHost>

保存并关闭文件。 对您确定需要编辑的任何其他文件重复上述过程。

完成后,请键入以下内容检查配置:

sudo apache2ctl configtest

如果输出包含Syntax OK ,重新启动Apache Web服务器的过程:

sudo systemctl restart apache2

现在,您应该可以通过在Web浏览器中访问您的网站的SSL版本来访问Tomcat安装:

https://example.com

接下来,跳过下面的Nginx配置,并继续在部分详细说明如何限制访问Tomcat为了完成您的配置。

(选项2)使用Nginx的HTTP代理

代理也很容易与Nginx,如果你喜欢它Apache网络服务器。 虽然Nginx没有一个模块允许它说Apache JServ协议,它可以使用其强大的HTTP代理功能与Tomcat通信。

部分先决条件

在我们可以讨论如何代理Nginx连接到Tomcat之前,您必须安装和保护Nginx。

您可以通过以下Nginx的安装在Ubuntu上安装16.04 Nginx的我们的导游

之后,您需要在服务器上设置SSL。 你这样做的方式取决于你是否有域名。

  • 如果你有一个域名......以确保您的服务器是让我们的加密,它提供免费的,可信证书的最简单方法。 按照我们让我们的加密指南Nginx的设置此。
  • 如果你没有一个域...你只是使用测试或个人使用此配置,您可以使用自签名证书来代替。 这提供了相同类型的加密,但没有域验证。 按照我们的自签名的SSL指南的Nginx才能完成设置。

完成这些步骤后,请继续下面了解如何将Nginx Web服务器连接到Tomcat安装。

第1步:调整Nginx服务器块配置

设置Nginx代理到Tomcat非常简单。

首先打开与您的站点相关联的服务器块文件。 我们将假设您在本指南中使用默认服务器块文件:

sudo nano /etc/nginx/sites-available/default

内,朝文件的顶部,我们需要添加一个upstream块。 这将概述连接细节,以便Nginx知道我们的Tomcat服务器在侦听。 放置此任何的外server的文件中定义的块:

/ etc / nginx / sites-available / default
upstream tomcat {
    server 127.0.0.1:8080 fail_timout=0;
}

server {

    . . .

接下来,在server的443端口定义的块,修改location /块。 我们要直接传递所有请求的upstream我们刚刚定义的块。 注释掉当前内容,并使用proxy_pass指令传递到上游,我们刚才定义的“雄猫”。

我们还需要包括proxy_params该块内配置。 这个文件定义了Nginx如何代理连接的许多细节:

/ etc / nginx / sites-available / default
upstream tomcat {
    server 127.0.0.1:8080 fail_timout=0;
}

server {
    . . .

    location / {
        #try_files $uri $uri/ =404;
        include proxy_params;
        proxy_pass http://tomcat/;
    }

    . . .
}

完成后,保存并关闭文件。

第2步:测试并重新启动Nginx

接下来,测试以确保您的配置更改没有引入任何语法错误:

sudo nginx -t

如果没有报告错误,请重新启动Nginx以实现您的更改:

sudo systemctl restart nginx

现在,您应该可以通过在Web浏览器中访问您的网站的SSL版本来访问Tomcat安装:

https://example.com

限制对Tomcat安装的访问

现在你有了对你的Tomcat安装的SSL加密访问,我们可以锁定Tomcat安装一点。

由于我们希望通过我们的代理发送我们对Tomcat的所有请求,因此我们可以将Tomcat配置为仅侦听本地环回接口上的连接。 这确保外部各方不能尝试直接从Tomcat发出请求。

打开server.xml的Tomcat配置目录中的文件更改这些设置:

sudo nano /opt/tomcat/conf/server.xml

在这个文件中,我们需要修改连接器定义。 目前在配置中启用了两个连接器。 一个处理端口8080上的正常HTTP请求,而另一个处理端口8009上的Apache JServ协议请求。配置将如下所示:

/opt/tomcat/conf/server.xml
. . .

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
. . .

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

为了限制访问本地回环接口,我们只需要添加一个“地址”属性设置为127.0.0.1在每个连接器定义。 最终结果将如下所示:

/opt/tomcat/conf/server.xml
. . .

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               address="127.0.0.1"
               redirectPort="8443" />
. . .

    <Connector port="8009" address="127.0.0.1" protocol="AJP/1.3" redirectPort="8443" />

完成这两个更改后,保存并关闭文件。

我们需要重新启动Tomcat进程来实现这些更改:

sudo systemctl restart tomcat

如果你按照我们的Tomcat安装指南,你有一个ufw上安装启用防火墙。 现在我们对Tomcat的所有请求都只限于本地环回接口,我们可以从防火墙中删除允许向Tomcat发出外部请求的规则。

sudo ufw delete allow 8080

您的Tomcat安装现在只能通过Web服务器代理访问。

结论

此时,您的Tomcat实例的连接应在Web服务器代理的帮助下使用SSL进行加密。 虽然配置单独的Web服务器进程可能会增加服务应用程序所涉及的软件,但它显着简化了保护流量的过程。