2013-07-04 62 views
1

我有一个运行在apache虚拟主机后面的tomcat服务器(这样我就可以在同一台服务器上使用多个域)。 Apache所做的就是取主机名并将请求转发到适当的tomcat服务器,后者处理所有事情。在Apache2虚拟主机后面使用SSL保护Tomcat

我期待在其中一个域上设置SSL,我理解如何这样做的过程,但我对是否允许tomcat处理所有SSL或apache感到困惑。

有什么区别?任何缺点允许tomcat处理SSL?如果我让apache处理ssl,当我访问tomcat应用程序时,我还会得到绿色条,挂锁等吗?我对整个情况有点困惑。

我使用代理来处理apache2转发到适当的tomcat应用程序。如果我这样设置代理:

<VirtualHost 1.2.3.4:443> 
    ServerName host.domain.org 

    <Proxy *> 
     Order deny,allow 
     Allow from all 
    </Proxy> 

    SSLEngine on 
    SSLProxyEngine On 
    SSLCertificateFile /etc/apache2/ssl/certificate.crt 
    SSLCertificateKeyFile /etc/apache2/ssl/certificate.key 

    ProxyRequests Off 
    ProxyPreserveHost On 
    ProxyPass/https://localhost:8443/ 
    ProxyPassReverse/https://localhost:8443/ 
</VirtualHost> 

我需要使用https和端口8443吗?这样做会不会也需要在tomcat上设置SSL?或者我可以在tomcat的server.xml连接器中使用以下内容:

secure = false 
scheme = https 
proxyName = www.mydomain.com 
proxyPort = 443 

而不用担心将tomcat连接到ssl密钥?这是通过apache2使用SSL保护tomcat应用程序的正确方法吗?

回答

0

您在配置中声明的方式,每个请求会有两个不同的https连接。从任何客户端到你的Apache的第一名。 Apache将解密请求并为了转发它 - 与tomcat协商一个SSL连接。你必须在这两台机器上设置https。

你可以只使用http转发到tomcat(通常是端口8080)。但是,这可能是因为tomcat没有看到你以这种方式使用https(你必须尝试一下)。如果您使用ajp,例如mod_jk或mod_proxy_ajp,而不是Apache和tomcat之间的http,tomcat肯定也会看到https连接。

你应该做什么取决于Apache和tomcat之间的距离 - 以及你对网络之间的信任程度。我会说这通常没有问题来运行这个连接未加密,但你的里程可能会有所不同。

从apache上处理https获得什么?那么,我认为Apache可能会在会话协商和加密方面稍微好一些 - 至少它会将加密内容卸载到不同的服务器上,从而允许tomcat执行它最擅长的功能(为应用程序提供服务),并让Apache处理所有奇怪的问题密码的东西。

我喜欢这种配置 - 通常你也可以用mod_rewrite,负载平衡等快速修复一些问题,这样一个额外的apache允许你比“只是”一个tomcat更加灵活。

+0

您是否遇到过此配置的任何问题。我运行的是相同的配置,但我遇到了重定向到http(80)端口的Web应用程序的问题。另外,一些被服务的内容不在http中,我想知道它是否因为tomcat没有意识到它正在SSL中运行? – Mel