使用 mod_cluster 保护 SSL 请求?

使用 mod_cluster 保护 SSL 请求?

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

知道涉及哪些配置吗?

答案1

默认情况下,mod_cluster 将终止您的 SSL 连接并将信息以未加密的形式传递到后端。请参阅http://docs.jboss.org/mod_cluster/1.0.0/html/UsingSSL.html了解使用说明。

请注意第 12.2 节,其中展示了在代理和后端服务之间使用 SSL 所需的额外配置。第 12.3 节展示了如何转发有关已终止 SSL 会话的信息(如果您的应用程序有理由关心该信息)。

答案2

你可以

  1. 仅保护从客户端到平衡器的连接并将平衡器-工作者网络视为可信的:

    客户端<--SSL-->平衡器<--AJP/HTTP-->工作者

  2. 或者你可以保护整个路径(注意:根据定义,Balancer 实际上是一种中间人攻击 :-),所以你必须完全信任你的平衡器上的工作者......)

    客户端<--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 通信(如客户端的请求)未加密,因为它使用 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",由于请求是通过平衡器发送的,因此您无法验证客户端......
  • 注意性能下降。
  • 注意一个令人讨厌的错误https://issues.jboss.org/browse/JBPAPP-9493(可能也会影响当前的 Mod_cluster)

高血压

干杯

相关内容