使用mod_cluster保护SSL请求?

如果我在安全局域网中同时使用httpd和JBoss,是否可以在httpd上终止SSL请求,并通过mod_cluster将请求传递给可用的JBoss?

任何想法什么configuration涉及?

默认情况下,mod_cluster将终止您的SSL连接,并将信息传递给未encryption的后端。 有关说明,请参阅http://docs.jboss.org/mod_cluster/1.0.0/html/UsingSSL.html

注意第12.2节显示了在代理和后端服务之间使用SSL所需的额外configuration。 12.3节展示了如何转发有关SSL会话的信息,如果你的应用程序有理由关心它,

你也可以

  1. 只保护从客户端到您的平衡器的连接,并将平衡器 – 工作者networking视为可信:

    客户端< – SSL – >平衡器< – AJP / HTTP – >工

  2. 或者你可以保护整个path(注意:平衡器实际上是一个ManInTheMiddle攻击的定义:-),所以你将不得不相信你的平衡器隐式的工人…)

    客户端< – SSL – >平衡器< – SSL – >工

2)选项有严重的性能缺点。 我会告诉你如何做到这两点:

1) httpd:

<IfModule manager_module> Listen 8888 ManagerBalancerName qacluster <VirtualHost localhost:8888> ServerName localhost:8888 <Directory /> Order deny,allow Deny from all Allow from all </Directory> ServerAdvertise on EnableMCPMReceive AdvertiseGroup 224.0.1.105:6666 <Location /mcm> SetHandler mod_cluster-manager Order deny,allow Deny from all Allow from all </Location> SSLEngine on SSLCipherSuite AES128-SHA:ALL:!ADH:!LOW:!MD5:!SSLV2:!NULL SSLVerifyDepth 10 SSLCertificateKeyFile /home/karm/Server/server.key SSLCertificateFile /home/karm/Server/server.crt SSLCACertificateFile /home/karm/Server/myca.crt LogLevel debug </VirtualHost> </IfModule> 

AS7:

 <subsystem xmlns="urn:jboss:domain:modcluster:1.1"> <mod-cluster-config advertise-socket="modcluster" advertise="true" sticky-session="true" sticky-session-remove="false" sticky-session-force="false" connector="ajp"> <dynamic-load-provider history="10" decay="2"> <load-metric type="busyness"/> </dynamic-load-provider> <ssl key-alias="javaclient" password="tomcat" certificate-key-file="/home/karm/Client/client-cert-key.jks" cipher-suite="AES128-SHA:ALL:!ADH:!LOW:!MD5:!SSLV2:!NULL" ca-certificate-file="/home/karm/Client/ca-cert.jks"/> </mod-cluster-config> </subsystem> 

现在,AS7仅使用HTTPS将Mod_cluster消息发布给平衡器。 其他平衡器 – > AS7通信(如客户端的请求)没有encryption,因为它使用AJP。

2) httpd:

 +++ SSLEngine on +SSLProxyEngine On +++ 

AS7:

 +++ -<connector name="ajp" protocol="AJP/1.3" scheme="ajp" socket-binding="ajp"/> +<connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" secure="true"> + <ssl name="https" key-alias="javaclient" password="tomcat" certificate-key-file="/home/karm/Client/client-cert-key.jks" cipher-suite="AES128-SHA:ALL:!ADH:!LOW:!MD5:!SSLV2:!NULL" protocol="TLS" verify-client="false" certificate-file="/home/karm/Client/client-cert-key.jks" ca-certificate-file="/home/karm/Client/ca-cert.jks"/> +</connector> +++ -<mod-cluster-config advertise-socket="modcluster" advertise="true" sticky-session="true" sticky-session-remove="false" sticky-session-force="false" connector="ajp"> +<mod-cluster-config advertise-socket="modcluster" advertise="true" sticky-session="true" sticky-session-remove="false" sticky-session-force="false" connector="https"> +++ 

关于2)

  • 注意verify-client =“false”,你不能validation客户端,因为请求是通过平衡器传入的。
  • 注意性能下降。
  • 注意一个讨厌的bug https://issues.jboss.org/browse/JBPAPP-9493 (也可能影响当前的Mod_cluster)

HTH

干杯