2010-06-25 76 views
1

我们的应用程序运行在两个框架中。一个使用https一个不。我试图配置tomcat连接器工作,但是当我在一个框架中工作时,它不能在另一个框架中工作。与SSL配置和Tomcat混淆

我被告知我们不需要'完全处理'SSL,因为这是由我们的负载均衡器处理的。不知道这些是什么意思。

例如: 在一个框架中,我们将获得权限被拒绝的错误,另一个框架将工作。如果我们改变了相反的情况,但不是许可错误,我们会得到无效的证书错误。

连接器上的tomcat文档没有很好地描述这些选项。任何想法我们做错了什么?

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"/> 

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="false" maxThreads="150" scheme="https" secure="false" clientAuth="false" sslProtocol="TLS"/> 

上述连接器与http框架一起工作,但在IE中给了我“混合内容警告”,因为有些请求是http和一些https。

任何帮助将不胜感激。

回答

0

如果您有一个连接器侦听端口443,它应该启用SSL,因为这是HTTPS端口,浏览器会在连接—时发送SSL ClientHello消息,服务器不会理解此内容,除非它是启用S​​SL。

可能是因为您的负载平衡器正在终止SSL连接,并通过普通HTTP将请求转发给Tomcat。在这种情况下,您不需要端口443上的连接器。

但是,听起来像您的某个应用程序可能正在使用客户端证书来执行身份验证。查看web.xml文件中的login-config元素。什么验证方法正在使用?

如果您需要客户端证书,但SSL在负载平衡器处终止,则身份验证无法执行,因为客户端证书从未到达Tomcat。

+1

看起来这里并不需要客户端证书,但实际上你可以通过使用mod_headers和类似于mod_hexy的东西将客户端证书传递给Tomcat (也可以没有mod_headers和mod_jk): SSLOptions + StdEnvVars + ExportCertData RequestHeader set SSL_CLIENT_CERT%{SSL_CLIENT_CERT} e – Bruno 2010-06-25 17:16:19

0

如果你在一个负载均衡器后面,比如带有mod_proxy的Apache Httpd(在反向模式下),SSL连接将从浏览器到负载均衡器(如“erickson”所述)。您可能确实在您的web.xml文件中检查了login-config(以检查您是否使用CLIENT-CERT)。

可能遇到的另一个问题是transport-guarantee元素在web.xml:

<security-constraint> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

似乎有一种方法与当你确定你是一个安全的负载定制的阀门,迫使这个-balancer。这里是an article on the subject (translated from French)

混合内容最可能的原因是加载未托管在SSL上的图像。您可能会发现某个公司徽标在某个位置模板中使用http://进行了硬编码,或者某些Location标头可能会返回http:// URL。 后者可以使用这样apache httpd的配置是固定的(假设这是你的负载均衡器),在这里你需要与过程的正确地址替换它:甚至从大

Header edit Location ^http://www.example.com/test/ https://www.example.com/test/ 

许多网站(公司)混合的内容。这实际上是一件坏事,因为:

  • 用户无法真正了解页面的哪些部分是安全的,哪些不是,没有查看所有请求以及页面的来源。
  • 一些cookie和HTTPS请求中的信息泄露给普通HTTP请求。如果有人通过普通的HTTP捕获该cookie,他们可能通过HTTPS作为冒名顶替者来使用它。 (更具体地说,当使用没有安全标志的cookie时)。